| 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 10 matching lines...) Expand all Loading... |
| 21 * @fileOverview FilterStorage class responsible for managing user's | 21 * @fileOverview FilterStorage class responsible for managing user's |
| 22 * subscriptions and filters. | 22 * subscriptions and filters. |
| 23 */ | 23 */ |
| 24 | 24 |
| 25 const {IO} = require("io"); | 25 const {IO} = require("io"); |
| 26 const {Prefs} = require("prefs"); | 26 const {Prefs} = require("prefs"); |
| 27 const {Filter, ActiveFilter} = require("./filterClasses"); | 27 const {Filter, ActiveFilter} = require("./filterClasses"); |
| 28 const {Subscription, SpecialSubscription, | 28 const {Subscription, SpecialSubscription, |
| 29 ExternalSubscription} = require("./subscriptionClasses"); | 29 ExternalSubscription} = require("./subscriptionClasses"); |
| 30 const {FilterNotifier} = require("./filterNotifier"); | 30 const {FilterNotifier} = require("./filterNotifier"); |
| 31 const {INIParser} = require("./iniParser"); |
| 31 | 32 |
| 32 /** | 33 /** |
| 33 * Version number of the filter storage file format. | 34 * Version number of the filter storage file format. |
| 34 * @type {number} | 35 * @type {number} |
| 35 */ | 36 */ |
| 36 let formatVersion = 5; | 37 let formatVersion = 5; |
| 37 | 38 |
| 38 /** | 39 /** |
| 39 * This class reads user's filters from disk, manages them in memory | 40 * This class reads user's filters from disk, manages them in memory |
| 40 * and writes them back. | 41 * and writes them back. |
| (...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 * @param {Subscription} subscription filter subscription to be removed | 674 * @param {Subscription} subscription filter subscription to be removed |
| 674 */ | 675 */ |
| 675 function removeSubscriptionFilters(subscription) | 676 function removeSubscriptionFilters(subscription) |
| 676 { | 677 { |
| 677 if (!FilterStorage.knownSubscriptions.has(subscription.url)) | 678 if (!FilterStorage.knownSubscriptions.has(subscription.url)) |
| 678 return; | 679 return; |
| 679 | 680 |
| 680 for (let filter of subscription.filters) | 681 for (let filter of subscription.filters) |
| 681 filter.subscriptions.delete(subscription); | 682 filter.subscriptions.delete(subscription); |
| 682 } | 683 } |
| 683 | |
| 684 /** | |
| 685 * Listener returned by FilterStorage.importData(), parses filter data. | |
| 686 * @constructor | |
| 687 */ | |
| 688 function INIParser() | |
| 689 { | |
| 690 this.fileProperties = this.curObj = {}; | |
| 691 this.subscriptions = []; | |
| 692 this.knownFilters = new Map(); | |
| 693 this.knownSubscriptions = new Map(); | |
| 694 } | |
| 695 INIParser.prototype = | |
| 696 { | |
| 697 linesProcessed: 0, | |
| 698 subscriptions: null, | |
| 699 knownFilters: null, | |
| 700 knownSubscriptions: null, | |
| 701 wantObj: true, | |
| 702 fileProperties: null, | |
| 703 curObj: null, | |
| 704 curSection: null, | |
| 705 | |
| 706 process(val) | |
| 707 { | |
| 708 let origKnownFilters = Filter.knownFilters; | |
| 709 Filter.knownFilters = this.knownFilters; | |
| 710 let origKnownSubscriptions = Subscription.knownSubscriptions; | |
| 711 Subscription.knownSubscriptions = this.knownSubscriptions; | |
| 712 let match; | |
| 713 try | |
| 714 { | |
| 715 if (this.wantObj === true && (match = /^(\w+)=(.*)$/.exec(val))) | |
| 716 this.curObj[match[1]] = match[2]; | |
| 717 else if (val === null || (match = /^\s*\[(.+)\]\s*$/.exec(val))) | |
| 718 { | |
| 719 if (this.curObj) | |
| 720 { | |
| 721 // Process current object before going to next section | |
| 722 switch (this.curSection) | |
| 723 { | |
| 724 case "filter": | |
| 725 if ("text" in this.curObj) | |
| 726 Filter.fromObject(this.curObj); | |
| 727 break; | |
| 728 case "subscription": { | |
| 729 let subscription = Subscription.fromObject(this.curObj); | |
| 730 if (subscription) | |
| 731 this.subscriptions.push(subscription); | |
| 732 break; | |
| 733 } | |
| 734 case "subscription filters": | |
| 735 if (this.subscriptions.length) | |
| 736 { | |
| 737 let subscription = this.subscriptions[ | |
| 738 this.subscriptions.length - 1 | |
| 739 ]; | |
| 740 for (let text of this.curObj) | |
| 741 { | |
| 742 let filter = Filter.fromText(text); | |
| 743 subscription.filters.push(filter); | |
| 744 filter.subscriptions.add(subscription); | |
| 745 } | |
| 746 } | |
| 747 break; | |
| 748 } | |
| 749 } | |
| 750 | |
| 751 if (val === null) | |
| 752 return; | |
| 753 | |
| 754 this.curSection = match[1].toLowerCase(); | |
| 755 switch (this.curSection) | |
| 756 { | |
| 757 case "filter": | |
| 758 case "subscription": | |
| 759 this.wantObj = true; | |
| 760 this.curObj = {}; | |
| 761 break; | |
| 762 case "subscription filters": | |
| 763 this.wantObj = false; | |
| 764 this.curObj = []; | |
| 765 break; | |
| 766 default: | |
| 767 this.wantObj = null; | |
| 768 this.curObj = null; | |
| 769 } | |
| 770 } | |
| 771 else if (this.wantObj === false && val) | |
| 772 this.curObj.push(val.replace(/\\\[/g, "[")); | |
| 773 } | |
| 774 finally | |
| 775 { | |
| 776 Filter.knownFilters = origKnownFilters; | |
| 777 Subscription.knownSubscriptions = origKnownSubscriptions; | |
| 778 } | |
| 779 } | |
| 780 }; | |
| OLD | NEW |