From bf820addc4f570487bd277bf054e514dc40a9769 Mon Sep 17 00:00:00 2001 From: DIYgod Date: Sun, 4 Feb 2024 21:10:21 +0800 Subject: [PATCH] feat: add maxExecutionTime for async-lock --- src/background/rss.ts | 87 ++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 39 deletions(-) diff --git a/src/background/rss.ts b/src/background/rss.ts index efd2270..c932d22 100644 --- a/src/background/rss.ts +++ b/src/background/rss.ts @@ -22,51 +22,60 @@ const savedRSS: { } } = {} -const lock = new AsyncLock() +const lock = new AsyncLock({ + maxExecutionTime: 3000, +}) export const getRSS = async (tabId, url) => { - await lock.acquire(tabId, async () => { - if (savedRSS[tabId]) { - setRSS(tabId, savedRSS[tabId]) - return - } + if (!tabId || !url || !url.startsWith("http")) { + return + } + try { + await lock.acquire(tabId, async () => { + if (savedRSS[tabId]) { + setRSS(tabId, savedRSS[tabId]) + return + } - report({ - url, - }) - const html = await sendToContentScript({ - name: "requestHTML", - tabId, - }) - - if (chrome.offscreen) { - await setupOffscreenDocument("tabs/offscreen.html") - chrome.runtime.sendMessage({ - target: "offscreen", - data: { - name: "requestRSSHub", - body: { - tabId, - html, - url, - rules: await storage.get("rules"), - }, - }, - }) - } else { - const rsshub = sandboxGetRSSHub({ - html, + report({ url, - rules: await storage.get("rules"), }) - setRSS(tabId, rsshub) - } + const html = await sendToContentScript({ + name: "requestHTML", + tabId, + }) - const pageRSS = await sendToContentScript({ - name: "requestPageRSS", - tabId, + if (chrome.offscreen) { + await setupOffscreenDocument("tabs/offscreen.html") + chrome.runtime.sendMessage({ + target: "offscreen", + data: { + name: "requestRSSHub", + body: { + tabId, + html, + url, + rules: await storage.get("rules"), + }, + }, + }) + } else { + const rsshub = sandboxGetRSSHub({ + html, + url, + rules: await storage.get("rules"), + }) + setRSS(tabId, rsshub) + } + + const pageRSS = await sendToContentScript({ + name: "requestPageRSS", + tabId, + }) + setRSS(tabId, pageRSS) }) - setRSS(tabId, pageRSS) - }) + } catch (error) { + console.error(error) + } } export const getCachedRSS = (tabId) => {