From 9ae3de71e7d05dada506eb9ba639ac9d2a06e046 Mon Sep 17 00:00:00 2001 From: mauro-balades Date: Fri, 27 Sep 2024 18:12:49 +0200 Subject: [PATCH 1/6] Refactor ZenTabUnloader to remove unused code and optimize tab unloading timeout --- src/ZenTabUnloader.mjs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/ZenTabUnloader.mjs b/src/ZenTabUnloader.mjs index 8fd6edb..687932e 100644 --- a/src/ZenTabUnloader.mjs +++ b/src/ZenTabUnloader.mjs @@ -1,8 +1,5 @@ { - const ZEN_TAB_UNLOADER_PREF = "zen.tab-unloader.enabled"; - const ZEN_TAB_UNLOADER_TIMEOUT_PREF = "zen.tab-unloader.timeout"; - const lazy = {}; XPCOMUtils.defineLazyPreferenceGetter( @@ -16,7 +13,7 @@ lazy, "zenTabUnloaderTimeout", "zen.tab-unloader.timeout-minutes", - 5 + 20 ); XPCOMUtils.defineLazyPreferenceGetter( From 7af14f14844994df9d856d4b530ba620e040f1eb Mon Sep 17 00:00:00 2001 From: mauro-balades Date: Fri, 27 Sep 2024 18:56:37 +0200 Subject: [PATCH 2/6] Refactor ZenWorkspaces to fix icon mapping issue --- src/ZenWorkspaces.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ZenWorkspaces.mjs b/src/ZenWorkspaces.mjs index f154c7f..a076656 100644 --- a/src/ZenWorkspaces.mjs +++ b/src/ZenWorkspaces.mjs @@ -127,7 +127,7 @@ var ZenWorkspaces = { } }, - _kIcons: JSON.parse(Services.prefs.getStringPref("zen.workspaces.icons")).map((icon) => icon), + _kIcons: JSON.parse(Services.prefs.getStringPref("zen.workspaces.icons")).map((icon) => Array.from(icon)[0]), _initializeWorkspaceCreationIcons() { let container = document.getElementById('PanelUI-zen-workspaces-create-icons-container'); @@ -248,7 +248,7 @@ var ZenWorkspaces = { if (this.workspaceHasIcon(workspace)) { return workspace.icon; } - return workspace.name[0].toUpperCase(); + return Array.from(workspace.name)[0].toUpperCase(); }, get shouldShowContainers() { From 8efd7fecbebd2c6ad5cf1ea64e097e6ed11708b4 Mon Sep 17 00:00:00 2001 From: mauro-balades Date: Fri, 27 Sep 2024 19:17:16 +0200 Subject: [PATCH 3/6] Refactor ZenSidebarManager to reload browser with default mobile user agent --- src/ZenSidebarManager.mjs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/ZenSidebarManager.mjs b/src/ZenSidebarManager.mjs index 2e8396f..8343304 100644 --- a/src/ZenSidebarManager.mjs +++ b/src/ZenSidebarManager.mjs @@ -414,6 +414,7 @@ var gZenBrowserManagerSidebar = { browserContainers.appendChild(browser); if (data.ua) { browser.browsingContext.customUserAgent = this.DEFAULT_MOBILE_USER_AGENT; + browser.reload(); } browser.docShellIsActive = true; }, @@ -460,16 +461,6 @@ var gZenBrowserManagerSidebar = { _getWebPanelIcon(url, element) { let { preferredURI } = Services.uriFixup.getFixupURIInfo(url); element.setAttribute('image', `page-icon:${preferredURI.spec}`); - fetch(`https://s2.googleusercontent.com/s2/favicons?domain_url=${preferredURI.spec}`).then(async (response) => { - if (response.ok) { - let blob = await response.blob(); - let reader = new FileReader(); - reader.onload = function () { - element.setAttribute('image', reader.result); - }; - reader.readAsDataURL(blob); - } - }); }, _getBrowserById(id) { From 65782ccf69663d591975b9031fb852f973bdc7b7 Mon Sep 17 00:00:00 2001 From: mauro-balades Date: Fri, 27 Sep 2024 19:25:33 +0200 Subject: [PATCH 4/6] Refactor ZenSidebarManager to comment out unused code for fetching web panel icons --- src/ZenSidebarManager.mjs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/ZenSidebarManager.mjs b/src/ZenSidebarManager.mjs index 8343304..8aee0e6 100644 --- a/src/ZenSidebarManager.mjs +++ b/src/ZenSidebarManager.mjs @@ -461,6 +461,16 @@ var gZenBrowserManagerSidebar = { _getWebPanelIcon(url, element) { let { preferredURI } = Services.uriFixup.getFixupURIInfo(url); element.setAttribute('image', `page-icon:${preferredURI.spec}`); + //fetch(`https://s2.googleusercontent.com/s2/favicons?domain_url=${preferredURI.spec}`).then(async (response) => { + // if (response.ok) { + // let blob = await response.blob(); + // let reader = new FileReader(); + // reader.onload = function () { + // element.setAttribute('image', reader.result); + // }; + // reader.readAsDataURL(blob); + // } + //}); }, _getBrowserById(id) { From 3681f71acf13986f90e4c1b4ed53e29d720b5ef3 Mon Sep 17 00:00:00 2001 From: mauro-balades Date: Fri, 27 Sep 2024 20:09:06 +0200 Subject: [PATCH 5/6] Refactor ZenTabUnloader to exclude tabs with sound playing or marked for ignore --- src/ZenTabUnloader.mjs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ZenTabUnloader.mjs b/src/ZenTabUnloader.mjs index 687932e..2e33deb 100644 --- a/src/ZenTabUnloader.mjs +++ b/src/ZenTabUnloader.mjs @@ -220,7 +220,8 @@ canUnloadTab(tab, currentTimestamp, excludedUrls) { if (tab.pinned || tab.selected || tab.multiselected || tab.hasAttribute("busy") || tab.hasAttribute("pending") - || !tab.linkedPanel || tab.splitView || tab.attention + || !tab.linkedPanel || tab.splitView || tab.attention || tab.soundPlaying + || tab.zenIgnoreUnload || excludedUrls.some(url => url.test(tab.linkedBrowser.currentURI.spec))) { return false; } From 7147fd2dfc8b304d47ed0321fc3bde663b2162ab Mon Sep 17 00:00:00 2001 From: mauro-balades Date: Fri, 27 Sep 2024 20:34:37 +0200 Subject: [PATCH 6/6] Refactor ZenTabUnloader to optimize tab unloading and add context menu options --- src/ZenTabUnloader.mjs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/ZenTabUnloader.mjs b/src/ZenTabUnloader.mjs index 2e33deb..cb208fc 100644 --- a/src/ZenTabUnloader.mjs +++ b/src/ZenTabUnloader.mjs @@ -149,6 +149,7 @@ if (!lazy.zenTabUnloaderEnabled) { return; } + this.insertIntoContextMenu(); this.observer = new ZenTabsObserver(); this.intervalUnloader = new ZenTabsIntervalUnloader(this); this.observer.addTabsListener(this.onTabEvent.bind(this)); @@ -217,6 +218,47 @@ return gBrowser.tabs; } + insertIntoContextMenu() { + const element = window.MozXULElement.parseXULToFragment(` + + + + + + + + + `); + document.getElementById('context_closeDuplicateTabs').parentNode.appendChild(element); + } + + unloadTab() { + const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + for (const tab of tabs) { + gBrowser.discardBrowser(tab); + } + } + + preventUnloadTab() { + const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + for (const tab of tabs) { + tab.zenIgnoreUnload = true; + } + } + + ignoreUnloadTab() { + const tabs = TabContextMenu.contextTab.multiselected ? gBrowser.selectedTabs : [TabContextMenu.contextTab]; + for (const tab of tabs) { + tab.zenIgnoreUnload = false; + } + } + canUnloadTab(tab, currentTimestamp, excludedUrls) { if (tab.pinned || tab.selected || tab.multiselected || tab.hasAttribute("busy") || tab.hasAttribute("pending")