| Index: lib/filterStorage.js |
| =================================================================== |
| --- a/lib/filterStorage.js |
| +++ b/lib/filterStorage.js |
| @@ -193,19 +193,23 @@ |
| /** |
| * Replaces the list of filters in a subscription with a new list. |
| * @param {Subscription} subscription The subscription to be updated. |
| * @param {Array.<Filter>} filters The new list of filters. |
| */ |
| updateSubscriptionFilters(subscription, filters) |
| { |
| disconnectSubscriptionFilters(subscription); |
| + |
| let oldFilters = subscription.filters; |
| - subscription.filters = filters; |
| - connectSubscriptionFilters(subscription); |
| + subscription.filters = []; |
| + for (let filter of filters) |
| + subscription.filters.push(filter.text); |
| + |
| + connectSubscriptionFilters(subscription, filters); |
| filterNotifier.emit("subscription.updated", subscription, oldFilters); |
| } |
| /** |
| * Adds a user-defined filter to the storage. |
| * @param {Filter} filter |
| * @param {?SpecialSubscription} [subscription] The subscription that the |
| * filter should be added to. |
| @@ -234,17 +238,17 @@ |
| this.addSubscription(subscription); |
| return; |
| } |
| if (typeof position == "undefined") |
| position = subscription.filters.length; |
| filter.addSubscription(subscription); |
| - subscription.filters.splice(position, 0, filter); |
| + subscription.filters.splice(position, 0, filter.text); |
| filterNotifier.emit("filter.added", filter, subscription, position); |
| } |
| /** |
| * Removes a user-defined filter from the storage. |
| * @param {Filter} filter |
| * @param {?SpecialSubscription} [subscription] The subscription that the |
| * filter should be removed from. If not specified, the filter will be |
| @@ -263,31 +267,31 @@ |
| if (currentSubscription instanceof SpecialSubscription) |
| { |
| let positions = []; |
| if (typeof position == "undefined") |
| { |
| let index = -1; |
| do |
| { |
| - index = currentSubscription.filters.indexOf(filter, index + 1); |
| + index = currentSubscription.filters.indexOf(filter.text, index + 1); |
| if (index >= 0) |
| positions.push(index); |
| } while (index >= 0); |
| } |
| else |
| positions.push(position); |
| for (let j = positions.length - 1; j >= 0; j--) |
| { |
| let currentPosition = positions[j]; |
| - if (currentSubscription.filters[currentPosition] == filter) |
| + if (currentSubscription.filters[currentPosition] == filter.text) |
| { |
| currentSubscription.filters.splice(currentPosition, 1); |
| - if (currentSubscription.filters.indexOf(filter) < 0) |
| + if (currentSubscription.filters.indexOf(filter.text) < 0) |
| filter.removeSubscription(currentSubscription); |
| filterNotifier.emit("filter.removed", filter, currentSubscription, |
| currentPosition); |
| } |
| } |
| } |
| } |
| } |
| @@ -298,28 +302,28 @@ |
| * @param {SpecialSubscription} subscription The subscription where the |
| * filter is located. |
| * @param {number} oldPosition The current position of the filter. |
| * @param {number} newPosition The new position of the filter. |
| */ |
| moveFilter(filter, subscription, oldPosition, newPosition) |
| { |
| if (!(subscription instanceof SpecialSubscription) || |
| - subscription.filters[oldPosition] != filter) |
| + subscription.filters[oldPosition] != filter.text) |
| { |
| return; |
| } |
| newPosition = Math.min(Math.max(newPosition, 0), |
| subscription.filters.length - 1); |
| if (oldPosition == newPosition) |
| return; |
| subscription.filters.splice(oldPosition, 1); |
| - subscription.filters.splice(newPosition, 0, filter); |
| + subscription.filters.splice(newPosition, 0, filter.text); |
| filterNotifier.emit("filter.moved", filter, subscription, oldPosition, |
| newPosition); |
| } |
| /** |
| * Increases the hit count for a filter by one. |
| * @param {Filter} filter |
| */ |
| @@ -492,22 +496,22 @@ |
| { |
| yield* subscription.serialize(); |
| yield* subscription.serializeFilters(); |
| } |
| // Save filter data |
| for (let subscription of subscriptions) |
| { |
| - for (let filter of subscription.filters) |
| + for (let text of subscription.filters) |
| { |
| - if (!saved.has(filter.text)) |
| + if (!saved.has(text)) |
| { |
| - yield* filter.serialize(); |
| - saved.add(filter.text); |
| + yield* Filter.fromText(text).serialize(); |
| + saved.add(text); |
| } |
| } |
| } |
| } |
| /** |
| * Saves all subscriptions back to disk. |
| * @returns {Promise} A promise resolved or rejected when saving is complete. |
| @@ -642,31 +646,53 @@ |
| let filterStorage = new FilterStorage(); |
| exports.filterStorage = filterStorage; |
| /** |
| * Connects a subscription to its filters without any notifications. |
| * @param {Subscription} subscription The subscription that should be |
| * connected to its filters. |
| + * @param {?Array.<Filter>} [filters] A list of filters to which the |
| + * subscription should be connected. If this is not given, the subscription |
| + * is connected to its own filters. |
| */ |
| -function connectSubscriptionFilters(subscription) |
| +function connectSubscriptionFilters(subscription, filters) |
| { |
| if (!filterStorage.knownSubscriptions.has(subscription.url)) |
| return; |
| - for (let filter of subscription.filters) |
| - filter.addSubscription(subscription); |
| + if (filters) |
| + { |
| + for (let filter of filters) |
| + filter.addSubscription(subscription); |
| + } |
| + else |
| + { |
| + for (let text of subscription.filters) |
| + Filter.fromText(text).addSubscription(subscription); |
| + } |
| } |
| /** |
| * Disconnects a subscription from its filters without any notifications. |
| * @param {Subscription} subscription The subscription that should be |
| * disconnected from its filters. |
| + * @param {?Array.<Filter>} [filters] A list of filters from which the |
| + * subscription should be disconnected. If this is not given, the |
| + * subscription is disconnected from its own filters. |
| */ |
| -function disconnectSubscriptionFilters(subscription) |
| +function disconnectSubscriptionFilters(subscription, filters) |
| { |
| if (!filterStorage.knownSubscriptions.has(subscription.url)) |
| return; |
| - for (let filter of subscription.filters) |
| - filter.removeSubscription(subscription); |
| + if (filters) |
| + { |
| + for (let filter of filters) |
| + filter.removeSubscription(subscription); |
| + } |
| + else |
| + { |
| + for (let text of subscription.filters) |
| + Filter.fromText(text).removeSubscription(subscription); |
| + } |
| } |