Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
1.9 kB
8
Indexable
Never
    const DEFAULT_STORAGE_DATA = {
        ignoreList: 'messenger.com\nslack.com',
        unmuteLastTab: true,
    }
    const muteOtherTabs = (changedTab, ignoreList) => {
        chrome.tabs.query({
            audible: true
        }, (tabs) => {
            tabs.forEach((tab) => {
                const onIgnoreList = ignoreList && Math.max(ignoreList.split(/\n/)
                    .map(i => tab.url.indexOf(i.trim()))) > -1;
                if (tab.id !== changedTab.id && !onIgnoreList) {
                    chrome.tabs.update(tab.id, {
                        muted: true
                    });
                }
            })
        });
    };
    const unmuteRecentTab = () => {
        chrome.tabs.query({
            audible: true
        }, (tabs) => {
            const latestAudibleTabId = Math.max(tabs.map(tab => tab.id));
            chrome.tabs.update(latestAudibleTabId, {
                muted: false
            });
        });
    };
    const tabUpdated = (tabId, changeInfo, tab) => {
        chrome.storage.local.get((storage) => {
            const {
                ignoreList
            } = storage;
            if (changeInfo && changeInfo.audible === true) {
                const onIgnoreList = ignoreList && Math.max(ignoreList.split(/\n/)
                    .map(i => tab.url.indexOf(i.trim()))) > -1;
                if (!onIgnoreList) {
                    muteOtherTabs(tab, ignoreList);
                }
            }
            if (changeInfo && changeInfo.audible === false) {
                if (storage && storage.unmuteLastTab) {
                    unmuteRecentTab();
                }
            }
        });
    };
    chrome.storage.local.get((storage) => {
        if (!storage.ignoreList) {
            chrome.storage.local.set(DEFAULT_STORAGE_DATA);
        }
    });
    chrome.tabs.onUpdated.addListener(tabUpdated);
    chrome.tabs.onRemoved.addListener(unmuteRecentTab);