From 901f7ac65bafcf4ab4e16cd0294b724c02a84bb9 Mon Sep 17 00:00:00 2001 From: He4eT Date: Tue, 23 Jan 2024 21:56:38 +0100 Subject: [PATCH] pages/search: cleanup session --- background.js | 69 ++++++++++++++++++++++-------------------- pages/search/search.js | 1 - 2 files changed, 37 insertions(+), 33 deletions(-) diff --git a/background.js b/background.js index 953ee42..c2d196a 100644 --- a/background.js +++ b/background.js @@ -1,46 +1,51 @@ +/* State */ + +let registeredTabs = {} + +const addRegisteredTab = (tab) => + registeredTabs[tab.id] = tab + +const removeRegisteredTab = (tabId) => + delete registeredTabs[tabId] + +/* Utils */ + +const wait = (timeout) => + new Promise((resolve) => setTimeout(resolve, timeout)) + +/* Handlers */ + browser.action.onClicked.addListener((() => browser.tabs.create({ url: '/pages/search/search.html' }))) -/* */ - -let registeredTabs = [] - -const addRegisteredTab = (tabId) => - registeredTabs = [tabId, ...registeredTabs] - -const removeRegisteredTab = (tabId) => - registeredTabs = registeredTabs.filter((x) => x !== tabId) - -/* */ - -browser.tabs.onRemoved.addListener((tabId) => { - console.log(tabId, registeredTabs) - if (!registeredTabs.includes(tabId)) { - return - } - - removeRegisteredTab(tabId) - - const timeout = () => new Promise((resolve) => - setTimeout(resolve, 500)) - - timeout() - .then(() => browser.sessions.getRecentlyClosed({maxResults: 1})) - .then((x) => (console.log(x), x)) - .then(([sessionInfo]) => browser.sessions.forgetClosedTab( - sessionInfo.tab.windowId, - sessionInfo.tab.sessionId)) -}) - browser.runtime.onMessage.addListener((message, sender) => { switch (message.action) { case 'closeSender': browser.tabs.remove(sender.tab.id) break case 'registerSender': - addRegisteredTab(sender.tab.id) + addRegisteredTab(sender.tab) break } }) + +browser.tabs.onRemoved.addListener((tabId) => { + if (Object.keys(registeredTabs).includes(String(tabId))) { + const closedTab = registeredTabs[tabId] + + wait(300) // Tabs and sessions cannot be synchronised in any other way + .then(browser.sessions.getRecentlyClosed) + .then((sessions) => sessions ?? []) + .then((sessions) => sessions + .filter((session) => session.tab)) + .then((sessions) => sessions + .filter(({tab}) => tab.url === closedTab.url)) + .then((sessions) => sessions.forEach(({tab}) => { + console.log(tab) + browser.sessions.forgetClosedTab(tab.windowId, tab.sessionId) + .then(() => removeRegisteredTab(tabId)) + })) + } +}) diff --git a/pages/search/search.js b/pages/search/search.js index a69500a..8c999d9 100644 --- a/pages/search/search.js +++ b/pages/search/search.js @@ -8,7 +8,6 @@ const store = Store.init({ windows: browser.windows, onStateUpdate: dom.updateSearchResults, closeCurrentTab: () => { - history.replaceState({}, '', '') browser.runtime.sendMessage({action: 'closeSender'}) }, })