Add per site delays

This commit is contained in:
2025-10-17 15:54:00 -04:00
parent 0e28dc3f08
commit 73fee5614a
3 changed files with 33 additions and 4 deletions

View File

@ -30,6 +30,18 @@ function isBlacklisted(url, blacklist) {
return blacklist.some((p) => matchPattern(url, p));
}
function getDelayForUrl(url, settings) {
try {
const u = new URL(url);
for (const [domain, customDelay] of Object.entries(settings.siteDelays)) {
if (u.hostname.includes(domain)) {
return customDelay;
}
}
} catch (err) {}
return settings.delay;
}
let activeTabs = new Map();
// Load settings
@ -59,7 +71,7 @@ function updateIcon(state) {
browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
if (changeInfo.status !== "complete" || !tab.url) return;
const settings = await getSettings();
const { delay, blacklist, paused } = settings;
const { delay, blacklist, paused } = await getSettings();
if (paused || isBlacklisted(tab.url, blacklist)) return;
if (tab.url.startsWith("moz-extension://")) return;
@ -67,10 +79,15 @@ browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
const url = encodeURIComponent(tab.url);
updateIcon("wait");
if (activeTabs.has(tabId)) clearTimeout(activeTabs.get(tabId));
const siteDelay = getDelayForUrl(url, await getSettings());
if (activeTabs.has(tabId)) clearTimeout(activeTabs.get(tabId));
const timeout = setTimeout(() => {
fetch(`${SCROBBLE_ENDPOINT}${url}`).then(() => updateIcon("scrobbled"));
}, delay * 1000);
scrobbleStart(url, scrobbleBaseUrl);
updateIcon(tabId, "scrobbled");
setTimeout(() => updateIcon(tabId, "wait"), 3000);
}, siteDelay * 1000);
activeTabs.set(tabId, timeout);
});