diff options
author | Ruben Rodriguez <ruben@gnu.org> | 2014-10-20 02:24:51 +0200 |
---|---|---|
committer | Ruben Rodriguez <ruben@gnu.org> | 2014-10-20 02:24:51 +0200 |
commit | 6e7918b6ccb69876d339a320091fdee811445395 (patch) | |
tree | 31cb88ee438d652fddefca1193f70289a8b3dcc8 /data/extensions/spyblock@gnu.org/lib/Public.jsm | |
parent | 60e5b13c35d4d3ba21bb03b026750a0a414f6c77 (diff) |
Generalize data directory
Diffstat (limited to 'data/extensions/spyblock@gnu.org/lib/Public.jsm')
-rw-r--r-- | data/extensions/spyblock@gnu.org/lib/Public.jsm | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/data/extensions/spyblock@gnu.org/lib/Public.jsm b/data/extensions/spyblock@gnu.org/lib/Public.jsm new file mode 100644 index 0000000..0f96bcb --- /dev/null +++ b/data/extensions/spyblock@gnu.org/lib/Public.jsm @@ -0,0 +1,202 @@ +/* + * This file is part of Adblock Plus <http://adblockplus.org/>, + * Copyright (C) 2006-2014 Eyeo GmbH + * + * Adblock Plus is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Adblock Plus is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * @fileOverview Public Adblock Plus API. + */ + +var EXPORTED_SYMBOLS = ["AdblockPlus"]; + +const Cc = Components.classes; +const Ci = Components.interfaces; +const Cr = Components.results; +const Cu = Components.utils; + +Cu.import("resource://gre/modules/Services.jsm"); + +function require(module) +{ + let result = {}; + result.wrappedJSObject = result; + Services.obs.notifyObservers(result, "adblockplus-require", module); + return result.exports; +} + +let {FilterStorage} = require("filterStorage"); +let {Filter} = require("filterClasses"); +let {Subscription, SpecialSubscription, RegularSubscription, DownloadableSubscription, ExternalSubscription} = require("subscriptionClasses"); + +const externalPrefix = "~external~"; + +/** + * Class implementing public Adblock Plus API + * @class + */ +var AdblockPlus = +{ + /** + * Returns current subscription count + * @type Integer + */ + get subscriptionCount() + { + return FilterStorage.subscriptions.length; + }, + + /** + * Gets a subscription by its URL + */ + getSubscription: function(/**String*/ id) /**IAdblockPlusSubscription*/ + { + if (id in FilterStorage.knownSubscriptions) + return createSubscriptionWrapper(FilterStorage.knownSubscriptions[id]); + + return null; + }, + + /** + * Gets a subscription by its position in the list + */ + getSubscriptionAt: function(/**Integer*/ index) /**IAdblockPlusSubscription*/ + { + if (index < 0 || index >= FilterStorage.subscriptions.length) + return null; + + return createSubscriptionWrapper(FilterStorage.subscriptions[index]); + }, + + /** + * Updates an external subscription and creates it if necessary + */ + updateExternalSubscription: function(/**String*/ id, /**String*/ title, /**Array of Filter*/ filters) /**String*/ + { + if (id.substr(0, externalPrefix.length) != externalPrefix) + id = externalPrefix + id; + let subscription = Subscription.knownSubscriptions[id]; + if (typeof subscription == "undefined") + subscription = new ExternalSubscription(id, title); + + subscription.lastDownload = parseInt(new Date().getTime() / 1000); + + let newFilters = []; + for (let filter of filters) + { + filter = Filter.fromText(Filter.normalize(filter)); + if (filter) + newFilters.push(filter); + } + + if (id in FilterStorage.knownSubscriptions) + FilterStorage.updateSubscriptionFilters(subscription, newFilters); + else + { + subscription.filters = newFilters; + FilterStorage.addSubscription(subscription); + } + + return id; + }, + + /** + * Removes an external subscription by its identifier + */ + removeExternalSubscription: function(/**String*/ id) /**Boolean*/ + { + if (id.substr(0, externalPrefix.length) != externalPrefix) + id = externalPrefix + id; + if (!(id in FilterStorage.knownSubscriptions)) + return false; + + FilterStorage.removeSubscription(FilterStorage.knownSubscriptions[id]); + return true; + }, + + /** + * Adds user-defined filters to the list + */ + addPatterns: function(/**Array of String*/ filters) + { + for (let filter of filters) + { + filter = Filter.fromText(Filter.normalize(filter)); + if (filter) + { + filter.disabled = false; + FilterStorage.addFilter(filter); + } + } + }, + + /** + * Removes user-defined filters from the list + */ + removePatterns: function(/**Array of String*/ filters) + { + for (let filter of filters) + { + filter = Filter.fromText(Filter.normalize(filter)); + if (filter) + FilterStorage.removeFilter(filter); + } + }, + + /** + * Returns installed Adblock Plus version + */ + getInstalledVersion: function() /**String*/ + { + return require("info").addonVersion; + }, + + /** + * Returns source code revision this Adblock Plus build was created from (if available) + */ + getInstalledBuild: function() /**String*/ + { + return ""; + }, +}; + +/** + * Wraps a subscription into IAdblockPlusSubscription structure. + */ +function createSubscriptionWrapper(/**Subscription*/ subscription) /**IAdblockPlusSubscription*/ +{ + if (!subscription) + return null; + + return { + url: subscription.url, + special: subscription instanceof SpecialSubscription, + title: subscription.title, + autoDownload: true, + disabled: subscription.disabled, + external: subscription instanceof ExternalSubscription, + lastDownload: subscription instanceof RegularSubscription ? subscription.lastDownload : 0, + downloadStatus: subscription instanceof DownloadableSubscription ? subscription.downloadStatus : "synchronize_ok", + lastModified: subscription instanceof DownloadableSubscription ? subscription.lastModified : null, + expires: subscription instanceof DownloadableSubscription ? subscription.expires : 0, + getPatterns: function() + { + let result = subscription.filters.map(function(filter) + { + return filter.text; + }); + return result; + } + }; +} |