From c812a07a84d576650a7f610c17ba1689bf067f56 Mon Sep 17 00:00:00 2001 From: Slowlife Date: Tue, 24 Mar 2026 05:43:21 +0700 Subject: [PATCH] no-bug: re-schedule live folders fetch after sleep (gh-12883) --- .../LiveFoldersComponents.manifest | 1 + .../ZenLiveFoldersManager.sys.mjs | 42 ++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/zen/live-folders/LiveFoldersComponents.manifest b/src/zen/live-folders/LiveFoldersComponents.manifest index 6a3f48527..885d2690d 100644 --- a/src/zen/live-folders/LiveFoldersComponents.manifest +++ b/src/zen/live-folders/LiveFoldersComponents.manifest @@ -3,3 +3,4 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. category browser-window-delayed-startup resource:///modules/zen/ZenLiveFoldersManager.sys.mjs ZenLiveFoldersManager.init +category browser-quit-application-granted resource:///modules/zen/ZenLiveFoldersManager.sys.mjs ZenLiveFoldersManager.uninit diff --git a/src/zen/live-folders/ZenLiveFoldersManager.sys.mjs b/src/zen/live-folders/ZenLiveFoldersManager.sys.mjs index cb2752989..a2d886726 100644 --- a/src/zen/live-folders/ZenLiveFoldersManager.sys.mjs +++ b/src/zen/live-folders/ZenLiveFoldersManager.sys.mjs @@ -34,7 +34,9 @@ class nsZenLiveFoldersManager { #saveFilename = "zen-live-folders.jsonlz4"; #file = null; + #boundHandleEvent = null; stateRestored = Promise.withResolvers(); + constructor() { this.liveFolders = new Map(); this.registry = new Map(); @@ -63,10 +65,48 @@ class nsZenLiveFoldersManager { this.#isInitialized = true; } + uninit() { + if (!this.#isInitialized) { + return; + } + + Services.obs.removeObserver(this, "wake_notification"); + if (this.#boundHandleEvent) { + lazy.ZenWindowSync.removeSyncHandler(this.#boundHandleEvent); + this.#boundHandleEvent = null; + } + + for (const liveFolder of this.liveFolders.values()) { + liveFolder.stop(); + } + + this.registry.clear(); + this.liveFolders.clear(); + this.dismissedItems.clear(); + + this.#isInitialized = false; + } + // Event Handling // -------------- #initEventListeners() { - lazy.ZenWindowSync.addSyncHandler(this.handleEvent.bind(this)); + Services.obs.addObserver(this, "wake_notification"); + + this.#boundHandleEvent = this.handleEvent.bind(this); + lazy.ZenWindowSync.addSyncHandler(this.#boundHandleEvent); + } + + observe(_subject, topic, _data) { + switch (topic) { + case "wake_notification": { + // Woke from sleep, re-schedule all fetch + for (const liveFolder of this.liveFolders.values()) { + liveFolder.stop(); + liveFolder.start(); + } + break; + } + } } handleEvent(aEvent) {