Left: | ||
Right: |
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 16 matching lines...) Expand all Loading... | |
27 const {Filter, ActiveFilter} = require("./filterClasses"); | 27 const {Filter, ActiveFilter} = require("./filterClasses"); |
28 const {Subscription, SpecialSubscription, | 28 const {Subscription, SpecialSubscription, |
29 ExternalSubscription} = require("./subscriptionClasses"); | 29 ExternalSubscription} = require("./subscriptionClasses"); |
30 const {filterNotifier} = require("./filterNotifier"); | 30 const {filterNotifier} = require("./filterNotifier"); |
31 const {INIParser} = require("./iniParser"); | 31 const {INIParser} = require("./iniParser"); |
32 | 32 |
33 /** | 33 /** |
34 * Version number of the filter storage file format. | 34 * Version number of the filter storage file format. |
35 * @type {number} | 35 * @type {number} |
36 */ | 36 */ |
37 const FORMAT_VERSION = 5; | 37 const FORMAT_VERSION = 5; |
Manish Jethani
2018/10/16 21:59:32
Using `const` and accordingly using ALL_CAPS
| |
38 | 38 |
39 /** | 39 /** |
40 * {@link filterStorage} implementation. | 40 * {@link filterStorage} implementation. |
41 */ | 41 */ |
42 class FilterStorage | 42 class FilterStorage |
43 { | 43 { |
44 /** | 44 /** |
45 * @hideconstructor | 45 * @hideconstructor |
Manish Jethani
2018/10/16 21:59:31
Singleton, so hide constructor.
| |
46 */ | 46 */ |
47 constructor() | 47 constructor() |
48 { | 48 { |
49 /** | 49 /** |
50 * Will be set to true after the initial {@link FilterStorage#loadFromDisk} | 50 * Will be set to true after the initial {@link FilterStorage#loadFromDisk} |
51 * call completes. | 51 * call completes. |
52 * @type {boolean} | 52 * @type {boolean} |
53 */ | 53 */ |
54 this.initialized = false; | 54 this.initialized = false; |
55 | 55 |
(...skipping 14 matching lines...) Expand all Loading... | |
70 /** | 70 /** |
71 * Map of subscriptions already on the list, by their URL/identifier. | 71 * Map of subscriptions already on the list, by their URL/identifier. |
72 * @type {Map.<string,Subscription>} | 72 * @type {Map.<string,Subscription>} |
73 */ | 73 */ |
74 this.knownSubscriptions = new Map(); | 74 this.knownSubscriptions = new Map(); |
75 | 75 |
76 /** | 76 /** |
77 * Will be set to true if {@link FilterStorage#saveToDisk} is running | 77 * Will be set to true if {@link FilterStorage#saveToDisk} is running |
78 * (reentrance protection). | 78 * (reentrance protection). |
79 * @type {boolean} | 79 * @type {boolean} |
80 * @private | 80 * @private |
Manish Jethani
2018/10/16 21:59:32
Marked @private
| |
81 */ | 81 */ |
82 this._saving = false; | 82 this._saving = false; |
83 | 83 |
84 /** | 84 /** |
85 * Will be set to true if a {@link FilterStorage#saveToDisk} call arrives | 85 * Will be set to true if a {@link FilterStorage#saveToDisk} call arrives |
86 * while {@link FilterStorage#saveToDisk} is already running (delayed | 86 * while {@link FilterStorage#saveToDisk} is already running (delayed |
87 * execution). | 87 * execution). |
88 * @type {boolean} | 88 * @type {boolean} |
89 * @private | 89 * @private |
90 */ | 90 */ |
91 this._needsSave = false; | 91 this._needsSave = false; |
92 } | 92 } |
93 | 93 |
94 /** | 94 /** |
95 * The version number of the <code>patterns.ini</code> format used. | 95 * The version number of the <code>patterns.ini</code> format used. |
96 * @type {number} | 96 * @type {number} |
97 */ | 97 */ |
98 get formatVersion() | 98 get formatVersion() |
99 { | 99 { |
100 return FORMAT_VERSION; | 100 return FORMAT_VERSION; |
101 } | 101 } |
102 | 102 |
103 /** | 103 /** |
104 * The file containing the subscriptions. | 104 * The file containing the subscriptions. |
Manish Jethani
2018/10/16 21:59:32
Fixed some inconsistencies in the documentation.
| |
105 * @type {string} | 105 * @type {string} |
106 */ | 106 */ |
107 get sourceFile() | 107 get sourceFile() |
108 { | 108 { |
109 return "patterns.ini"; | 109 return "patterns.ini"; |
110 } | 110 } |
111 | 111 |
112 /** | 112 /** |
113 * Yields all subscriptions in the storage. | 113 * Yields all subscriptions in the storage. |
114 * @yields {Subscription} | 114 * @yields {Subscription} |
115 */ | 115 */ |
116 *subscriptions() | 116 *subscriptions() |
117 { | 117 { |
118 yield* this.knownSubscriptions.values(); | 118 yield* this.knownSubscriptions.values(); |
119 } | 119 } |
120 | 120 |
121 /** | 121 /** |
122 * The number of subscriptions in the storage. | 122 * The number of subscriptions in the storage. |
123 * @type {number} | 123 * @type {number} |
124 */ | 124 */ |
125 get subscriptionCount() | 125 get subscriptionCount() |
126 { | 126 { |
127 return this.knownSubscriptions.size; | 127 return this.knownSubscriptions.size; |
128 } | 128 } |
129 | 129 |
130 /** | 130 /** |
131 * Finds the filter group that a filter should be added to by default. Will | 131 * Finds the filter group that a filter should be added to by default. Will |
132 * return <code>null</code> if this group doesn't exist yet. | 132 * return <code>null</code> if this group doesn't exist yet. |
133 * @param {Filter} filter | 133 * @param {Filter} filter |
134 * @returns {?SpecialSubscription} | 134 * @returns {?SpecialSubscription} |
Manish Jethani
2018/10/16 21:59:32
s/@return/@returns/
| |
135 */ | 135 */ |
136 getGroupForFilter(filter) | 136 getGroupForFilter(filter) |
137 { | 137 { |
138 let generalSubscription = null; | 138 let generalSubscription = null; |
139 for (let subscription of this.knownSubscriptions.values()) | 139 for (let subscription of this.knownSubscriptions.values()) |
140 { | 140 { |
141 if (subscription instanceof SpecialSubscription && !subscription.disabled) | 141 if (subscription instanceof SpecialSubscription && !subscription.disabled) |
142 { | 142 { |
143 // Always prefer specialized subscriptions | 143 // Always prefer specialized subscriptions |
144 if (subscription.isDefaultFor(filter)) | 144 if (subscription.isDefaultFor(filter)) |
(...skipping 13 matching lines...) Expand all Loading... | |
158 /** | 158 /** |
159 * Adds a subscription to the storage. | 159 * Adds a subscription to the storage. |
160 * @param {Subscription} subscription The subscription to be added. | 160 * @param {Subscription} subscription The subscription to be added. |
161 */ | 161 */ |
162 addSubscription(subscription) | 162 addSubscription(subscription) |
163 { | 163 { |
164 if (this.knownSubscriptions.has(subscription.url)) | 164 if (this.knownSubscriptions.has(subscription.url)) |
165 return; | 165 return; |
166 | 166 |
167 this.knownSubscriptions.set(subscription.url, subscription); | 167 this.knownSubscriptions.set(subscription.url, subscription); |
168 addSubscriptionFilters(subscription); | 168 connectSubscriptionFilters(subscription); |
169 | 169 |
170 filterNotifier.emit("subscription.added", subscription); | 170 filterNotifier.emit("subscription.added", subscription); |
171 } | 171 } |
172 | 172 |
173 /** | 173 /** |
174 * Removes a subscription from the storage. | 174 * Removes a subscription from the storage. |
175 * @param {Subscription} subscription The subscription to be removed. | 175 * @param {Subscription} subscription The subscription to be removed. |
176 */ | 176 */ |
177 removeSubscription(subscription) | 177 removeSubscription(subscription) |
178 { | 178 { |
179 if (!this.knownSubscriptions.has(subscription.url)) | 179 if (!this.knownSubscriptions.has(subscription.url)) |
180 return; | 180 return; |
181 | 181 |
182 removeSubscriptionFilters(subscription); | 182 disconnectSubscriptionFilters(subscription); |
183 | 183 |
184 this.knownSubscriptions.delete(subscription.url); | 184 this.knownSubscriptions.delete(subscription.url); |
185 | 185 |
186 // This should be the last remaining reference to the Subscription | 186 // This should be the last remaining reference to the Subscription |
187 // object. | 187 // object. |
188 Subscription.knownSubscriptions.delete(subscription.url); | 188 Subscription.knownSubscriptions.delete(subscription.url); |
189 | 189 |
190 filterNotifier.emit("subscription.removed", subscription); | 190 filterNotifier.emit("subscription.removed", subscription); |
191 } | 191 } |
192 | 192 |
193 /** | 193 /** |
194 * Replaces the list of filters in a subscription with a new list. | 194 * Replaces the list of filters in a subscription with a new list. |
195 * @param {Subscription} subscription The subscription to be updated. | 195 * @param {Subscription} subscription The subscription to be updated. |
196 * @param {Array.<Filter>} filters The new list of filters. | 196 * @param {Array.<Filter>} filters The new list of filters. |
Manish Jethani
2018/10/16 21:59:32
s/Filter[]/Array.<Filter>/
| |
197 */ | 197 */ |
198 updateSubscriptionFilters(subscription, filters) | 198 updateSubscriptionFilters(subscription, filters) |
199 { | 199 { |
200 removeSubscriptionFilters(subscription); | 200 disconnectSubscriptionFilters(subscription); |
201 let oldFilters = subscription.filters; | 201 let oldFilters = subscription.filters; |
202 subscription.filters = filters; | 202 subscription.filters = filters; |
203 addSubscriptionFilters(subscription); | 203 connectSubscriptionFilters(subscription); |
204 filterNotifier.emit("subscription.updated", subscription, oldFilters); | 204 filterNotifier.emit("subscription.updated", subscription, oldFilters); |
205 } | 205 } |
206 | 206 |
207 /** | 207 /** |
208 * Adds a user-defined filter to the storage. | 208 * Adds a user-defined filter to the storage. |
209 * @param {Filter} filter | 209 * @param {Filter} filter |
210 * @param {?SpecialSubscription} [subscription] The subscription that the | 210 * @param {?SpecialSubscription} [subscription] The subscription that the |
211 * filter should be added to. | 211 * filter should be added to. |
212 * @param {number} [position] The position within the subscription at which | 212 * @param {number} [position] The position within the subscription at which |
213 * the filter should be added. If not specified, the filter is added at the | 213 * the filter should be added. If not specified, the filter is added at the |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
327 { | 327 { |
328 if (!Prefs.savestats || !(filter instanceof ActiveFilter)) | 328 if (!Prefs.savestats || !(filter instanceof ActiveFilter)) |
329 return; | 329 return; |
330 | 330 |
331 filter.hitCount++; | 331 filter.hitCount++; |
332 filter.lastHit = Date.now(); | 332 filter.lastHit = Date.now(); |
333 } | 333 } |
334 | 334 |
335 /** | 335 /** |
336 * Resets hit count for some filters. | 336 * Resets hit count for some filters. |
337 * @param {?Array.<Filter>} filters The filters to be reset. If | 337 * @param {?Array.<Filter>} [filters] The filters to be reset. If not |
Manish Jethani
2018/10/16 21:59:32
Added ? before the type to indicate that the value
| |
338 * <code>null</code>, all filters will be reset. | 338 * specified, all filters will be reset. |
339 */ | 339 */ |
340 resetHitCounts(filters) | 340 resetHitCounts(filters) |
341 { | 341 { |
342 if (!filters) | 342 if (!filters) |
343 filters = Filter.knownFilters.values(); | 343 filters = Filter.knownFilters.values(); |
344 for (let filter of filters) | 344 for (let filter of filters) |
345 { | 345 { |
346 filter.hitCount = 0; | 346 filter.hitCount = 0; |
347 filter.lastHit = 0; | 347 filter.lastHit = 0; |
348 } | 348 } |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
650 | 650 |
651 /** | 651 /** |
652 * Reads the user's filters from disk, manages them in memory, and writes them | 652 * Reads the user's filters from disk, manages them in memory, and writes them |
653 * back to disk. | 653 * back to disk. |
654 */ | 654 */ |
655 let filterStorage = new FilterStorage(); | 655 let filterStorage = new FilterStorage(); |
656 | 656 |
657 exports.filterStorage = filterStorage; | 657 exports.filterStorage = filterStorage; |
658 | 658 |
659 /** | 659 /** |
660 * Connects a subscription to its filters without any notifications. | 660 * Connects a subscription to its filters without any notifications. |
Manish Jethani
2018/10/16 21:59:31
s/joins/connects/
| |
661 * @param {Subscription} subscription The subscription that should be | 661 * @param {Subscription} subscription The subscription that should be |
662 * connected to its filters. | 662 * connected to its filters. |
663 */ | 663 */ |
664 function addSubscriptionFilters(subscription) | 664 function connectSubscriptionFilters(subscription) |
665 { | 665 { |
666 if (!filterStorage.knownSubscriptions.has(subscription.url)) | 666 if (!filterStorage.knownSubscriptions.has(subscription.url)) |
667 return; | 667 return; |
668 | 668 |
669 for (let filter of subscription.filters) | 669 for (let filter of subscription.filters) |
670 filter.addSubscription(subscription); | 670 filter.addSubscription(subscription); |
671 } | 671 } |
672 | 672 |
673 /** | 673 /** |
674 * Disconnects a subscription from its filters without any notifications. | 674 * Disconnects a subscription from its filters without any notifications. |
Manish Jethani
2018/10/16 21:59:32
s/removes/disconnects/
| |
675 * @param {Subscription} subscription The subscription that should be | 675 * @param {Subscription} subscription The subscription that should be |
676 * disconnected from its filters. | 676 * disconnected from its filters. |
677 */ | 677 */ |
678 function removeSubscriptionFilters(subscription) | 678 function disconnectSubscriptionFilters(subscription) |
679 { | 679 { |
680 if (!filterStorage.knownSubscriptions.has(subscription.url)) | 680 if (!filterStorage.knownSubscriptions.has(subscription.url)) |
681 return; | 681 return; |
682 | 682 |
683 for (let filter of subscription.filters) | 683 for (let filter of subscription.filters) |
684 filter.removeSubscription(subscription); | 684 filter.removeSubscription(subscription); |
685 } | 685 } |
LEFT | RIGHT |