| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2017 eyeo GmbH | 3 * Copyright (C) 2006-2017 eyeo GmbH |
| 4 * | 4 * |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
| 8 * | 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 { | 101 { |
| 102 backups.reverse(); | 102 backups.reverse(); |
| 103 for (let backup of backups) | 103 for (let backup of backups) |
| 104 { | 104 { |
| 105 let item = this.restoreTemplate.cloneNode(true); | 105 let item = this.restoreTemplate.cloneNode(true); |
| 106 let label = item.getAttribute("label"); | 106 let label = item.getAttribute("label"); |
| 107 label = label.replace(/\?1\?/, Utils.formatTime(backup.lastModified)); | 107 label = label.replace(/\?1\?/, Utils.formatTime(backup.lastModified)); |
| 108 item.setAttribute("label", label); | 108 item.setAttribute("label", label); |
| 109 item.addEventListener("command", function() | 109 item.addEventListener("command", function() |
| 110 { | 110 { |
| 111 Backup.restoreAllData(backup.file); | 111 FilterStorage.restoreBackup(backup.index); |
| 112 }, false); | 112 }, false); |
| 113 this.restoreInsertionPoint.parentNode.insertBefore(item, this.restoreIns
ertionPoint.nextSibling); | 113 this.restoreInsertionPoint.parentNode.insertBefore(item, this.restoreIns
ertionPoint.nextSibling); |
| 114 } | 114 } |
| 115 }); | 115 }); |
| 116 }, | 116 }, |
| 117 | 117 |
| 118 /** | 118 /** |
| 119 * Lets the user choose a file to restore filters from. | 119 * Lets the user choose a file to restore filters from. |
| 120 */ | 120 */ |
| 121 restoreFromFile: function() | 121 restoreFromFile: function() |
| (...skipping 12 matching lines...) Expand all Loading... |
| 134 else | 134 else |
| 135 this.restoreCustomFilters(picker.file); | 135 this.restoreCustomFilters(picker.file); |
| 136 } | 136 } |
| 137 }, | 137 }, |
| 138 | 138 |
| 139 /** | 139 /** |
| 140 * Restores patterns.ini from a file. | 140 * Restores patterns.ini from a file. |
| 141 */ | 141 */ |
| 142 restoreAllData: function(/**nsIFile*/ file) | 142 restoreAllData: function(/**nsIFile*/ file) |
| 143 { | 143 { |
| 144 let stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(C
i.nsIFileInputStream); | 144 let sink = FilterStorage.importData(); |
| 145 stream.init(file, FileUtils.MODE_RDONLY, FileUtils.PERMS_FILE, 0); | 145 let lines = []; |
| 146 stream.QueryInterface(Ci.nsILineInputStream); | 146 IO.readFromFile(file, { |
| 147 process(line) |
| 148 { |
| 149 if (line === null) |
| 150 { |
| 151 let match; |
| 152 if (lines.length < 2 || lines[0] != "# Adblock Plus preferences" || !(
match = /version=(\d+)/.exec(lines[1]))) |
| 153 { |
| 154 Utils.alert(window, E("backupButton").getAttribute("_restoreError"),
E("backupButton").getAttribute("_restoreDialogTitle")); |
| 155 return; |
| 156 } |
| 147 | 157 |
| 148 let lines = []; | 158 let warning = E("backupButton").getAttribute("_restoreCompleteWarning"
); |
| 149 let line = {value: null}; | 159 let minVersion = parseInt(match[1], 10); |
| 150 if (stream.readLine(line)) | 160 if (minVersion > FilterStorage.formatVersion) |
| 151 lines.push(line.value); | 161 warning += "\n\n" + E("backupButton").getAttribute("_restoreVersionW
arning"); |
| 152 if (stream.readLine(line)) | |
| 153 lines.push(line.value); | |
| 154 stream.close(); | |
| 155 | 162 |
| 156 let match; | 163 if (!Utils.confirm(window, warning, E("backupButton").getAttribute("_r
estoreDialogTitle"))) |
| 157 if (lines.length < 2 || lines[0] != "# Adblock Plus preferences" || !(match
= /version=(\d+)/.exec(lines[1]))) | 164 return; |
| 165 } |
| 166 else if (lines.length < 2) |
| 167 lines.push(line); |
| 168 |
| 169 sink(line); |
| 170 } |
| 171 }, error => |
| 158 { | 172 { |
| 159 Utils.alert(window, E("backupButton").getAttribute("_restoreError"), E("ba
ckupButton").getAttribute("_restoreDialogTitle")); | 173 if (error) |
| 160 return; | 174 alert(error); |
| 161 } | 175 else |
| 162 | 176 FilterStorage.saveToDisk(); |
| 163 let warning = E("backupButton").getAttribute("_restoreCompleteWarning"); | 177 }); |
| 164 let minVersion = parseInt(match[1], 10); | |
| 165 if (minVersion > FilterStorage.formatVersion) | |
| 166 warning += "\n\n" + E("backupButton").getAttribute("_restoreVersionWarning
"); | |
| 167 | |
| 168 if (!Utils.confirm(window, warning, E("backupButton").getAttribute("_restore
DialogTitle"))) | |
| 169 return; | |
| 170 | |
| 171 FilterStorage.loadFromDisk(file); | |
| 172 }, | 178 }, |
| 173 | 179 |
| 174 /** | 180 /** |
| 175 * Restores custom filters from a file. | 181 * Restores custom filters from a file. |
| 176 */ | 182 */ |
| 177 restoreCustomFilters: function(/**nsIFile*/ file) | 183 restoreCustomFilters: function(/**nsIFile*/ file) |
| 178 { | 184 { |
| 179 IO.readFromFile(file, { | 185 IO.readFromFile(file, { |
| 180 seenHeader: false, | 186 seenHeader: false, |
| 181 subscription: null, | 187 subscription: null, |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 else | 283 else |
| 278 this.backupCustomFilters(picker.file); | 284 this.backupCustomFilters(picker.file); |
| 279 } | 285 } |
| 280 }, | 286 }, |
| 281 | 287 |
| 282 /** | 288 /** |
| 283 * Writes all patterns.ini data to a file. | 289 * Writes all patterns.ini data to a file. |
| 284 */ | 290 */ |
| 285 backupAllData: function(/**nsIFile*/ file) | 291 backupAllData: function(/**nsIFile*/ file) |
| 286 { | 292 { |
| 287 FilterStorage.saveToDisk(file); | 293 IO.writeToFile(file, FilterStorage.exportData(), error => |
| 294 { |
| 295 if (error) |
| 296 alert(error); |
| 297 }); |
| 288 }, | 298 }, |
| 289 | 299 |
| 290 /** | 300 /** |
| 291 * Writes user's custom filters to a file. | 301 * Writes user's custom filters to a file. |
| 292 */ | 302 */ |
| 293 backupCustomFilters: function(/**nsIFile*/ file) | 303 backupCustomFilters: function(/**nsIFile*/ file) |
| 294 { | 304 { |
| 295 let subscriptions = FilterStorage.subscriptions.filter(s => s instanceof Spe
cialSubscription); | 305 let subscriptions = FilterStorage.subscriptions.filter(s => s instanceof Spe
cialSubscription); |
| 296 let minVersion = "2.0" | 306 let minVersion = "2.0" |
| 297 let list = []; | 307 let list = []; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 Utils.alert(window, E("backupButton").getAttribute("_backupError"), E("b
ackupButton").getAttribute("_backupDialogTitle")); | 358 Utils.alert(window, E("backupButton").getAttribute("_backupError"), E("b
ackupButton").getAttribute("_backupDialogTitle")); |
| 349 } | 359 } |
| 350 }); | 360 }); |
| 351 } | 361 } |
| 352 }; | 362 }; |
| 353 | 363 |
| 354 window.addEventListener("load", function() | 364 window.addEventListener("load", function() |
| 355 { | 365 { |
| 356 Backup.init(); | 366 Backup.init(); |
| 357 }, false); | 367 }, false); |
| OLD | NEW |