diff options
Diffstat (limited to 'js/storage.js')
-rw-r--r-- | js/storage.js | 471 |
1 files changed, 244 insertions, 227 deletions
diff --git a/js/storage.js b/js/storage.js index c4447c4..f5afca8 100644 --- a/js/storage.js +++ b/js/storage.js @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see {http://www.gnu.org/licenses/}. - Home: https://libregit.spks.xyz/heckyel/ematrix + Home: https://gitlab.com/vannilla/ematrix uMatrix Home: https://github.com/gorhill/uMatrix */ @@ -28,60 +28,52 @@ Components.utils.import('chrome://ematrix/content/lib/PublicSuffixList.jsm'); Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); -/******************************************************************************/ - -ηMatrix.getBytesInUse = function() { - var ηm = this; - var getBytesInUseHandler = function(bytesInUse) { +ηMatrix.getBytesInUse = function () { + let ηm = this; + let getBytesInUseHandler = function (bytesInUse) { ηm.storageUsed = bytesInUse; }; + // Not all WebExtension implementations support getBytesInUse(). - if ( typeof vAPI.storage.getBytesInUse === 'function' ) { + // ηMatrix: not really our business, but does it impact us? + if (typeof vAPI.storage.getBytesInUse === 'function') { vAPI.storage.getBytesInUse(null, getBytesInUseHandler); } else { ηm.storageUsed = undefined; } }; -/******************************************************************************/ - -ηMatrix.saveUserSettings = function() { - this.XAL.keyvalSetMany( - this.userSettings, - this.getBytesInUse.bind(this) - ); +ηMatrix.saveUserSettings = function () { + this.XAL.keyvalSetMany(this.userSettings, + this.getBytesInUse.bind(this)); }; -ηMatrix.loadUserSettings = function(callback) { - var ηm = this; +ηMatrix.loadUserSettings = function (callback) { + let ηm = this; - if ( typeof callback !== 'function' ) { + if (typeof callback !== 'function') { callback = this.noopFunc; } - var settingsLoaded = function(store) { + var settingsLoaded = function (store) { // console.log('storage.js > loaded user settings'); - ηm.userSettings = store; - callback(ηm.userSettings); }; vAPI.storage.get(this.userSettings, settingsLoaded); }; -/******************************************************************************/ - -ηMatrix.loadRawSettings = function() { - var ηm = this; +ηMatrix.loadRawSettings = function () { + let ηm = this; + let onLoaded = function (bin) { + if (!bin || bin.rawSettings instanceof Object === false) { + return; + } - var onLoaded = function(bin) { - if ( !bin || bin.rawSettings instanceof Object === false ) { return; } - for ( var key of Object.keys(bin.rawSettings) ) { - if ( - ηm.rawSettings.hasOwnProperty(key) === false || - typeof bin.rawSettings[key] !== typeof ηm.rawSettings[key] - ) { + for (let key of Object.keys(bin.rawSettings)) { + if (ηm.rawSettings.hasOwnProperty(key) === false + || typeof bin.rawSettings[key] !== typeof ηm.rawSettings[key]) { continue; } ηm.rawSettings[key] = bin.rawSettings[key]; @@ -92,131 +84,135 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); vAPI.storage.get('rawSettings', onLoaded); }; -ηMatrix.saveRawSettings = function(rawSettings, callback) { - var keys = Object.keys(rawSettings); - if ( keys.length === 0 ) { - if ( typeof callback === 'function' ) { +ηMatrix.saveRawSettings = function (rawSettings, callback) { + let keys = Object.keys(rawSettings); + if (keys.length === 0) { + if (typeof callback === 'function') { callback(); } return; } - for ( var key of keys ) { - if ( - this.rawSettingsDefault.hasOwnProperty(key) && - typeof rawSettings[key] === typeof this.rawSettingsDefault[key] - ) { + + for (let key of keys) { + if (this.rawSettingsDefault.hasOwnProperty(key) + && typeof rawSettings[key] === typeof this.rawSettingsDefault[key]) { this.rawSettings[key] = rawSettings[key]; } } - vAPI.storage.set({ rawSettings: this.rawSettings }, callback); + vAPI.storage.set({ + rawSettings: this.rawSettings + }, callback); this.rawSettingsWriteTime = Date.now(); }; -ηMatrix.rawSettingsFromString = function(raw) { - var result = {}, - lineIter = new Tools.LineIterator(raw), - line, matches, name, value; - while ( lineIter.eot() === false ) { - line = lineIter.next().trim(); - matches = /^(\S+)(\s+(.+))?$/.exec(line); - if ( matches === null ) { continue; } - name = matches[1]; - if ( this.rawSettingsDefault.hasOwnProperty(name) === false ) { +ηMatrix.rawSettingsFromString = function (raw) { + let result = {}; + let lineIter = new Tools.LineIterator(raw); + + while (lineIter.eot() === false) { + let line = lineIter.next().trim(); + let matches = /^(\S+)(\s+(.+))?$/.exec(line); + + if (matches === null) { + continue; + } + + let name = matches[1]; + if (this.rawSettingsDefault.hasOwnProperty(name) === false) { continue; } - value = (matches[2] || '').trim(); - switch ( typeof this.rawSettingsDefault[name] ) { + + let value = (matches[2] || '').trim(); + + switch (typeof this.rawSettingsDefault[name]) { case 'boolean': - if ( value === 'true' ) { + if (value === 'true') { value = true; - } else if ( value === 'false' ) { + } else if (value === 'false') { value = false; } else { value = this.rawSettingsDefault[name]; } break; case 'string': - if ( value === '' ) { + if (value === '') { value = this.rawSettingsDefault[name]; } break; case 'number': value = parseInt(value, 10); - if ( isNaN(value) ) { + if (isNaN(value)) { value = this.rawSettingsDefault[name]; } break; default: break; } - if ( this.rawSettings[name] !== value ) { + if (this.rawSettings[name] !== value) { result[name] = value; } } this.saveRawSettings(result); }; -ηMatrix.stringFromRawSettings = function() { - var out = []; - for ( var key of Object.keys(this.rawSettings).sort() ) { +ηMatrix.stringFromRawSettings = function () { + let out = []; + for (let key of Object.keys(this.rawSettings).sort()) { out.push(key + ' ' + this.rawSettings[key]); } return out.join('\n'); }; -/******************************************************************************/ - // save white/blacklist -ηMatrix.saveMatrix = function() { +ηMatrix.saveMatrix = function () { ηMatrix.XAL.keyvalSetOne('userMatrix', this.pMatrix.toString()); }; -/******************************************************************************/ - -ηMatrix.loadMatrix = function(callback) { - if ( typeof callback !== 'function' ) { +ηMatrix.loadMatrix = function (callback) { + if (typeof callback !== 'function') { callback = this.noopFunc; } - var ηm = this; - var onLoaded = function(bin) { - if ( bin.hasOwnProperty('userMatrix') ) { + + let ηm = this; + let onLoaded = function (bin) { + if (bin.hasOwnProperty('userMatrix')) { ηm.pMatrix.fromString(bin.userMatrix); ηm.tMatrix.assign(ηm.pMatrix); callback(); } }; + this.XAL.keyvalGetOne('userMatrix', onLoaded); }; -/******************************************************************************/ - -ηMatrix.listKeysFromCustomHostsFiles = function(raw) { - var out = new Set(), - reIgnore = /^[!#]/, - reValid = /^[a-z-]+:\/\/\S+/, - lineIter = new Tools.LineIterator(raw), - location; - while ( lineIter.eot() === false ) { - location = lineIter.next().trim(); - if ( reIgnore.test(location) || !reValid.test(location) ) { continue; } +ηMatrix.listKeysFromCustomHostsFiles = function (raw) { + let out = new Set(); + let reIgnore = /^[!#]/; + let reValid = /^[a-z-]+:\/\/\S+/; + let lineIter = new Tools.LineIterator(raw); + + while (lineIter.eot() === false) { + let location = lineIter.next().trim(); + if (reIgnore.test(location) || !reValid.test(location)) { + continue; + } out.add(location); } return Tools.setToArray(out); }; -/******************************************************************************/ - -ηMatrix.getAvailableHostsFiles = function(callback) { - var ηm = this, - availableHostsFiles = {}; +ηMatrix.getAvailableHostsFiles = function (callback) { + let ηm = this; + let availableHostsFiles = {}; // Custom filter lists. - var importedListKeys = this.listKeysFromCustomHostsFiles(ηm.userSettings.externalHostsFiles), - i = importedListKeys.length, - listKey, entry; - while ( i-- ) { - listKey = importedListKeys[i]; - entry = { + let importedListKeys = + this.listKeysFromCustomHostsFiles(ηm.userSettings.externalHostsFiles); + let i = importedListKeys.length; + + while (i--) { + let listKey = importedListKeys[i]; + let entry = { content: 'filters', contentURL: listKey, external: true, @@ -228,31 +224,41 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); } // selected lists - var onSelectedHostsFilesLoaded = function(bin) { + let onSelectedHostsFilesLoaded = function (bin) { // Now get user's selection of lists - for ( var assetKey in bin.liveHostsFiles ) { - var availableEntry = availableHostsFiles[assetKey]; - if ( availableEntry === undefined ) { continue; } - var liveEntry = bin.liveHostsFiles[assetKey]; + for (let assetKey in bin.liveHostsFiles) { + let availableEntry = availableHostsFiles[assetKey]; + if (availableEntry === undefined) { + continue; + } + + let liveEntry = bin.liveHostsFiles[assetKey]; availableEntry.off = liveEntry.off || false; - if ( liveEntry.entryCount !== undefined ) { + if (liveEntry.entryCount !== undefined) { availableEntry.entryCount = liveEntry.entryCount; } - if ( liveEntry.entryUsedCount !== undefined ) { + if (liveEntry.entryUsedCount !== undefined) { availableEntry.entryUsedCount = liveEntry.entryUsedCount; } + // This may happen if the list name was pulled from the list content - if ( availableEntry.title === '' && liveEntry.title !== undefined ) { + if (availableEntry.title === '' && liveEntry.title !== undefined) { availableEntry.title = liveEntry.title; } } // Remove unreferenced imported filter lists. - var dict = new Set(importedListKeys); - for ( assetKey in availableHostsFiles ) { - var entry = availableHostsFiles[assetKey]; - if ( entry.submitter !== 'user' ) { continue; } - if ( dict.has(assetKey) ) { continue; } + let dict = new Set(importedListKeys); + for (let assetKey in availableHostsFiles) { + let entry = availableHostsFiles[assetKey]; + if (entry.submitter !== 'user') { + continue; + } + + if (dict.has(assetKey)) { + continue; + } + delete availableHostsFiles[assetKey]; ηm.assets.unregisterAssetSource(assetKey); ηm.assets.remove(assetKey); @@ -262,60 +268,67 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); }; // built-in lists - var onBuiltinHostsFilesLoaded = function(entries) { - for ( var assetKey in entries ) { - if ( entries.hasOwnProperty(assetKey) === false ) { continue; } - entry = entries[assetKey]; - if ( entry.content !== 'filters' ) { continue; } + let onBuiltinHostsFilesLoaded = function (entries) { + for (let assetKey in entries) { + if (entries.hasOwnProperty(assetKey) === false) { + continue; + } + + let entry = entries[assetKey]; + if (entry.content !== 'filters') { + continue; + } availableHostsFiles[assetKey] = Object.assign({}, entry); } // Now get user's selection of lists - vAPI.storage.get( - { 'liveHostsFiles': availableHostsFiles }, - onSelectedHostsFilesLoaded - ); + vAPI.storage.get({ + 'liveHostsFiles': availableHostsFiles + }, onSelectedHostsFilesLoaded); }; this.assets.metadata(onBuiltinHostsFilesLoaded); }; -/******************************************************************************/ +ηMatrix.loadHostsFiles = function (callback) { + let ηm = ηMatrix; + let hostsFileLoadCount; -ηMatrix.loadHostsFiles = function(callback) { - var ηm = ηMatrix; - var hostsFileLoadCount; - - if ( typeof callback !== 'function' ) { + if (typeof callback !== 'function') { callback = this.noopFunc; } - var loadHostsFilesEnd = function() { + let loadHostsFilesEnd = function () { ηm.ubiquitousBlacklist.freeze(); - vAPI.storage.set({ 'liveHostsFiles': ηm.liveHostsFiles }); - vAPI.messaging.broadcast({ what: 'loadHostsFilesCompleted' }); + vAPI.storage.set({ + 'liveHostsFiles': ηm.liveHostsFiles + }); + vAPI.messaging.broadcast({ + what: 'loadHostsFilesCompleted' + }); ηm.getBytesInUse(); callback(); }; - var mergeHostsFile = function(details) { + let mergeHostsFile = function (details) { ηm.mergeHostsFile(details); hostsFileLoadCount -= 1; - if ( hostsFileLoadCount === 0 ) { + if (hostsFileLoadCount === 0) { loadHostsFilesEnd(); } }; - var loadHostsFilesStart = function(hostsFiles) { + let loadHostsFilesStart = function (hostsFiles) { ηm.liveHostsFiles = hostsFiles; ηm.ubiquitousBlacklist.reset(); - var locations = Object.keys(hostsFiles); + + let locations = Object.keys(hostsFiles); hostsFileLoadCount = locations.length; // Load all hosts file which are not disabled. - var location; - while ( (location = locations.pop()) ) { - if ( hostsFiles[location].off ) { + let location; + while ((location = locations.pop())) { + if (hostsFiles[location].off) { hostsFileLoadCount -= 1; continue; } @@ -323,7 +336,7 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); } // https://github.com/gorhill/uMatrix/issues/2 - if ( hostsFileLoadCount === 0 ) { + if (hostsFileLoadCount === 0) { loadHostsFilesEnd(); return; } @@ -332,11 +345,9 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); this.getAvailableHostsFiles(loadHostsFilesStart); }; -/******************************************************************************/ - -ηMatrix.mergeHostsFile = function(details) { - var usedCount = this.ubiquitousBlacklist.count; - var duplicateCount = this.ubiquitousBlacklist.duplicateCount; +ηMatrix.mergeHostsFile = function (details) { + let usedCount = this.ubiquitousBlacklist.count; + let duplicateCount = this.ubiquitousBlacklist.duplicateCount; this.mergeHostsFileContent(details.content); @@ -348,22 +359,20 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); hostsFilesMeta.entryUsedCount = usedCount; }; -/******************************************************************************/ - -ηMatrix.mergeHostsFileContent = function(rawText) { - var rawEnd = rawText.length; - var ubiquitousBlacklist = this.ubiquitousBlacklist; - var reLocalhost = /(^|\s)(localhost\.localdomain|localhost|local|broadcasthost|0\.0\.0\.0|127\.0\.0\.1|::1|fe80::1%lo0)(?=\s|$)/g; - var reAsciiSegment = /^[\x21-\x7e]+$/; - var matches; - var lineBeg = 0, lineEnd; - var line; +ηMatrix.mergeHostsFileContent = function (rawText) { + let rawEnd = rawText.length; + let ubiquitousBlacklist = this.ubiquitousBlacklist; + let reLocalhost = /(^|\s)(localhost\.localdomain|localhost|local|broadcasthost|0\.0\.0\.0|127\.0\.0\.1|::1|fe80::1%lo0)(?=\s|$)/g; + let reAsciiSegment = /^[\x21-\x7e]+$/; + let matches; + let lineBeg = 0, lineEnd; + let line; - while ( lineBeg < rawEnd ) { + while (lineBeg < rawEnd) { lineEnd = rawText.indexOf('\n', lineBeg); - if ( lineEnd < 0 ) { + if (lineEnd < 0) { lineEnd = rawText.indexOf('\r', lineBeg); - if ( lineEnd < 0 ) { + if (lineEnd < 0) { lineEnd = rawEnd; } } @@ -385,19 +394,19 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); // The filter is whatever sequence of printable ascii character without // whitespaces matches = reAsciiSegment.exec(line); - if ( !matches || matches.length === 0 ) { + if (!matches || matches.length === 0) { continue; } // Bypass anomalies // For example, when a filter contains whitespace characters, or // whatever else outside the range of printable ascii characters. - if ( matches[0] !== line ) { + if (matches[0] !== line) { continue; } line = matches[0]; - if ( line === '' ) { + if (line === '') { continue; } @@ -405,22 +414,18 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); } }; -/******************************************************************************/ - // `switches` contains the filter lists for which the switch must be revisited. - -ηMatrix.selectHostsFiles = function(details, callback) { - var ηm = this, - externalHostsFiles = this.userSettings.externalHostsFiles, - i, n, assetKey; +ηMatrix.selectHostsFiles = function (details, callback) { + let ηm = this; + let externalHostsFiles = this.userSettings.externalHostsFiles; // Hosts file to select - if ( Array.isArray(details.toSelect) ) { - for ( assetKey in this.liveHostsFiles ) { - if ( this.liveHostsFiles.hasOwnProperty(assetKey) === false ) { + if (Array.isArray(details.toSelect)) { + for (let assetKey in this.liveHostsFiles) { + if (this.liveHostsFiles.hasOwnProperty(assetKey) === false) { continue; } - if ( details.toSelect.indexOf(assetKey) !== -1 ) { + if (details.toSelect.indexOf(assetKey) !== -1) { this.liveHostsFiles[assetKey].off = false; } else if ( details.merge !== true ) { this.liveHostsFiles[assetKey].off = true; @@ -429,18 +434,17 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); } // Imported hosts files to remove - if ( Array.isArray(details.toRemove) ) { - var removeURLFromHaystack = function(haystack, needle) { - return haystack.replace( - new RegExp( - '(^|\\n)' + - needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + - '(\\n|$)', 'g'), - '\n' - ).trim(); + if (Array.isArray(details.toRemove)) { + let removeURLFromHaystack = function (haystack, needle) { + return haystack + .replace(new RegExp('(^|\\n)' + + needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + + '(\\n|$)', 'g'), + '\n').trim(); }; - for ( i = 0, n = details.toRemove.length; i < n; i++ ) { - assetKey = details.toRemove[i]; + + for (let i=0, n=details.toRemove.length; i<n; ++i) { + let assetKey = details.toRemove[i]; delete this.liveHostsFiles[assetKey]; externalHostsFiles = removeURLFromHaystack(externalHostsFiles, assetKey); this.assets.remove(assetKey); @@ -448,88 +452,105 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); } // Hosts file to import - if ( typeof details.toImport === 'string' ) { + if (typeof details.toImport === 'string') { // https://github.com/gorhill/uBlock/issues/1181 // Try mapping the URL of an imported filter list to the assetKey of an // existing stock list. - var assetKeyFromURL = function(url) { - var needle = url.replace(/^https?:/, ''); - var assets = ηm.liveHostsFiles, asset; - for ( var assetKey in assets ) { - asset = assets[assetKey]; - if ( asset.content !== 'filters' ) { continue; } - if ( typeof asset.contentURL === 'string' ) { - if ( asset.contentURL.endsWith(needle) ) { return assetKey; } + let assetKeyFromURL = function (url) { + let needle = url.replace(/^https?:/, ''); + let assets = ηm.liveHostsFiles; + + for (let assetKey in assets) { + let asset = assets[assetKey]; + if (asset.content !== 'filters') { + continue; + } + if (typeof asset.contentURL === 'string') { + if (asset.contentURL.endsWith(needle)) { + return assetKey; + } continue; } - if ( Array.isArray(asset.contentURL) === false ) { continue; } - for ( i = 0, n = asset.contentURL.length; i < n; i++ ) { - if ( asset.contentURL[i].endsWith(needle) ) { + if (Array.isArray(asset.contentURL) === false) { + continue; + } + for (let i=0, n=asset.contentURL.length; i<n; ++i) { + if (asset.contentURL[i].endsWith(needle)) { return assetKey; } } } + return url; }; - var importedSet = new Set(this.listKeysFromCustomHostsFiles(externalHostsFiles)), - toImportSet = new Set(this.listKeysFromCustomHostsFiles(details.toImport)), - iter = toImportSet.values(); + + let importedSet = new Set(this.listKeysFromCustomHostsFiles(externalHostsFiles)); + let toImportSet = new Set(this.listKeysFromCustomHostsFiles(details.toImport)); + let iter = toImportSet.values(); + for (;;) { - var entry = iter.next(); - if ( entry.done ) { break; } - if ( importedSet.has(entry.value) ) { continue; } - assetKey = assetKeyFromURL(entry.value); - if ( assetKey === entry.value ) { + let entry = iter.next(); + if (entry.done) { + break; + } + + if (importedSet.has(entry.value)) { + continue; + } + + let assetKey = assetKeyFromURL(entry.value); + if (assetKey === entry.value) { importedSet.add(entry.value); } + this.liveHostsFiles[assetKey] = { content: 'filters', contentURL: [ assetKey ], title: assetKey }; } + externalHostsFiles = Tools.setToArray(importedSet).sort().join('\n'); } - if ( externalHostsFiles !== this.userSettings.externalHostsFiles ) { + if (externalHostsFiles !== this.userSettings.externalHostsFiles) { this.userSettings.externalHostsFiles = externalHostsFiles; - vAPI.storage.set({ externalHostsFiles: externalHostsFiles }); + vAPI.storage.set({ + externalHostsFiles: externalHostsFiles + }); } - vAPI.storage.set({ 'liveHostsFiles': this.liveHostsFiles }); - if ( typeof callback === 'function' ) { + vAPI.storage.set({ + 'liveHostsFiles': this.liveHostsFiles + }); + + if (typeof callback === 'function') { callback(); } }; -/******************************************************************************/ - // `switches` contains the preset blacklists for which the switch must be // revisited. - -ηMatrix.reloadHostsFiles = function() { +ηMatrix.reloadHostsFiles = function () { this.loadHostsFiles(); }; -/******************************************************************************/ - -ηMatrix.loadPublicSuffixList = function(callback) { - if ( typeof callback !== 'function' ) { +ηMatrix.loadPublicSuffixList = function (callback) { + if (typeof callback !== 'function') { callback = this.noopFunc; } - var applyPublicSuffixList = function(details) { - if ( !details.error ) { + let applyPublicSuffixList = function (details) { + if (!details.error) { publicSuffixList.parse(details.content, Punycode.toASCII); } + callback(); }; this.assets.get(this.pslAssetKey, applyPublicSuffixList); }; -/******************************************************************************/ - ηMatrix.scheduleAssetUpdater = (function () { let timer; let next = 0; @@ -563,21 +584,17 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); }; })(); -/******************************************************************************/ - -ηMatrix.assetObserver = function(topic, details) { +ηMatrix.assetObserver = function (topic, details) { // Do not update filter list if not in use. - if ( topic === 'before-asset-updated' ) { - if ( - this.liveHostsFiles.hasOwnProperty(details.assetKey) === false || - this.liveHostsFiles[details.assetKey].off === true - ) { + if (topic === 'before-asset-updated') { + if (this.liveHostsFiles.hasOwnProperty(details.assetKey) === false || + this.liveHostsFiles[details.assetKey].off === true) { return false; } return true; } - if ( topic === 'after-asset-updated' ) { + if (topic === 'after-asset-updated') { vAPI.messaging.broadcast({ what: 'assetUpdated', key: details.assetKey, @@ -587,7 +604,7 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); } // Update failed. - if ( topic === 'asset-update-failed' ) { + if (topic === 'asset-update-failed') { vAPI.messaging.broadcast({ what: 'assetUpdated', key: details.assetKey, @@ -597,11 +614,11 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); } // Reload all filter lists if needed. - if ( topic === 'after-assets-updated' ) { - if ( details.assetKeys.length !== 0 ) { + if (topic === 'after-assets-updated') { + if (details.assetKeys.length !== 0) { this.loadHostsFiles(); } - if ( this.userSettings.autoUpdate ) { + if (this.userSettings.autoUpdate) { this.scheduleAssetUpdater(25200000); } else { this.scheduleAssetUpdater(0); @@ -615,9 +632,9 @@ Components.utils.import('chrome://ematrix/content/lib/Tools.jsm'); // New asset source became available, if it's a filter list, should we // auto-select it? - if ( topic === 'builtin-asset-source-added' ) { - if ( details.entry.content === 'filters' ) { - if ( details.entry.off !== true ) { + if (topic === 'builtin-asset-source-added') { + if (details.entry.content === 'filters') { + if (details.entry.off !== true) { this.saveSelectedFilterLists([ details.assetKey ], true); } } |