| Index: chrome/content/ui/filters-backup.js |
| =================================================================== |
| --- a/chrome/content/ui/filters-backup.js |
| +++ b/chrome/content/ui/filters-backup.js |
| @@ -103,17 +103,17 @@ var Backup = |
| for (let backup of backups) |
| { |
| let item = this.restoreTemplate.cloneNode(true); |
| let label = item.getAttribute("label"); |
| label = label.replace(/\?1\?/, Utils.formatTime(backup.lastModified)); |
| item.setAttribute("label", label); |
| item.addEventListener("command", function() |
| { |
| - Backup.restoreAllData(backup.file); |
| + FilterStorage.restoreBackup(backup.index); |
| }, false); |
| this.restoreInsertionPoint.parentNode.insertBefore(item, this.restoreInsertionPoint.nextSibling); |
| } |
| }); |
| }, |
| /** |
| * Lets the user choose a file to restore filters from. |
| @@ -136,44 +136,50 @@ var Backup = |
| } |
| }, |
| /** |
| * Restores patterns.ini from a file. |
| */ |
| restoreAllData: function(/**nsIFile*/ file) |
| { |
| - let stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); |
| - stream.init(file, FileUtils.MODE_RDONLY, FileUtils.PERMS_FILE, 0); |
| - stream.QueryInterface(Ci.nsILineInputStream); |
| - |
| + let sink = FilterStorage.importData(); |
| let lines = []; |
| - let line = {value: null}; |
| - if (stream.readLine(line)) |
| - lines.push(line.value); |
| - if (stream.readLine(line)) |
| - lines.push(line.value); |
| - stream.close(); |
| + IO.readFromFile(file, { |
| + process(line) |
| + { |
| + if (line === null) |
| + { |
| + let match; |
| + if (lines.length < 2 || lines[0] != "# Adblock Plus preferences" || !(match = /version=(\d+)/.exec(lines[1]))) |
| + { |
| + Utils.alert(window, E("backupButton").getAttribute("_restoreError"), E("backupButton").getAttribute("_restoreDialogTitle")); |
| + return; |
| + } |
| - let match; |
| - if (lines.length < 2 || lines[0] != "# Adblock Plus preferences" || !(match = /version=(\d+)/.exec(lines[1]))) |
| - { |
| - Utils.alert(window, E("backupButton").getAttribute("_restoreError"), E("backupButton").getAttribute("_restoreDialogTitle")); |
| - return; |
| - } |
| + let warning = E("backupButton").getAttribute("_restoreCompleteWarning"); |
| + let minVersion = parseInt(match[1], 10); |
| + if (minVersion > FilterStorage.formatVersion) |
| + warning += "\n\n" + E("backupButton").getAttribute("_restoreVersionWarning"); |
| - let warning = E("backupButton").getAttribute("_restoreCompleteWarning"); |
| - let minVersion = parseInt(match[1], 10); |
| - if (minVersion > FilterStorage.formatVersion) |
| - warning += "\n\n" + E("backupButton").getAttribute("_restoreVersionWarning"); |
| + if (!Utils.confirm(window, warning, E("backupButton").getAttribute("_restoreDialogTitle"))) |
| + return; |
| + } |
| + else if (lines.length < 2) |
| + lines.push(line); |
| - if (!Utils.confirm(window, warning, E("backupButton").getAttribute("_restoreDialogTitle"))) |
| - return; |
| - |
| - FilterStorage.loadFromDisk(file); |
| + sink(line); |
| + } |
| + }, error => |
| + { |
| + if (error) |
| + alert(error); |
| + else |
| + FilterStorage.saveToDisk(); |
| + }); |
| }, |
| /** |
| * Restores custom filters from a file. |
| */ |
| restoreCustomFilters: function(/**nsIFile*/ file) |
| { |
| IO.readFromFile(file, { |
| @@ -279,17 +285,21 @@ var Backup = |
| } |
| }, |
| /** |
| * Writes all patterns.ini data to a file. |
| */ |
| backupAllData: function(/**nsIFile*/ file) |
| { |
| - FilterStorage.saveToDisk(file); |
| + IO.writeToFile(file, FilterStorage.exportData(), error => |
| + { |
| + if (error) |
| + alert(error); |
| + }); |
| }, |
| /** |
| * Writes user's custom filters to a file. |
| */ |
| backupCustomFilters: function(/**nsIFile*/ file) |
| { |
| let subscriptions = FilterStorage.subscriptions.filter(s => s instanceof SpecialSubscription); |