mirror of
https://github.com/He4eT/tabswitcher.git
synced 2026-05-05 01:17:23 +00:00
pages/search: cleanup session
This commit is contained in:
parent
e8f5b3cda9
commit
901f7ac65b
2 changed files with 33 additions and 29 deletions
|
|
@ -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.action.onClicked.addListener((() =>
|
||||||
browser.tabs.create({
|
browser.tabs.create({
|
||||||
url: '/pages/search/search.html'
|
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) => {
|
browser.runtime.onMessage.addListener((message, sender) => {
|
||||||
switch (message.action) {
|
switch (message.action) {
|
||||||
case 'closeSender':
|
case 'closeSender':
|
||||||
browser.tabs.remove(sender.tab.id)
|
browser.tabs.remove(sender.tab.id)
|
||||||
break
|
break
|
||||||
case 'registerSender':
|
case 'registerSender':
|
||||||
addRegisteredTab(sender.tab.id)
|
addRegisteredTab(sender.tab)
|
||||||
break
|
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))
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ const store = Store.init({
|
||||||
windows: browser.windows,
|
windows: browser.windows,
|
||||||
onStateUpdate: dom.updateSearchResults,
|
onStateUpdate: dom.updateSearchResults,
|
||||||
closeCurrentTab: () => {
|
closeCurrentTab: () => {
|
||||||
history.replaceState({}, '', '')
|
|
||||||
browser.runtime.sendMessage({action: 'closeSender'})
|
browser.runtime.sendMessage({action: 'closeSender'})
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue