зеркало из https://github.com/mozilla/gecko-dev.git
Bug 374528 Provide backup and restore functionality for Places bookmarks (for thunder, r=dietrich, a=mconnor)
This commit is contained in:
Родитель
82768c5293
Коммит
e8f70c5d03
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче