Bug 374528 Provide backup and restore functionality for Places bookmarks (for thunder, r=dietrich, a=mconnor)

This commit is contained in:
dietrich@mozilla.com 2007-09-09 18:02:41 -07:00
Родитель 82768c5293
Коммит e8f70c5d03
4 изменённых файлов: 173 добавлений и 1 удалений

Просмотреть файл

@ -270,7 +270,7 @@ var PlacesOrganizer = {
if (window.fromFile)
this.importFromFile();
},
/**
* Open a file-picker and import the selected file into the bookmarks store
*/
@ -307,6 +307,141 @@ var PlacesOrganizer = {
}
},
/**
* Populates the restore menu with the dates of the backups available.
*/
populateRestoreMenu: function PO_populateRestoreMenu() {
var restorePopup = document.getElementById("fileRestorePopup");
// remove existing menu items
// last item is the restoreFromFile item
while (restorePopup.childNodes.length > 1)
restorePopup.removeChild(restorePopup.firstChild);
// get bookmarks backup dir
var dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
var bookmarksBackupDir = dirSvc.get("ProfD", Ci.nsIFile);
bookmarksBackupDir.append("bookmarkbackups");
if (!bookmarksBackupDir.exists())
return; // no backup files
// get list of files
var fileList = [];
var files = bookmarksBackupDir.directoryEntries;
while (files.hasMoreElements()) {
var f = files.getNext().QueryInterface(Ci.nsIFile);
if (!f.isHidden() && f.leafName.match(/\.html?$/))
fileList.push(f);
}
fileList.sort(function PO_fileList_compare(a, b) {
return b.lastModifiedTime - a.lastModifiedTime;
});
if (fileList.length == 0)
return;
// populate menu
for (var i = 0; i < fileList.length; i++) {
var m = restorePopup.insertBefore
(document.createElement("menuitem"),
document.getElementById("restoreFromFile"));
var dateStr = fileList[i].leafName.replace("bookmarks-", "").
replace(".html", "");
if (!dateStr.length)
dateStr = fileList[i].leafName;
m.setAttribute("label", dateStr);
m.setAttribute("value", fileList[i].leafName);
m.setAttribute("oncommand",
"PlacesOrganizer.onRestoreMenuItemClick(this);");
}
restorePopup.insertBefore(document.createElement("menuseparator"),
document.getElementById("restoreFromFile"));
},
/**
* Called when a menuitem is selected from the restore menu.
*/
onRestoreMenuItemClick: function PO_onRestoreMenuItemClick(aMenuItem) {
var dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
var bookmarksFile = dirSvc.get("ProfD", Ci.nsIFile);
bookmarksFile.append("bookmarkbackups");
bookmarksFile.append(aMenuItem.getAttribute("value"));
if (!bookmarksFile.exists())
return;
var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"].
getService(Ci.nsIPromptService);
if (!prompts.confirm(null,
PlacesUtils.getString("bookmarksRestoreAlertTitle"),
PlacesUtils.getString("bookmarksRestoreAlert")))
return;
var ieSvc = Cc["@mozilla.org/browser/places/import-export-service;1"].
getService(Ci.nsIPlacesImportExportService);
ieSvc.importHTMLFromFile(bookmarksFile, true);
},
/**
* Backup bookmarks to desktop, auto-generate a filename with a date
*/
backupBookmarks: function PO_backupBookmarks() {
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
fp.init(window, PlacesUtils.getString("bookmarksBackupTitle"),
Ci.nsIFilePicker.modeSave);
fp.appendFilters(Ci.nsIFilePicker.filterHTML);
var dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
var backupsDir = dirSvc.get("Desk", Ci.nsILocalFile);
fp.displayDirectory = backupsDir;
var dateService = Cc["@mozilla.org/intl/scriptabledateformat;1"].
getService(Ci.nsIScriptableDateFormat);
var d = new Date();
var date = dateService.FormatDate("", dateService.dateFormatShort,
d.getFullYear(), d.getMonth(), d.getDate());
fp.defaultString = PlacesUtils.getFormattedString("bookmarksBackupFilename",
[date]);
if (fp.show() != Ci.nsIFilePicker.returnCancel) {
var ieSvc = Cc["@mozilla.org/browser/places/import-export-service;1"].
getService(Ci.nsIPlacesImportExportService);
ieSvc.exportHTMLToFile(fp.file);
}
},
/**
* Called when 'Choose File...' is selected from the Revert menupopup
* Prompts for a file and reverts bookmarks to those in the file
*/
restoreFromFile: function PO_restoreFromFile() {
var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"].
getService(Ci.nsIPromptService);
if (!prompts.confirm(null, PlacesUtils.getString("bookmarksRestoreAlertTitle"),
PlacesUtils.getString("bookmarksRestoreAlert")))
return;
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
fp.init(window, PlacesUtils.getString("bookmarksRestoreTitle"),
Ci.nsIFilePicker.modeOpen);
fp.appendFilters(Ci.nsIFilePicker.filterHTML);
var dirSvc = Cc["@mozilla.org/file/directory_service;1"].
getService(Ci.nsIProperties);
var backupsDir = dirSvc.get("Desk", Ci.nsILocalFile);
fp.displayDirectory = backupsDir;
if (fp.show() != Ci.nsIFilePicker.returnCancel) {
var ieSvc = Cc["@mozilla.org/browser/places/import-export-service;1"].
getService(Ci.nsIPlacesImportExportService);
ieSvc.importHTMLFromFile(fp.file, true);
}
},
updateStatusBarForView: function PO_updateStatusBarForView(aView) {
var statusText = "";
var selectedNode = aView.selectedNode;

Просмотреть файл

@ -86,6 +86,10 @@
oncommand="PlacesOrganizer.exportBookmarks();"/>
<command id="OrganizerCommand_import"
oncommand="PlacesOrganizer.importBookmarks();"/>
<command id="OrganizerCommand_backup"
oncommand="PlacesOrganizer.backupBookmarks();"/>
<command id="OrganizerCommand_restoreFromFile"
oncommand="PlacesOrganizer.restoreFromFile();"/>
<command id="OrganizerCommand_search:save"
oncommand="PlacesOrganizer.saveSearch();"/>
<command id="OrganizerCommand_search:moreCriteria"
@ -188,6 +192,20 @@
label="&cmd.export.label;"
accesskey="&cmd.export.accesskey;"/>
<menuseparator/>
<menuitem id="backupBookmarks"
command="OrganizerCommand_backup"
label="&cmd.backup.label;"
accesskey="&cmd.backup.accesskey;"/>
<menu id="fileRestoreMenu" label="&cmd.restore.label;"
accesskey="&cmd.export.accesskey;">
<menupopup id="fileRestorePopup" onpopupshowing="PlacesOrganizer.populateRestoreMenu();">
<menuitem id="restoreFromFile"
command="OrganizerCommand_restoreFromFile"
label="&cmd.restoreFromFile.label;"
accesskey="&cmd.restoreFromFile.accesskey;"/>
</menupopup>
</menu>
<menuseparator/>
<menuitem id="fileClose"
key="placesKey_close"
label="&file.close.label;"

Просмотреть файл

@ -67,6 +67,18 @@
"Import...">
<!ENTITY cmd.import.accesskey
"I">
<!ENTITY cmd.backup.label
"Backup...">
<!ENTITY cmd.backup.accesskey
"B">
<!ENTITY cmd.restore.label
"Restore...">
<!ENTITY cmd.restore.accesskey
"R">
<!ENTITY cmd.restoreFromFile.label
"Choose File...">
<!ENTITY cmd.restoreFromFile.accesskey
"C">
<!ENTITY cmd.select_all.label
"Select All">
<!ENTITY cmd.select_all.accesskey

Просмотреть файл

@ -20,6 +20,13 @@ bookmarksMenuEmptyFolder=(Empty)
bookmarksLivemarkLoading=Live Bookmark loading...
bookmarksLivemarkFailed=Live Bookmark feed failed to load.
bookmarksBackupFilename=Bookmarks %1$S.html
bookmarksBackupTitle=Bookmarks backup filename
bookmarksRestoreAlertTitle=Revert Bookmarks
bookmarksRestoreAlert=This will replace all of your current bookmarks with the backup. Are you sure?
bookmarksRestoreTitle=Select a bookmarks backup
headerTextPrefix1=Showing
headerTextPrefix2=Search Results for
headerTextPrefix3=Advanced Search