mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-13 11:38:16 +00:00
Add support for importing/exporting bookmarks.
This commit is contained in:
parent
f0c0beb50c
commit
dbab71154c
@ -734,6 +734,10 @@ function fillContextMenu(name)
|
||||
|
||||
|
||||
|
||||
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
||||
|
||||
|
||||
|
||||
function doContextCmd(cmdName)
|
||||
{
|
||||
debug("doContextCmd start: cmd='" + cmdName + "'");
|
||||
@ -776,6 +780,54 @@ function doContextCmd(cmdName)
|
||||
var promptStr = bundle.GetStringFromName("DeleteItems");
|
||||
if (!confirm(promptStr)) return(false);
|
||||
}
|
||||
else if (cmdName == "http://home.netscape.com/NC-rdf#command?cmd=import")
|
||||
{
|
||||
try
|
||||
{
|
||||
var filePicker = Components.classes["component://netscape/filespecwithui"].createInstance();
|
||||
if (filePicker) filePicker = filePicker.QueryInterface(Components.interfaces.nsIFileSpecWithUI);
|
||||
if (!filePicker) return(false);
|
||||
|
||||
var promptStr = bundle.GetStringFromName("SelectImport");
|
||||
|
||||
filePicker.chooseInputFile(promptStr, 2, "", ""); // 2 = html filter
|
||||
var filespec = filePicker.QueryInterface(Components.interfaces.nsIFileSpec);
|
||||
if (!filespec) return(false);
|
||||
var filename = filespec.URLString;
|
||||
if ((!filename) || (filename == "")) return(false);
|
||||
|
||||
debug("Import: '" + filename + "'\n");
|
||||
urlVal = filename;
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
else if (cmdName == "http://home.netscape.com/NC-rdf#command?cmd=export")
|
||||
{
|
||||
try
|
||||
{
|
||||
var filePicker = Components.classes["component://netscape/filespecwithui"].createInstance();
|
||||
if (filePicker) filePicker = filePicker.QueryInterface(Components.interfaces.nsIFileSpecWithUI);
|
||||
if (!filePicker) return(false);
|
||||
|
||||
var promptStr = bundle.GetStringFromName("EnterExport");
|
||||
|
||||
filePicker.chooseOutputFile(promptStr, "bookmarks.html", 2); // 2 = html filter
|
||||
var filespec = filePicker.QueryInterface(Components.interfaces.nsIFileSpec);
|
||||
if (!filespec) return(false);
|
||||
var filename = filespec.URLString;
|
||||
if ((!filename) || (filename == "")) return(false);
|
||||
|
||||
debug("Export: '" + filename + "'\n");
|
||||
urlVal = filename;
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
|
||||
var treeNode = document.getElementById("bookmarksTree");
|
||||
if (!treeNode) return(false);
|
||||
|
@ -48,14 +48,16 @@
|
||||
<menuitem value="&menuitem.newFolder.label;" oncommand="return doContextCmd('http://home.netscape.com/NC-rdf#command?cmd=newfolder');"/>
|
||||
<menuitem value="&menuitem.newSeparator.label;" oncommand="return doContextCmd('http://home.netscape.com/NC-rdf#command?cmd=newseparator');"/>
|
||||
<menuseparator/>
|
||||
<menuitem value="&menuitem.close.label;"
|
||||
oncommand="window.close()" />
|
||||
<menuitem value="&menuitem.import.label;" oncommand="return doContextCmd('http://home.netscape.com/NC-rdf#command?cmd=import');" />
|
||||
<menuitem value="&menuitem.export.label;" oncommand="return doContextCmd('http://home.netscape.com/NC-rdf#command?cmd=export');" />
|
||||
<menuseparator/>
|
||||
<menuitem value="&menuitem.close.label;" oncommand="window.close()" />
|
||||
</menupopup>
|
||||
</menu>
|
||||
|
||||
<menu value="&menu.edit.label;">
|
||||
<menupopup>
|
||||
<menuitem value="&menuitem.undo.label;" disabled="true" />
|
||||
<menuitem value="&menuitem.redo.label;" disabled="true" />
|
||||
<menuseparator/>
|
||||
<menuitem value="&menuitem.cut.label;" oncommand="return doCut()" />
|
||||
<menuitem value="&menuitem.copy.label;" oncommand="return doCopy()" />
|
||||
@ -68,6 +70,15 @@
|
||||
<menuitem value="&menuitem.properties.label;" oncommand="return BookmarkProperties();"/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
|
||||
<menu value="&menu.view.label;">
|
||||
<menupopup>
|
||||
<menuitem value="&menuitem.newbookmarkfolder.label;" oncommand="return doContextCmd('http://home.netscape.com/NC-rdf#command?cmd=setnewbookmarkfolder');" />
|
||||
<menuitem value="&menuitem.newinternetsearchfolder.label;" oncommand="return doContextCmd('http://home.netscape.com/NC-rdf#command?cmd=setnewsearchfolder');" />
|
||||
<menuitem value="&menuitem.personaltoolbarfolder.label;" oncommand="return doContextCmd('http://home.netscape.com/NC-rdf#command?cmd=setpersonaltoolbarfolder');" />
|
||||
</menupopup>
|
||||
</menu>
|
||||
|
||||
</menubar>
|
||||
|
||||
<popupset>
|
||||
|
@ -33,6 +33,9 @@ SetNewSearchFolder = Set as New Internet Search Folder
|
||||
|
||||
BookmarkProperties = Properties...
|
||||
|
||||
Import = Import...
|
||||
Export = Export...
|
||||
|
||||
ImportedIEFavorites = Imported IE Favorites
|
||||
ImportedNetPositiveBookmarks = Imported NetPositive Bookmarks
|
||||
|
||||
@ -44,6 +47,9 @@ NewFolderNamePrompt = Enter a name for the new folder:
|
||||
|
||||
NeedValidURL = Please enter a valid, fully qualified URL.
|
||||
|
||||
SelectImport = Import bookmark file:
|
||||
EnterExport = Export bookmark file:
|
||||
|
||||
DeleteItems = Delete the selected item(s)?
|
||||
|
||||
WebPageUpdated = The following web page has been updated:
|
||||
|
@ -26,7 +26,10 @@
|
||||
<!ENTITY menuitem.newBookmark.label "New Bookmark">
|
||||
<!ENTITY menuitem.newFolder.label "New Folder">
|
||||
<!ENTITY menuitem.newSeparator.label "New Separator">
|
||||
<!ENTITY menuitem.import.label "Import...">
|
||||
<!ENTITY menuitem.export.label "Export...">
|
||||
<!ENTITY menuitem.close.label "Close">
|
||||
|
||||
<!ENTITY menu.edit.label "Edit">
|
||||
<!ENTITY menuitem.undo.label "Undo">
|
||||
<!ENTITY menuitem.redo.label "Redo">
|
||||
@ -37,6 +40,12 @@
|
||||
<!ENTITY menuitem.selectAll.label "Select All">
|
||||
<!ENTITY menuitem.find.label "Search in Bookmarks...">
|
||||
<!ENTITY menuitem.properties.label "Properties...">
|
||||
|
||||
<!ENTITY menu.view.label "View">
|
||||
<!ENTITY menuitem.newbookmarkfolder.label "Set as New Bookmark Folder">
|
||||
<!ENTITY menuitem.newinternetsearchfolder.label "Set as New Internet Search Folder">
|
||||
<!ENTITY menuitem.personaltoolbarfolder.label "Set as Personal Toolbar Folder">
|
||||
|
||||
<!ENTITY tree.header.name.label "Name">
|
||||
<!-- LOCALIZATION NOTE (tree.header.url.label) : DONT_TRANSLATE -->
|
||||
<!ENTITY tree.header.url.label "URL">
|
||||
|
@ -179,6 +179,8 @@ nsIRDFResource *kNC_BookmarkCommand_DeleteBookmarkSeparator;
|
||||
nsIRDFResource *kNC_BookmarkCommand_SetNewBookmarkFolder;
|
||||
nsIRDFResource *kNC_BookmarkCommand_SetPersonalToolbarFolder;
|
||||
nsIRDFResource *kNC_BookmarkCommand_SetNewSearchFolder;
|
||||
nsIRDFResource *kNC_BookmarkCommand_Import;
|
||||
nsIRDFResource *kNC_BookmarkCommand_Export;
|
||||
|
||||
|
||||
|
||||
@ -242,6 +244,8 @@ bm_AddRefGlobals()
|
||||
gRDF->GetResource(NC_NAMESPACE_URI "command?cmd=setnewbookmarkfolder", &kNC_BookmarkCommand_SetNewBookmarkFolder);
|
||||
gRDF->GetResource(NC_NAMESPACE_URI "command?cmd=setpersonaltoolbarfolder",&kNC_BookmarkCommand_SetPersonalToolbarFolder);
|
||||
gRDF->GetResource(NC_NAMESPACE_URI "command?cmd=setnewsearchfolder", &kNC_BookmarkCommand_SetNewSearchFolder);
|
||||
gRDF->GetResource(NC_NAMESPACE_URI "command?cmd=import", &kNC_BookmarkCommand_Import);
|
||||
gRDF->GetResource(NC_NAMESPACE_URI "command?cmd=export", &kNC_BookmarkCommand_Export);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
@ -299,10 +303,11 @@ bm_ReleaseGlobals()
|
||||
NS_IF_RELEASE(kNC_BookmarkCommand_DeleteBookmark);
|
||||
NS_IF_RELEASE(kNC_BookmarkCommand_DeleteBookmarkFolder);
|
||||
NS_IF_RELEASE(kNC_BookmarkCommand_DeleteBookmarkSeparator);
|
||||
|
||||
NS_IF_RELEASE(kNC_BookmarkCommand_SetNewBookmarkFolder);
|
||||
NS_IF_RELEASE(kNC_BookmarkCommand_SetPersonalToolbarFolder);
|
||||
NS_IF_RELEASE(kNC_BookmarkCommand_SetNewSearchFolder);
|
||||
NS_IF_RELEASE(kNC_BookmarkCommand_Import);
|
||||
NS_IF_RELEASE(kNC_BookmarkCommand_Export);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1661,7 +1666,7 @@ nsresult ExamineBookmarkSchedule(nsIRDFResource *theBookmark, PRBool & examineFl
|
||||
nsresult GetBookmarkToPing(nsIRDFResource **theBookmark);
|
||||
|
||||
nsresult GetBookmarksFile(nsFileSpec* aResult);
|
||||
nsresult WriteBookmarks(nsIRDFDataSource *ds, nsIRDFResource *root);
|
||||
nsresult WriteBookmarks(nsFileSpec *bookmarksFile, nsIRDFDataSource *ds, nsIRDFResource *root);
|
||||
nsresult WriteBookmarksContainer(nsIRDFDataSource *ds, nsOutputFileStream strm, nsIRDFResource *container, PRInt32 level, nsISupportsArray *parentArray);
|
||||
nsresult GetTextForNode(nsIRDFNode* aNode, nsString& aResult);
|
||||
nsresult UpdateBookmarkLastModifiedDate(nsIRDFResource *aSource);
|
||||
@ -1674,6 +1679,8 @@ nsresult GetBookmarkToPing(nsIRDFResource **theBookmark);
|
||||
nsresult deleteBookmarkItem(nsIRDFResource *src, nsISupportsArray *aArguments, PRInt32 parentArgIndex, nsIRDFResource *objType);
|
||||
nsresult setFolderHint(nsIRDFResource *src, nsIRDFResource *objType);
|
||||
nsresult getFolderViaHint(nsIRDFResource *src, PRBool fallbackFlag, nsIRDFResource **folder);
|
||||
nsresult importBookmarks(nsISupportsArray *aArguments);
|
||||
nsresult exportBookmarks(nsISupportsArray *aArguments);
|
||||
|
||||
nsresult getResourceFromLiteralNode(nsIRDFNode *node, nsIRDFResource **res);
|
||||
|
||||
@ -3059,6 +3066,10 @@ nsBookmarksService::GetTarget(nsIRDFResource* aSource,
|
||||
getLocaleString("SetPersonalToolbarFolder", name);
|
||||
else if (aSource == kNC_BookmarkCommand_SetNewSearchFolder)
|
||||
getLocaleString("SetNewSearchFolder", name);
|
||||
else if (aSource == kNC_BookmarkCommand_Import)
|
||||
getLocaleString("Import", name);
|
||||
else if (aSource == kNC_BookmarkCommand_Export)
|
||||
getLocaleString("Export", name);
|
||||
|
||||
if (name.Length() > 0)
|
||||
{
|
||||
@ -3774,6 +3785,69 @@ nsBookmarksService::getFolderViaHint(nsIRDFResource *objType, PRBool fallbackFla
|
||||
|
||||
|
||||
|
||||
nsresult
|
||||
nsBookmarksService::importBookmarks(nsISupportsArray *aArguments)
|
||||
{
|
||||
// look for #URL which is the "file:///" URL to import
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIRDFNode> aNode;
|
||||
if (NS_FAILED(rv = getArgumentN(aArguments, kNC_URL, 0, getter_AddRefs(aNode))))
|
||||
return(rv);
|
||||
nsCOMPtr<nsIRDFLiteral> pathLiteral = do_QueryInterface(aNode);
|
||||
if (!pathLiteral) return(NS_ERROR_NO_INTERFACE);
|
||||
|
||||
const PRUnichar *pathUni = nsnull;
|
||||
pathLiteral->GetValueConst(&pathUni);
|
||||
if (!pathUni) return(NS_ERROR_NULL_POINTER);
|
||||
|
||||
nsAutoString fileName(pathUni);
|
||||
nsFileURL fileURL(fileName);
|
||||
nsFileSpec fileSpec(fileURL);
|
||||
if (!fileSpec.IsFile()) return(NS_ERROR_UNEXPECTED);
|
||||
|
||||
// figure out where to add the imported bookmarks
|
||||
nsCOMPtr<nsIRDFResource> newBookmarkFolder;
|
||||
if (NS_FAILED(rv = getFolderViaHint(kNC_NewBookmarkFolder, PR_TRUE,
|
||||
getter_AddRefs(newBookmarkFolder))))
|
||||
return(rv);
|
||||
|
||||
// read 'em in
|
||||
BookmarkParser parser;
|
||||
parser.Init(&fileSpec, mInner, nsAutoString(""));
|
||||
parser.Parse(newBookmarkFolder, kNC_Bookmark);
|
||||
|
||||
return(NS_OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
nsresult
|
||||
nsBookmarksService::exportBookmarks(nsISupportsArray *aArguments)
|
||||
{
|
||||
// look for #URL which is the "file:///" URL to export
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIRDFNode> aNode;
|
||||
if (NS_FAILED(rv = getArgumentN(aArguments, kNC_URL, 0, getter_AddRefs(aNode))))
|
||||
return(rv);
|
||||
nsCOMPtr<nsIRDFLiteral> pathLiteral = do_QueryInterface(aNode);
|
||||
if (!pathLiteral) return(NS_ERROR_NO_INTERFACE);
|
||||
|
||||
const PRUnichar *pathUni = nsnull;
|
||||
pathLiteral->GetValueConst(&pathUni);
|
||||
if (!pathUni) return(NS_ERROR_NULL_POINTER);
|
||||
|
||||
nsAutoString fileName(pathUni);
|
||||
nsFileURL fileURL(fileName);
|
||||
nsFileSpec fileSpec(fileURL);
|
||||
|
||||
// write 'em out
|
||||
rv = WriteBookmarks(&fileSpec, mInner, kNC_BookmarksRoot);
|
||||
|
||||
return(rv);
|
||||
}
|
||||
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsBookmarksService::DoCommand(nsISupportsArray *aSources, nsIRDFResource *aCommand,
|
||||
nsISupportsArray *aArguments)
|
||||
@ -3787,6 +3861,10 @@ nsBookmarksService::DoCommand(nsISupportsArray *aSources, nsIRDFResource *aComma
|
||||
return(NS_ERROR_ILLEGAL_VALUE);
|
||||
}
|
||||
|
||||
// Note: some commands only run once (instead of looping over selection);
|
||||
// if that's the case, be sure to "break" (if success) so that "mDirty"
|
||||
// is set (and "bookmarks.html" will be flushed out shortly afterwards)
|
||||
|
||||
for (loop=((PRInt32)numSources)-1; loop>=0; loop--)
|
||||
{
|
||||
nsCOMPtr<nsISupports> aSource = aSources->ElementAt(loop);
|
||||
@ -3796,21 +3874,21 @@ nsBookmarksService::DoCommand(nsISupportsArray *aSources, nsIRDFResource *aComma
|
||||
|
||||
if (aCommand == kNC_BookmarkCommand_NewBookmark)
|
||||
{
|
||||
if (NS_FAILED(rv = insertBookmarkItem(src, aArguments,
|
||||
loop, kNC_Bookmark)))
|
||||
return(rv);
|
||||
rv = insertBookmarkItem(src, aArguments, loop, kNC_Bookmark);
|
||||
if (NS_FAILED(rv)) return(rv);
|
||||
break;
|
||||
}
|
||||
else if (aCommand == kNC_BookmarkCommand_NewFolder)
|
||||
{
|
||||
if (NS_FAILED(rv = insertBookmarkItem(src, aArguments,
|
||||
loop, kNC_Folder)))
|
||||
return(rv);
|
||||
rv = insertBookmarkItem(src, aArguments, loop, kNC_Folder);
|
||||
if (NS_FAILED(rv)) return(rv);
|
||||
break;
|
||||
}
|
||||
else if (aCommand == kNC_BookmarkCommand_NewSeparator)
|
||||
{
|
||||
if (NS_FAILED(rv = insertBookmarkItem(src, aArguments,
|
||||
loop, kNC_BookmarkSeparator)))
|
||||
return(rv);
|
||||
rv = insertBookmarkItem(src, aArguments, loop, kNC_BookmarkSeparator);
|
||||
if (NS_FAILED(rv)) return(rv);
|
||||
break;
|
||||
}
|
||||
else if (aCommand == kNC_BookmarkCommand_DeleteBookmark)
|
||||
{
|
||||
@ -3832,18 +3910,33 @@ nsBookmarksService::DoCommand(nsISupportsArray *aSources, nsIRDFResource *aComma
|
||||
}
|
||||
else if (aCommand == kNC_BookmarkCommand_SetNewBookmarkFolder)
|
||||
{
|
||||
if (NS_FAILED(rv = setFolderHint(src, kNC_NewBookmarkFolder)))
|
||||
return(rv);
|
||||
rv = setFolderHint(src, kNC_NewBookmarkFolder);
|
||||
if (NS_FAILED(rv)) return(rv);
|
||||
break;
|
||||
}
|
||||
else if (aCommand == kNC_BookmarkCommand_SetPersonalToolbarFolder)
|
||||
{
|
||||
if (NS_FAILED(rv = setFolderHint(src, kNC_PersonalToolbarFolder)))
|
||||
return(rv);
|
||||
rv = setFolderHint(src, kNC_PersonalToolbarFolder);
|
||||
if (NS_FAILED(rv)) return(rv);
|
||||
break;
|
||||
}
|
||||
else if (aCommand == kNC_BookmarkCommand_SetNewSearchFolder)
|
||||
{
|
||||
if (NS_FAILED(rv = setFolderHint(src, kNC_NewSearchFolder)))
|
||||
return(rv);
|
||||
rv = setFolderHint(src, kNC_NewSearchFolder);
|
||||
if (NS_FAILED(rv)) return(rv);
|
||||
break;
|
||||
}
|
||||
else if (aCommand == kNC_BookmarkCommand_Import)
|
||||
{
|
||||
rv = importBookmarks(aArguments);
|
||||
if (NS_FAILED(rv)) return(rv);
|
||||
break;
|
||||
}
|
||||
else if (aCommand == kNC_BookmarkCommand_Export)
|
||||
{
|
||||
rv = exportBookmarks(aArguments);
|
||||
if (NS_FAILED(rv)) return(rv);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3886,7 +3979,14 @@ nsBookmarksService::Flush()
|
||||
|
||||
if (mBookmarksAvailable == PR_TRUE)
|
||||
{
|
||||
rv = WriteBookmarks(mInner, kNC_BookmarksRoot);
|
||||
nsFileSpec bookmarksFile;
|
||||
rv = GetBookmarksFile(&bookmarksFile);
|
||||
|
||||
// Oh well, couldn't get the bookmarks file. Guess there
|
||||
// aren't any bookmarks for us to write out.
|
||||
if (NS_FAILED(rv)) return NS_OK;
|
||||
|
||||
rv = WriteBookmarks(&bookmarksFile, mInner, kNC_BookmarksRoot);
|
||||
}
|
||||
return(rv);
|
||||
}
|
||||
@ -4222,24 +4322,20 @@ nsBookmarksService::ReadBookmarks()
|
||||
|
||||
|
||||
nsresult
|
||||
nsBookmarksService::WriteBookmarks(nsIRDFDataSource *ds, nsIRDFResource *root)
|
||||
nsBookmarksService::WriteBookmarks(nsFileSpec *bookmarksFile, nsIRDFDataSource *ds,
|
||||
nsIRDFResource *root)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
nsFileSpec bookmarksFile;
|
||||
rv = GetBookmarksFile(&bookmarksFile);
|
||||
|
||||
// Oh well, couldn't get the bookmarks file. Guess there
|
||||
// aren't any bookmarks for us to write out.
|
||||
if (NS_FAILED(rv))
|
||||
return NS_OK;
|
||||
if (!bookmarksFile) return(NS_ERROR_NULL_POINTER);
|
||||
if (!ds) return(NS_ERROR_NULL_POINTER);
|
||||
if (!root) return(NS_ERROR_NULL_POINTER);
|
||||
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsISupportsArray> parentArray;
|
||||
if (NS_FAILED(rv = NS_NewISupportsArray(getter_AddRefs(parentArray))))
|
||||
return(rv);
|
||||
|
||||
rv = NS_ERROR_FAILURE;
|
||||
nsOutputFileStream strm(bookmarksFile);
|
||||
nsOutputFileStream strm(*bookmarksFile);
|
||||
if (strm.is_open())
|
||||
{
|
||||
strm << "<!DOCTYPE NETSCAPE-Bookmark-file-1>\n";
|
||||
|
Loading…
x
Reference in New Issue
Block a user