diff --git a/scripts/background/background.check.js b/scripts/background/background.check.js deleted file mode 100644 index c37501d..0000000 --- a/scripts/background/background.check.js +++ /dev/null @@ -1,7 +0,0 @@ -import EntryManager from "/scripts/GUI/entrypoints/manager.js" - -export default class BackgroundCheck { - static init() { - new EntryManager(); - }; -}; \ No newline at end of file diff --git a/scripts/background/check.js b/scripts/background/check.js new file mode 100644 index 0000000..e7a9a4c --- /dev/null +++ b/scripts/background/check.js @@ -0,0 +1,117 @@ +/* +BackgroundCheck +Check the tabs in the background, and check the filters. +*/ + +// Filter importation +import EntryManager from "/scripts/GUI/entrypoints/manager.js" +import filters from "../filters.js"; +import {background, global} from "/scripts/secretariat.js"; + +export default class BackgroundCheck { + update = {}; + + constructor () { + this.manager = new EntryManager(); + this.updater(); + }; + + updater() { + global.read([`settings`,`sync`]).then(async (DURATION_PREFERENCES) => { + /* + Set the default options if they don't exist yet. + */ + const setDefaults = async () => { + // Forcibly create the preference if it doesn't exist. It's required! + if (!(typeof DURATION_PREFERENCES).includes(`obj`) || !DURATION_PREFERENCES || Array.isArray(DURATION_PREFERENCES)) { + DURATION_PREFERENCES = {}; + DURATION_PREFERENCES[`duration`] = 24; + + // Write it. + return(await global.write([`settings`, `sync`], DURATION_PREFERENCES, -1, {"silent": true})); + } else {return (true)}; + }; + + setDefaults().then((result) => { + if (result) { + /* + Check if it's time to update the filters through comparing the difference of the current time and the last updated time to the expected duration. + */ + async function updater_check() { + let TIME = {}; + TIME[`now`] = Date.now(); + TIME[`last`] = await global.read([`settings`,`sync`,`last`], -1); + + // Run if the last time is not set or if the difference is greater than the expected duration. + return (TIME[`last`] ? ((TIME[`now`] - TIME[`last`]) > DURATION_PREFERENCES[`duration`]) : true); + }; + + /* + Run the update. + + @return {Promise} the promise that, once resolved, contains the last update status. + */ + const updater_run = async () => { + filter.update(); + + // Update the last time. + return(await global.write([`settings`,`sync`,`last`], Date.now(), -1)); + }; + + // Set the interval. + let updater_set = () => { + this.update[`checker`] = setInterval(async () => { + // Update the filters. + updater_run(); + }, DURATION_PREFERENCES[`duration`]); + }; + + /* + Reset the interval. + */ + const updater_reset = () => { + // Cancel the interval. + (this.update[`checker`]) ? clearInterval(this.update[`checker`]) : false; + + // Run the updater, if necessary. + (updater_check()) + ? updater_run() + : false; + + // Start the new interval. + updater_set(); + } + + const updater_background = () => { + this.update[`background`] = async () => { + if ((await global.read([`settings`, `sync`, `duration`])) ? (await global.read([`settings`, `sync`, `duration`] * (60 ** 2) * 1000 != DURATION_PREFERENCES[`duration`])) : false) { + // Get the new time. + DURATION_PREFERENCES[`duration`] = await global.global.read([`settings`, `sync`, `duration`]) * (60 ** 2) * 1000; + + // Reset the updater. + updater_reset(); + }; + }; + + // Set the background checker. + new background(() => {return(this.update.background())}); + } + + // Convert DURATION_PREFERENCES[`duration`]) from hrs to milliseconds. + DURATION_PREFERENCES[`duration`] = DURATION_PREFERENCES[`duration`] * (60 ** 2) * 1000; + + // Set the filter management. + let filter = new filters(); + + // When the browser is started, run the updater immediately only when the filters are not updated yet. + (updater_check()) + ? updater_run() + : false; + + // Run the background. + updater_background(); + } + }); + }) + } +}; \ No newline at end of file diff --git a/scripts/background/fc.js b/scripts/background/fc.js deleted file mode 100644 index 3d5b89f..0000000 --- a/scripts/background/fc.js +++ /dev/null @@ -1,113 +0,0 @@ -/* fc.js -This script provides installation run scripts. -*/ - -import { template, global, background} from "../secretariat.js"; -import filters from "../filters.js"; -import pointer from "../data/pointer.js"; -let config = chrome.runtime.getURL("config/config.json"); - -export default class fc { - // Start the out of the box experience. - static hello() { - // the OOBE must be in the config. - fetch(config) - .then((response) => response.json()) - .then((jsonData) => { - let configuration = jsonData[`OOBE`]; - - if (configuration) { - configuration.forEach((item) => { - chrome.tabs.create({ url: item }, function (tab) {}); - }); - } - }) - .catch((error) => { - console.error(error); - }); - } - - // Initialize the configuration. - static setup() { - // the OOBE must be in the config. - fetch(config) - .then((response) => response.json()) - .then(async (jsonData) => { - let configuration = jsonData; - - // Run the storage initialization. - delete configuration[`OOBE`]; - template.set(configuration); - - // Update the filters to sync with synchronized storage data. - (new filters).update(); - }) - .catch((error) => { - console.error(error); - }); - } - - static trigger() { - chrome.runtime.onInstalled.addListener(function (details) { - (details.reason == chrome.runtime.OnInstalledReason.INSTALL) ? fc.hello() : null; - fc.setup(); - }); - } - - // main function - static run() { - fc.trigger(); - fc.every(); - - // Might as well set the preferences for storage. - template.configure(); - pointer.clear(); - } - - static async every() { - global.read([`settings`,`sync`]).then(async (DURATION_PREFERENCES) => { - // Forcibly create the preference if it doesn't exist. It's required! - if (!(typeof DURATION_PREFERENCES).includes(`obj`) || DURATION_PREFERENCES == null || Array.isArray(DURATION_PREFERENCES)) { - DURATION_PREFERENCES = {}; - DURATION_PREFERENCES[`duration`] = 24; - - // Write it. - await global.write([`settings`, `sync`], DURATION_PREFERENCES, -1, {"silent": true}); - }; - - if (((typeof DURATION_PREFERENCES).includes(`obj`) && DURATION_PREFERENCES != null && !Array.isArray(DURATION_PREFERENCES)) ? ((DURATION_PREFERENCES[`duration`]) ? (DURATION_PREFERENCES[`duration`] > 0) : false) : false) { - // Convert DURATION_PREFERENCES[`duration`]) from hrs to milliseconds. - DURATION_PREFERENCES[`duration`] = DURATION_PREFERENCES[`duration`] * (60 ** 2) * 1000; - let filter = new filters; - - // Now, set the interval. - let updater_set = () => { - setInterval(async () => { - // Update the filters. - filter.update(); - }, DURATION_PREFERENCES[`duration`]); - }; - - // Provide a way to cancel the interval. - let updater_cancel = (updater) => { - clearInterval(updater); - }; - - let UPDATER = updater_set(); - - let updater_interval = async () => { - if ((await global.read([`settings`, `sync`, `duration`])) ? (await global.read([`settings`, `sync`, `duration`] * (60 ** 2) * 1000 != DURATION_PREFERENCES[`duration`])) : false) { - DURATION_PREFERENCES[`duration`] = await global.global.read([`settings`, `sync`, `duration`]) * (60 ** 2) * 1000; - - // Reset the updater. - updater_cancel(UPDATER); - UPDATER = updater_set(); - } - }; - - new background(updater_cancel); - }; - }) - - }; -} diff --git a/scripts/background/importer.js b/scripts/background/importer.js new file mode 100644 index 0000000..b372509 --- /dev/null +++ b/scripts/background/importer.js @@ -0,0 +1,68 @@ +/* +BackgroundImporter +This script provides installation run scripts. +*/ + +// File importation +import {template, global} from "../secretariat.js"; +import pointer from "../data/pointer.js"; + +// The URL for the configuration file +const config = chrome.runtime.getURL("config/config.json"); + +export default class BackgroundImporter { + // Start the out of the box experience. + async hello() { + if (!(await global.read([`init`])) || !(await global.read([`settings`,`analysis`,`api`,`key`]))) { + let SOURCE = fetch(config); + let SITES = [`popup/hello.htm`]; + + if (SOURCE.ok) { + try { + let CONFIGURATION = await SOURCE.json(); + if (CONFIGURATION[`OOBE`]) { + SITES = [...SITES, ...(Array.isArray(CONFIGURATION[`OOBE`]) ? CONFIGURATION[`OOBE`] : [CONFIGURATION[`OOBE`]])]; + }; + } catch(err) {} + }; + + SITES.forEach((item) => { + // Get local URL. + chrome.tabs.create({ url: chrome.runtime.getURL('pages/'.concat(item)) }, function (tab) {}); + }); + }; + }; + + // Initialize the configuration. + setup() { + // the OOBE must be in the config. + fetch(config) + .then((response) => response.json()) + .then(async (jsonData) => { + let configuration = jsonData; + + // Run the storage initialization. + delete configuration[`OOBE`]; + template.set(configuration); + }) + .catch((error) => { + console.error(error); + }); + } + + trigger() { + chrome.runtime.onInstalled.addListener((details) => { + (details.reason == chrome.runtime.OnInstalledReason.INSTALL) ? this.hello() : null; + this.setup(); + }); + } + + // main function + constructor () { + this.trigger(); + + // Might as well set the preferences for storage. + template.configure(); + pointer.clear(); + } +}