Left: | ||
Right: |
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-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
47 result[keys[i]] = obj[keys[i]]; | 47 result[keys[i]] = obj[keys[i]]; |
48 return result; | 48 return result; |
49 } | 49 } |
50 | 50 |
51 var convertSubscription = convertObject.bind(null, ["disabled", | 51 var convertSubscription = convertObject.bind(null, ["disabled", |
52 "downloadStatus", "homepage", "lastDownload", "title", "url"]); | 52 "downloadStatus", "homepage", "lastDownload", "title", "url"]); |
53 var convertFilter = convertObject.bind(null, ["text"]); | 53 var convertFilter = convertObject.bind(null, ["text"]); |
54 | 54 |
55 var changeListeners = new global.ext.PageMap(); | 55 var changeListeners = new global.ext.PageMap(); |
56 var listenedPreferences = []; | 56 var listenedPreferences = []; |
57 var listenedFilterChanges = []; | |
57 var messageTypes = { | 58 var messageTypes = { |
58 "app": "app.listen", | 59 "app": "app.listen", |
59 "filter": "filters.listen", | 60 "filter": "filters.listen", |
60 "pref": "prefs.listen", | 61 "pref": "prefs.listen", |
61 "subscription": "subscriptions.listen" | 62 "subscription": "subscriptions.listen" |
62 }; | 63 }; |
63 | 64 |
64 function sendMessage(type, action, args) | 65 function sendMessage(type, action) |
Sebastian Noack
2016/03/23 23:15:51
Sorry for refactoring sendMessage() again, but wit
| |
65 { | 66 { |
66 var pages = changeListeners.keys(); | 67 var pages = changeListeners.keys(); |
67 for (var i = 0; i < pages.length; i++) | 68 if (pages.length == 0) |
68 { | |
69 var filters = changeListeners.get(pages[i]); | |
70 var actions = filters[type]; | |
71 if (actions && actions.indexOf(action) != -1) | |
72 { | |
73 pages[i].sendMessage({ | |
74 type: messageTypes[type], | |
75 action: action, | |
76 args: args | |
77 }); | |
78 } | |
79 } | |
80 } | |
81 | |
82 function onFilterChange(action) | |
83 { | |
84 var type; | |
85 if (action == "load") | |
86 { | |
87 type = "filter"; | |
88 action = "loaded"; | |
89 } | |
90 else | |
91 { | |
92 var parts = action.split("."); | |
93 type = parts[0]; | |
94 action = parts[1]; | |
95 } | |
96 | |
97 if (!(type in messageTypes)) | |
98 return; | 69 return; |
99 | 70 |
100 var args = []; | 71 var args = []; |
101 for (var i = 1; i < arguments.length; i++) | 72 for (var i = 2; i < arguments.length; i++) |
102 { | 73 { |
103 var arg = arguments[i]; | 74 var arg = arguments[i]; |
104 if (arg instanceof Subscription) | 75 if (arg instanceof Subscription) |
105 args.push(convertSubscription(arg)); | 76 args.push(convertSubscription(arg)); |
106 else if (arg instanceof Filter) | 77 else if (arg instanceof Filter) |
107 args.push(convertFilter(arg)); | 78 args.push(convertFilter(arg)); |
108 else | 79 else |
109 args.push(arg); | 80 args.push(arg); |
110 } | 81 } |
111 | 82 |
112 sendMessage(type, action, args); | 83 for (var j = 0; j < pages.length; j++) |
84 { | |
85 var page = pages[j]; | |
86 var filters = changeListeners.get(page); | |
87 var actions = filters[type]; | |
88 if (actions && actions.indexOf(action) != -1) | |
89 { | |
90 page.sendMessage({ | |
91 type: messageTypes[type], | |
92 action: action, | |
93 args: args | |
94 }); | |
95 } | |
96 } | |
97 } | |
98 | |
99 function addFilterListeners(type, actions) | |
Sebastian Noack
2016/03/23 23:15:51
Same pattern as for Prefs.on(), the first UI that
| |
100 { | |
101 actions.forEach(function(action) | |
102 { | |
103 var name; | |
104 if (type == "filter" && action == "loaded") | |
105 name = "load"; | |
106 else | |
107 name = type + "." + action; | |
108 | |
109 if (listenedFilterChanges.indexOf(name) == -1) | |
110 { | |
111 listenedFilterChanges.push(name); | |
112 FilterNotifier.on(name, function() | |
113 { | |
114 var args = [type, action]; | |
115 for (var i = 0; i < arguments.length; i++) | |
Sebastian Noack
2016/03/23 23:15:51
For the record, simply passing the arguments objec
| |
116 args.push(arguments[i]); | |
117 sendMessage.apply(null, args); | |
118 }); | |
119 } | |
120 }); | |
113 } | 121 } |
114 | 122 |
115 function getListenerFilters(page) | 123 function getListenerFilters(page) |
116 { | 124 { |
117 var listenerFilters = changeListeners.get(page); | 125 var listenerFilters = changeListeners.get(page); |
118 if (!listenerFilters) | 126 if (!listenerFilters) |
119 { | 127 { |
120 listenerFilters = Object.create(null); | 128 listenerFilters = Object.create(null); |
121 changeListeners.set(page, listenerFilters); | 129 changeListeners.set(page, listenerFilters); |
122 } | 130 } |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
274 | 282 |
275 if (!(filter.text in seenFilter)) | 283 if (!(filter.text in seenFilter)) |
276 FilterStorage.removeFilter(filter); | 284 FilterStorage.removeFilter(filter); |
277 } | 285 } |
278 } | 286 } |
279 break; | 287 break; |
280 case "filters.listen": | 288 case "filters.listen": |
281 var listenerFilters = getListenerFilters(sender.page); | 289 var listenerFilters = getListenerFilters(sender.page); |
282 if (message.filter) | 290 if (message.filter) |
283 { | 291 { |
284 FilterNotifier.addListener(onFilterChange); | 292 addFilterListeners("filter", message.filter); |
285 listenerFilters.filter = message.filter; | 293 listenerFilters.filter = message.filter; |
286 } | 294 } |
287 else | 295 else |
Sebastian Noack
2016/03/23 23:15:51
I wonder whether we should prehaps unsupport calli
Thomas Greiner
2016/03/24 14:22:35
Sorry, missed this comment.
Yeah, in one of the p
Sebastian Noack
2016/03/24 14:40:35
So I read that as you are fine with me simplifying
| |
288 delete listenerFilters.filter; | 296 delete listenerFilters.filter; |
289 break; | 297 break; |
290 case "filters.remove": | 298 case "filters.remove": |
291 var filter = Filter.fromText(message.text); | 299 var filter = Filter.fromText(message.text); |
292 var subscription = null; | 300 var subscription = null; |
293 if (message.subscriptionUrl) | 301 if (message.subscriptionUrl) |
294 subscription = Subscription.fromURL(message.subscriptionUrl); | 302 subscription = Subscription.fromURL(message.subscriptionUrl); |
295 | 303 |
296 if (!subscription) | 304 if (!subscription) |
297 FilterStorage.removeFilter(filter); | 305 FilterStorage.removeFilter(filter); |
298 else | 306 else |
299 FilterStorage.removeFilter(filter, subscription, message.index); | 307 FilterStorage.removeFilter(filter, subscription, message.index); |
300 break; | 308 break; |
301 case "prefs.get": | 309 case "prefs.get": |
302 callback(Prefs[message.key]); | 310 callback(Prefs[message.key]); |
303 break; | 311 break; |
304 case "prefs.listen": | 312 case "prefs.listen": |
305 var listenerFilters = getListenerFilters(sender.page); | 313 var listenerFilters = getListenerFilters(sender.page); |
306 if (message.filter) | 314 if (message.filter) |
307 { | 315 { |
308 message.filter.forEach(function(preference) | 316 message.filter.forEach(function(preference) |
309 { | 317 { |
310 if (listenedPreferences.indexOf(preference) == -1) | 318 if (listenedPreferences.indexOf(preference) == -1) |
311 { | 319 { |
312 listenedPreferences.push(preference); | 320 listenedPreferences.push(preference); |
313 Prefs.on(preference, function() | 321 Prefs.on(preference, function() |
314 { | 322 { |
315 sendMessage("pref", preference, [Prefs[preference]]); | 323 sendMessage("pref", preference, Prefs[preference]); |
316 }); | 324 }); |
317 } | 325 } |
318 }); | 326 }); |
319 listenerFilters.pref = message.filter; | 327 listenerFilters.pref = message.filter; |
320 } | 328 } |
321 else | 329 else |
322 delete listenerFilters.pref; | 330 delete listenerFilters.pref; |
323 break; | 331 break; |
324 case "prefs.toggle": | 332 case "prefs.toggle": |
325 if (message.key == "notifications_ignoredcategories") | 333 if (message.key == "notifications_ignoredcategories") |
326 NotificationStorage.toggleIgnoreCategory("*"); | 334 NotificationStorage.toggleIgnoreCategory("*"); |
327 else | 335 else |
328 Prefs[message.key] = !Prefs[message.key]; | 336 Prefs[message.key] = !Prefs[message.key]; |
329 break; | 337 break; |
330 case "subscriptions.add": | 338 case "subscriptions.add": |
331 var subscription = Subscription.fromURL(message.url); | 339 var subscription = Subscription.fromURL(message.url); |
332 if ("title" in message) | 340 if ("title" in message) |
333 subscription.title = message.title; | 341 subscription.title = message.title; |
334 if ("homepage" in message) | 342 if ("homepage" in message) |
335 subscription.homepage = message.homepage; | 343 subscription.homepage = message.homepage; |
336 | 344 |
337 if (message.confirm) | 345 if (message.confirm) |
338 { | 346 { |
339 ext.showOptions(function() | 347 ext.showOptions(function() |
340 { | 348 { |
341 sendMessage("app", "addSubscription", [convertSubscription(subscript ion)]); | 349 sendMessage("app", "addSubscription", subscription); |
342 }); | 350 }); |
343 } | 351 } |
344 else | 352 else |
345 { | 353 { |
346 subscription.disabled = false; | 354 subscription.disabled = false; |
347 FilterStorage.addSubscription(subscription); | 355 FilterStorage.addSubscription(subscription); |
348 | 356 |
349 if (subscription instanceof DownloadableSubscription && !subscription. lastDownload) | 357 if (subscription instanceof DownloadableSubscription && !subscription. lastDownload) |
350 Synchronizer.execute(subscription); | 358 Synchronizer.execute(subscription); |
351 } | 359 } |
352 break; | 360 break; |
353 case "subscriptions.get": | 361 case "subscriptions.get": |
354 var subscriptions = FilterStorage.subscriptions.filter(function(s) | 362 var subscriptions = FilterStorage.subscriptions.filter(function(s) |
355 { | 363 { |
356 if (message.ignoreDisabled && s.disabled) | 364 if (message.ignoreDisabled && s.disabled) |
357 return false; | 365 return false; |
358 if (s instanceof DownloadableSubscription && message.downloadable) | 366 if (s instanceof DownloadableSubscription && message.downloadable) |
359 return true; | 367 return true; |
360 if (s instanceof SpecialSubscription && message.special) | 368 if (s instanceof SpecialSubscription && message.special) |
361 return true; | 369 return true; |
362 return false; | 370 return false; |
363 }); | 371 }); |
364 callback(subscriptions.map(convertSubscription)); | 372 callback(subscriptions.map(convertSubscription)); |
365 break; | 373 break; |
366 case "subscriptions.listen": | 374 case "subscriptions.listen": |
367 var listenerFilters = getListenerFilters(sender.page); | 375 var listenerFilters = getListenerFilters(sender.page); |
368 if (message.filter) | 376 if (message.filter) |
369 { | 377 { |
370 FilterNotifier.addListener(onFilterChange); | 378 addFilterListeners("subscription", message.filter); |
371 listenerFilters.subscription = message.filter; | 379 listenerFilters.subscription = message.filter; |
372 } | 380 } |
373 else | 381 else |
374 delete listenerFilters.subscription; | 382 delete listenerFilters.subscription; |
375 break; | 383 break; |
376 case "subscriptions.remove": | 384 case "subscriptions.remove": |
377 var subscription = Subscription.fromURL(message.url); | 385 var subscription = Subscription.fromURL(message.url); |
378 if (subscription.url in FilterStorage.knownSubscriptions) | 386 if (subscription.url in FilterStorage.knownSubscriptions) |
379 FilterStorage.removeSubscription(subscription); | 387 FilterStorage.removeSubscription(subscription); |
380 break; | 388 break; |
381 case "subscriptions.toggle": | 389 case "subscriptions.toggle": |
382 var subscription = Subscription.fromURL(message.url); | 390 var subscription = Subscription.fromURL(message.url); |
383 if (subscription.url in FilterStorage.knownSubscriptions) | 391 if (subscription.url in FilterStorage.knownSubscriptions) |
384 { | 392 { |
385 if (subscription.disabled || message.keepInstalled) | 393 if (subscription.disabled || message.keepInstalled) |
386 { | |
387 subscription.disabled = !subscription.disabled; | 394 subscription.disabled = !subscription.disabled; |
388 FilterNotifier.triggerListeners("subscription.disabled", | |
Sebastian Noack
2016/03/23 23:15:51
This belongs into the mock implementation. Otherwi
Thomas Greiner
2016/03/24 14:12:16
I agree. Well spotted.
| |
389 subscription); | |
390 } | |
391 else | 395 else |
392 FilterStorage.removeSubscription(subscription); | 396 FilterStorage.removeSubscription(subscription); |
393 } | 397 } |
394 else | 398 else |
395 { | 399 { |
396 subscription.disabled = false; | 400 subscription.disabled = false; |
397 subscription.title = message.title; | 401 subscription.title = message.title; |
398 subscription.homepage = message.homepage; | 402 subscription.homepage = message.homepage; |
399 FilterStorage.addSubscription(subscription); | 403 FilterStorage.addSubscription(subscription); |
400 if (!subscription.lastDownload) | 404 if (!subscription.lastDownload) |
401 Synchronizer.execute(subscription); | 405 Synchronizer.execute(subscription); |
402 } | 406 } |
403 break; | 407 break; |
404 case "subscriptions.update": | 408 case "subscriptions.update": |
405 var subscriptions = message.url ? [Subscription.fromURL(message.url)] : | 409 var subscriptions = message.url ? [Subscription.fromURL(message.url)] : |
406 FilterStorage.subscriptions; | 410 FilterStorage.subscriptions; |
407 for (var i = 0; i < subscriptions.length; i++) | 411 for (var i = 0; i < subscriptions.length; i++) |
408 { | 412 { |
409 var subscription = subscriptions[i]; | 413 var subscription = subscriptions[i]; |
410 if (subscription instanceof DownloadableSubscription) | 414 if (subscription instanceof DownloadableSubscription) |
411 Synchronizer.execute(subscription, true); | 415 Synchronizer.execute(subscription, true); |
412 } | 416 } |
413 break; | 417 break; |
414 case "subscriptions.isDownloading": | 418 case "subscriptions.isDownloading": |
415 callback(Synchronizer.isExecuting(message.url)); | 419 callback(Synchronizer.isExecuting(message.url)); |
416 break; | 420 break; |
417 } | 421 } |
418 }); | 422 }); |
419 })(this); | 423 })(this); |
OLD | NEW |