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-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 21 matching lines...) Expand all Loading... |
32 * @param {string} url download location of the subscription | 32 * @param {string} url download location of the subscription |
33 * @param {string} [title] title of the filter subscription | 33 * @param {string} [title] title of the filter subscription |
34 * @constructor | 34 * @constructor |
35 */ | 35 */ |
36 function Subscription(url, title) | 36 function Subscription(url, title) |
37 { | 37 { |
38 this.url = url; | 38 this.url = url; |
39 this.filters = []; | 39 this.filters = []; |
40 if (title) | 40 if (title) |
41 this._title = title; | 41 this._title = title; |
42 Subscription.knownSubscriptions[url] = this; | 42 Subscription.knownSubscriptions.set(url, this); |
43 } | 43 } |
44 exports.Subscription = Subscription; | 44 exports.Subscription = Subscription; |
45 | 45 |
46 Subscription.prototype = | 46 Subscription.prototype = |
47 { | 47 { |
48 /** | 48 /** |
49 * Download location of the subscription | 49 * Download location of the subscription |
50 * @type {string} | 50 * @type {string} |
51 */ | 51 */ |
52 url: null, | 52 url: null, |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 toString() | 147 toString() |
148 { | 148 { |
149 let buffer = []; | 149 let buffer = []; |
150 this.serialize(buffer); | 150 this.serialize(buffer); |
151 return buffer.join("\n"); | 151 return buffer.join("\n"); |
152 } | 152 } |
153 }; | 153 }; |
154 | 154 |
155 /** | 155 /** |
156 * Cache for known filter subscriptions, maps URL to subscription objects. | 156 * Cache for known filter subscriptions, maps URL to subscription objects. |
157 * @type {Object} | 157 * @type {Map.<string,Subscription>} |
158 */ | 158 */ |
159 Subscription.knownSubscriptions = Object.create(null); | 159 Subscription.knownSubscriptions = new Map(); |
160 | 160 |
161 /** | 161 /** |
162 * Returns a subscription from its URL, creates a new one if necessary. | 162 * Returns a subscription from its URL, creates a new one if necessary. |
163 * @param {string} url | 163 * @param {string} url |
164 * URL of the subscription | 164 * URL of the subscription |
165 * @return {Subscription} | 165 * @return {Subscription} |
166 * subscription or null if the subscription couldn't be created | 166 * subscription or null if the subscription couldn't be created |
167 */ | 167 */ |
168 Subscription.fromURL = function(url) | 168 Subscription.fromURL = function(url) |
169 { | 169 { |
170 if (url in Subscription.knownSubscriptions) | 170 let subscription = Subscription.knownSubscriptions.get(url); |
171 return Subscription.knownSubscriptions[url]; | 171 if (subscription) |
| 172 return subscription; |
172 | 173 |
173 if (url[0] != "~") | 174 if (url[0] != "~") |
174 return new DownloadableSubscription(url, null); | 175 return new DownloadableSubscription(url, null); |
175 return new SpecialSubscription(url); | 176 return new SpecialSubscription(url); |
176 }; | 177 }; |
177 | 178 |
178 /** | 179 /** |
179 * Deserializes a subscription | 180 * Deserializes a subscription |
180 * | 181 * |
181 * @param {Object} obj | 182 * @param {Object} obj |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 * Creates a new user-defined filter group. | 300 * Creates a new user-defined filter group. |
300 * @param {string} [title] title of the new filter group | 301 * @param {string} [title] title of the new filter group |
301 * @return {SpecialSubscription} | 302 * @return {SpecialSubscription} |
302 */ | 303 */ |
303 SpecialSubscription.create = function(title) | 304 SpecialSubscription.create = function(title) |
304 { | 305 { |
305 let url; | 306 let url; |
306 do | 307 do |
307 { | 308 { |
308 url = "~user~" + Math.round(Math.random() * 1000000); | 309 url = "~user~" + Math.round(Math.random() * 1000000); |
309 } while (url in Subscription.knownSubscriptions); | 310 } while (Subscription.knownSubscriptions.has(url)); |
310 return new SpecialSubscription(url, title); | 311 return new SpecialSubscription(url, title); |
311 }; | 312 }; |
312 | 313 |
313 /** | 314 /** |
314 * Creates a new user-defined filter group and adds the given filter to it. | 315 * Creates a new user-defined filter group and adds the given filter to it. |
315 * This group will act as the default group for this filter type. | 316 * This group will act as the default group for this filter type. |
316 * @param {Filter} filter | 317 * @param {Filter} filter |
317 * @return {SpecialSubscription} | 318 * @return {SpecialSubscription} |
318 */ | 319 */ |
319 SpecialSubscription.createForFilter = function(filter) | 320 SpecialSubscription.createForFilter = function(filter) |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
565 if (this.errors) | 566 if (this.errors) |
566 buffer.push("errors=" + this.errors); | 567 buffer.push("errors=" + this.errors); |
567 if (this.version) | 568 if (this.version) |
568 buffer.push("version=" + this.version); | 569 buffer.push("version=" + this.version); |
569 if (this.requiredVersion) | 570 if (this.requiredVersion) |
570 buffer.push("requiredVersion=" + this.requiredVersion); | 571 buffer.push("requiredVersion=" + this.requiredVersion); |
571 if (this.downloadCount) | 572 if (this.downloadCount) |
572 buffer.push("downloadCount=" + this.downloadCount); | 573 buffer.push("downloadCount=" + this.downloadCount); |
573 } | 574 } |
574 }); | 575 }); |
OLD | NEW |