Index: lib/filterListener.js |
=================================================================== |
--- a/lib/filterListener.js |
+++ b/lib/filterListener.js |
@@ -19,6 +19,8 @@ |
* @fileOverview Component synchronizing filter storage with Matcher instances and ElemHide. |
*/ |
+"use strict"; |
+ |
Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
Cu.import("resource://gre/modules/Services.jsm"); |
@@ -107,16 +109,28 @@ |
*/ |
function init() |
{ |
- FilterNotifier.addListener(function(action, item, newValue, oldValue) |
- { |
- let match = /^(\w+)\.(.*)/.exec(action); |
- if (match && match[1] == "filter") |
- onFilterChange(match[2], item, newValue, oldValue); |
- else if (match && match[1] == "subscription") |
- onSubscriptionChange(match[2], item, newValue, oldValue); |
- else |
- onGenericChange(action, item); |
- }); |
+ FilterNotifier.on("filter.hitCount", onFilterHitCount); |
+ FilterNotifier.on("filter.lastHit", onFilterLastHit); |
+ FilterNotifier.on("filter.added", onFilterAdded); |
+ FilterNotifier.on("filter.removed", onFilterRemoved); |
+ FilterNotifier.on("filter.disabled", onFilterDisabled); |
+ FilterNotifier.on("filter.moved", onGenericChange); |
+ |
+ FilterNotifier.on("subscription.added", onSubscriptionAdded); |
+ FilterNotifier.on("subscription.removed", onSubscriptionRemoved); |
+ FilterNotifier.on("subscription.disabled", onSubscriptionDisabled); |
+ FilterNotifier.on("subscription.updated", onSubscriptionUpdated); |
+ FilterNotifier.on("subscription.moved", onGenericChange); |
+ FilterNotifier.on("subscription.title", onGenericChange); |
+ FilterNotifier.on("subscription.fixedTitle", onGenericChange); |
+ FilterNotifier.on("subscription.homepage", onGenericChange); |
+ FilterNotifier.on("subscription.downloadStatus", onGenericChange); |
+ FilterNotifier.on("subscription.lastCheck", onGenericChange); |
+ FilterNotifier.on("subscription.errors", onGenericChange); |
+ |
+ FilterNotifier.on("load", onLoad); |
+ FilterNotifier.on("save", onSave); |
+ |
if ("nsIStyleSheetService" in Ci) |
ElemHide.init(); |
@@ -200,91 +214,120 @@ |
} |
} |
-/** |
- * Subscription change listener |
- */ |
-function onSubscriptionChange(action, subscription, newValue, oldValue) |
+function onSubscriptionAdded(subscription) |
{ |
FilterListener.setDirty(1); |
- if (action != "added" && action != "removed" && action != "disabled" && action != "updated") |
- return; |
+ if (!subscription.disabled) |
+ { |
+ subscription.filters.forEach(addFilter); |
+ flushElemHide(); |
+ } |
+} |
- if (action != "removed" && !(subscription.url in FilterStorage.knownSubscriptions)) |
+function onSubscriptionRemoved(subscription) |
+{ |
+ FilterListener.setDirty(1); |
+ |
+ if (!subscription.disabled) |
{ |
- // Ignore updates for subscriptions not in the list |
- return; |
+ subscription.filters.forEach(removeFilter); |
+ flushElemHide(); |
} |
+} |
- if ((action == "added" || action == "removed" || action == "updated") && subscription.disabled) |
+function onSubscriptionDisabled(subscription, newValue) |
+{ |
+ FilterListener.setDirty(1); |
+ |
+ if (subscription.url in FilterStorage.knownSubscriptions) |
{ |
- // Ignore adding/removing/updating of disabled subscriptions |
- return; |
+ if (newValue == false) |
+ subscription.filters.forEach(addFilter); |
+ else |
+ subscription.filters.forEach(removeFilter); |
+ flushElemHide(); |
} |
+} |
- if (action == "added" || action == "removed" || action == "disabled") |
- { |
- let method = (action == "added" || (action == "disabled" && newValue == false) ? addFilter : removeFilter); |
- if (subscription.filters) |
- subscription.filters.forEach(method); |
- } |
- else if (action == "updated") |
+function onSubscriptionUpdated(subscription) |
+{ |
+ FilterListener.setDirty(1); |
+ |
+ if (subscription.url in FilterStorage.knownSubscriptions && |
+ !subscription.disabled) |
{ |
subscription.oldFilters.forEach(removeFilter); |
subscription.filters.forEach(addFilter); |
+ flushElemHide(); |
} |
- |
- flushElemHide(); |
} |
-/** |
- * Filter change listener |
- */ |
-function onFilterChange(action, filter, newValue, oldValue) |
+function onFilterHitCount(filter, newValue) |
{ |
- if (action == "hitCount" && newValue == 0) |
+ if (newValue == 0) |
+ FilterListener.setDirty(0); |
+ else |
+ FilterListener.setDirty(0.002); |
+} |
+ |
+function onFilterLastHit() |
+{ |
+ FilterListener.setDirty(0.002); |
+} |
+ |
+function onFilterAdded(filter) |
+{ |
+ FilterListener.setDirty(1); |
+ |
+ if (!filter.disabled) |
{ |
- // Filter hits are being reset, make sure these changes are saved. |
- FilterListener.setDirty(0); |
+ addFilter(filter); |
+ flushElemHide(); |
} |
- else if (action == "hitCount" || action == "lastHit") |
- FilterListener.setDirty(0.002); |
- else |
- FilterListener.setDirty(1); |
+} |
- if (action != "added" && action != "removed" && action != "disabled") |
- return; |
+function onFilterRemoved(filter) |
+{ |
+ FilterListener.setDirty(1); |
- if ((action == "added" || action == "removed") && filter.disabled) |
+ if (!filter.disabled) |
{ |
- // Ignore adding/removing of disabled filters |
- return; |
+ removeFilter(filter); |
+ flushElemHide(); |
} |
+} |
- if (action == "added" || (action == "disabled" && newValue == false)) |
+function onFilterDisabled(filter, newValue) |
+{ |
+ FilterListener.setDirty(1); |
+ |
+ if (newValue == false) |
addFilter(filter); |
else |
removeFilter(filter); |
flushElemHide(); |
} |
-/** |
- * Generic notification listener |
- */ |
-function onGenericChange(action) |
+function onGenericChange() |
{ |
- if (action == "load") |
- { |
- isDirty = 0; |
+ FilterListener.setDirty(1); |
+} |
- defaultMatcher.clear(); |
- ElemHide.clear(); |
- CSSRules.clear(); |
- for (let subscription of FilterStorage.subscriptions) |
- if (!subscription.disabled) |
- subscription.filters.forEach(addFilter); |
- flushElemHide(); |
- } |
- else if (action == "save") |
- isDirty = 0; |
+function onLoad() |
+{ |
+ isDirty = 0; |
+ |
+ defaultMatcher.clear(); |
+ ElemHide.clear(); |
+ CSSRules.clear(); |
+ for (let subscription of FilterStorage.subscriptions) |
+ if (!subscription.disabled) |
+ subscription.filters.forEach(addFilter); |
+ flushElemHide(); |
} |
+ |
+function onSave() |
+{ |
+ isDirty = 0; |
+} |