| LEFT | RIGHT |
| 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-present eyeo GmbH | 3 * Copyright (C) 2006-present 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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 */ | 188 */ |
| 189 addSubscription(subscription) | 189 addSubscription(subscription) |
| 190 { | 190 { |
| 191 if (this.knownSubscriptions.has(subscription.url)) | 191 if (this.knownSubscriptions.has(subscription.url)) |
| 192 return; | 192 return; |
| 193 | 193 |
| 194 this.knownSubscriptions.set(subscription.url, subscription); | 194 this.knownSubscriptions.set(subscription.url, subscription); |
| 195 connectSubscriptionFilters(subscription); | 195 connectSubscriptionFilters(subscription); |
| 196 | 196 |
| 197 filterNotifier.emit("subscription.added", subscription); | 197 filterNotifier.emit("subscription.added", subscription); |
| 198 |
| 199 subscription.clearCaches(); |
| 198 } | 200 } |
| 199 | 201 |
| 200 /** | 202 /** |
| 201 * Removes a subscription from the storage. | 203 * Removes a subscription from the storage. |
| 202 * @param {Subscription} subscription The subscription to be removed. | 204 * @param {Subscription} subscription The subscription to be removed. |
| 203 */ | 205 */ |
| 204 removeSubscription(subscription) | 206 removeSubscription(subscription) |
| 205 { | 207 { |
| 206 if (!this.knownSubscriptions.has(subscription.url)) | 208 if (!this.knownSubscriptions.has(subscription.url)) |
| 207 return; | 209 return; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 227 let oldFilters = [...subscription.filters()]; | 229 let oldFilters = [...subscription.filters()]; |
| 228 disconnectSubscriptionFilters(subscription, oldFilters); | 230 disconnectSubscriptionFilters(subscription, oldFilters); |
| 229 subscription.clearFilters(); | 231 subscription.clearFilters(); |
| 230 | 232 |
| 231 for (let filter of filters) | 233 for (let filter of filters) |
| 232 subscription.addFilter(filter); | 234 subscription.addFilter(filter); |
| 233 | 235 |
| 234 connectSubscriptionFilters(subscription, filters); | 236 connectSubscriptionFilters(subscription, filters); |
| 235 | 237 |
| 236 filterNotifier.emit("subscription.updated", subscription, oldFilters); | 238 filterNotifier.emit("subscription.updated", subscription, oldFilters); |
| 239 |
| 240 subscription.clearCaches(); |
| 237 } | 241 } |
| 238 | 242 |
| 239 /** | 243 /** |
| 240 * Adds a user-defined filter to the storage. | 244 * Adds a user-defined filter to the storage. |
| 241 * @param {Filter} filter | 245 * @param {Filter} filter |
| 242 * @param {?SpecialSubscription} [subscription] The subscription that the | 246 * @param {?SpecialSubscription} [subscription] The subscription that the |
| 243 * filter should be added to. | 247 * filter should be added to. |
| 244 * @param {number} [position] The position within the subscription at which | 248 * @param {number} [position] The position within the subscription at which |
| 245 * the filter should be added. If not specified, the filter is added at the | 249 * the filter should be added. If not specified, the filter is added at the |
| 246 * end of the subscription. | 250 * end of the subscription. |
| 247 */ | 251 */ |
| 248 addFilter(filter, subscription, position) | 252 addFilter(filter, subscription, position) |
| 249 { | 253 { |
| 250 if (!subscription) | 254 if (!subscription) |
| 251 { | 255 { |
| 252 for (let currentSubscription of filter.subscriptions()) | 256 for (let currentSubscription of this.subscriptionsForFilter(filter)) |
| 253 { | 257 { |
| 254 if (currentSubscription instanceof SpecialSubscription && | 258 if (currentSubscription instanceof SpecialSubscription && |
| 255 !currentSubscription.disabled) | 259 !currentSubscription.disabled) |
| 256 { | 260 { |
| 257 return; // No need to add | 261 return; // No need to add |
| 258 } | 262 } |
| 259 } | 263 } |
| 260 subscription = this.getGroupForFilter(filter); | 264 subscription = this.getGroupForFilter(filter); |
| 261 } | 265 } |
| 262 if (!subscription) | 266 if (!subscription) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 281 * @param {?SpecialSubscription} [subscription] The subscription that the | 285 * @param {?SpecialSubscription} [subscription] The subscription that the |
| 282 * filter should be removed from. If not specified, the filter will be | 286 * filter should be removed from. If not specified, the filter will be |
| 283 * removed from all subscriptions. | 287 * removed from all subscriptions. |
| 284 * @param {number} [position] The position within the subscription at which | 288 * @param {number} [position] The position within the subscription at which |
| 285 * the filter should be removed. If not specified, all instances of the | 289 * the filter should be removed. If not specified, all instances of the |
| 286 * filter will be removed. | 290 * filter will be removed. |
| 287 */ | 291 */ |
| 288 removeFilter(filter, subscription, position) | 292 removeFilter(filter, subscription, position) |
| 289 { | 293 { |
| 290 let subscriptions = ( | 294 let subscriptions = ( |
| 291 subscription ? [subscription] : filter.subscriptions() | 295 subscription ? [subscription] : this.subscriptionsForFilter(filter) |
| 292 ); | 296 ); |
| 293 for (let currentSubscription of subscriptions) | 297 for (let currentSubscription of subscriptions) |
| 294 { | 298 { |
| 295 if (currentSubscription instanceof SpecialSubscription) | 299 if (currentSubscription instanceof SpecialSubscription) |
| 296 { | 300 { |
| 297 let positions = []; | 301 let positions = []; |
| 298 if (typeof position == "undefined") | 302 if (typeof position == "undefined") |
| 299 { | 303 { |
| 300 let index = -1; | 304 let index = -1; |
| 301 do | 305 do |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 let knownSubscriptions = new Map(); | 411 let knownSubscriptions = new Map(); |
| 408 for (let subscription of parser.subscriptions) | 412 for (let subscription of parser.subscriptions) |
| 409 knownSubscriptions.set(subscription.url, subscription); | 413 knownSubscriptions.set(subscription.url, subscription); |
| 410 | 414 |
| 411 this.fileProperties = parser.fileProperties; | 415 this.fileProperties = parser.fileProperties; |
| 412 this.knownSubscriptions = knownSubscriptions; | 416 this.knownSubscriptions = knownSubscriptions; |
| 413 Filter.knownFilters = parser.knownFilters; | 417 Filter.knownFilters = parser.knownFilters; |
| 414 Subscription.knownSubscriptions = parser.knownSubscriptions; | 418 Subscription.knownSubscriptions = parser.knownSubscriptions; |
| 415 | 419 |
| 416 if (!silent) | 420 if (!silent) |
| 421 { |
| 417 filterNotifier.emit("load"); | 422 filterNotifier.emit("load"); |
| 423 |
| 424 // Clear any in-memory caches that may have been created during |
| 425 // initialization. |
| 426 clearSubscriptionCaches(); |
| 427 } |
| 418 } | 428 } |
| 419 }; | 429 }; |
| 420 } | 430 } |
| 421 | 431 |
| 422 /** | 432 /** |
| 423 * Loads all subscriptions from disk. | 433 * Loads all subscriptions from disk. |
| 424 * @returns {Promise} A promise resolved or rejected when loading is complete. | 434 * @returns {Promise} A promise resolved or rejected when loading is complete. |
| 425 */ | 435 */ |
| 426 loadFromDisk() | 436 loadFromDisk() |
| 427 { | 437 { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 456 } | 466 } |
| 457 }); | 467 }); |
| 458 }).catch(error => | 468 }).catch(error => |
| 459 { | 469 { |
| 460 Cu.reportError(error); | 470 Cu.reportError(error); |
| 461 return tryBackup(1); | 471 return tryBackup(1); |
| 462 }).then(() => | 472 }).then(() => |
| 463 { | 473 { |
| 464 this.initialized = true; | 474 this.initialized = true; |
| 465 filterNotifier.emit("load"); | 475 filterNotifier.emit("load"); |
| 476 clearSubscriptionCaches(); |
| 466 }); | 477 }); |
| 467 } | 478 } |
| 468 | 479 |
| 469 /** | 480 /** |
| 470 * Constructs the file name for a <code>patterns.ini</code> backup. | 481 * Constructs the file name for a <code>patterns.ini</code> backup. |
| 471 * @param {number} backupIndex Number of the backup file (1 being the most | 482 * @param {number} backupIndex Number of the backup file (1 being the most |
| 472 * recent). | 483 * recent). |
| 473 * @returns {string} Backup file name. | 484 * @returns {string} Backup file name. |
| 474 */ | 485 */ |
| 475 getBackupName(backupIndex) | 486 getBackupName(backupIndex) |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 719 * subscription is disconnected from its own filters. | 730 * subscription is disconnected from its own filters. |
| 720 */ | 731 */ |
| 721 function disconnectSubscriptionFilters(subscription, filters) | 732 function disconnectSubscriptionFilters(subscription, filters) |
| 722 { | 733 { |
| 723 if (!filterStorage.knownSubscriptions.has(subscription.url)) | 734 if (!filterStorage.knownSubscriptions.has(subscription.url)) |
| 724 return; | 735 return; |
| 725 | 736 |
| 726 for (let filter of filters || subscription.filters()) | 737 for (let filter of filters || subscription.filters()) |
| 727 filter.removeSubscription(subscription); | 738 filter.removeSubscription(subscription); |
| 728 } | 739 } |
| 740 |
| 741 /** |
| 742 * Clears any in-memory caches held by subscriptions in the storage. |
| 743 */ |
| 744 function clearSubscriptionCaches() |
| 745 { |
| 746 for (let subscription of filterStorage.subscriptions()) |
| 747 subscription.clearCaches(); |
| 748 } |
| LEFT | RIGHT |