Skip to content
Snippets Groups Projects
index.js 2.15 KiB


// Setting change setting storage
(async () => {
    let store_settings = null;
    let checkbox = document.querySelector("#store-settings-switch");

    await initializeSettingsState();

    checkbox.addEventListener("change", e => {
        updateSettingState(checkbox.checked);
    });

    async function verifyPermissions(request = false) {
        let permissionsToRequest = {
            permissions: ["webRequestBlocking"],
            origins: [
                "https://metager.org/*",
                "https://metager.de/*",
            ]
        };

        if (request) {
            return browser.permissions.request(permissionsToRequest);
        } else {
            return browser.permissions.contains(permissionsToRequest);
        }
    }

    async function initializeSettingsState() {
        // Initialize stored settings
        let synced_settings = await browser.storage.sync.get({
            settings_store: true,
        });

        if (synced_settings.settings_store == true) {
            await verifyPermissions().then(granted => {
                if (granted)
                    store_settings = true;
                else
                    store_settings = false;
            });
        } else {
            store_settings = false;
        }

        checkbox.checked = store_settings;

        browser.storage.onChanged.addListener((changes, areaName) => {
            if (changes.hasOwnProperty("settings_store")) {
                let new_value = changes.settings_store.newValue;
                checkbox.checked = new_value;
                store_settings = new_value;
            }
        });
    }

    async function updateSettingState(store_settings) {
        if (store_settings == true) {
            return verifyPermissions(true).then(permission_granted => {
                if (permission_granted) {
                    return browser.storage.sync.set({ settings_store: store_settings });
                } else {
                    checkbox.checked = false;
                    return;
                }
            })
        } else {
            return browser.storage.sync.set({ settings_store: store_settings });
        }
    }
})();