From 66053ec62e1512d9f80c24e2c52d60fd180664fd Mon Sep 17 00:00:00 2001 From: josc146 Date: Fri, 28 Apr 2023 23:40:04 +0800 Subject: [PATCH] fix: duplicate requests when in foreground mode --- src/background/index.mjs | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/background/index.mjs b/src/background/index.mjs index 913e8c2..52a736a 100644 --- a/src/background/index.mjs +++ b/src/background/index.mjs @@ -36,6 +36,29 @@ import { import { refreshMenu } from './menus.mjs' import { registerCommands } from './commands.mjs' +function setPortProxy(port, proxyTabId) { + port.proxy = Browser.tabs.connect(proxyTabId) + const proxyOnMessage = (msg) => { + port.postMessage(msg) + } + const portOnMessage = (msg) => { + port.proxy.postMessage(msg) + } + const proxyOnDisconnect = () => { + port.proxy = Browser.tabs.connect(proxyTabId) + } + const portOnDisconnect = (msg) => { + port.proxy.onMessage.removeListener(proxyOnMessage) + port.onMessage.removeListener(portOnMessage) + port.proxy.onDisconnect.removeListener(proxyOnDisconnect) + port.onDisconnect.removeListener(portOnDisconnect) + } + port.proxy.onMessage.addListener(proxyOnMessage) + port.onMessage.addListener(portOnMessage) + port.proxy.onDisconnect.addListener(proxyOnDisconnect) + port.onDisconnect.addListener(portOnDisconnect) +} + async function executeApi(session, port, config) { if (chatgptWebModelKeys.includes(session.modelName)) { let tabId @@ -47,14 +70,10 @@ async function executeApi(session, port, config) { if (tab) tabId = tab.id } if (tabId) { - const proxyPort = Browser.tabs.connect(tabId) - proxyPort.onMessage.addListener((msg) => { - port.postMessage(msg) - }) - port.onMessage.addListener((msg) => { - proxyPort.postMessage(msg) - }) - proxyPort.postMessage({ session }) + if (!port.proxy) { + setPortProxy(port, tabId) + port.proxy.postMessage({ session }) + } } else { const accessToken = await getChatGptAccessToken() await generateAnswersWithChatgptWebApi(port, session.question, session, accessToken)