From cfea1ace7a1b5d4da6aa7eacc86bd7e53d08ffe4 Mon Sep 17 00:00:00 2001 From: tsm-odoo Date: Fri, 19 Jan 2024 11:43:01 +0100 Subject: [PATCH] [FIX] mail: fix ptt extension not working after worker wake up MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Ptt extension makes use of the `chrome.session` API to keep track of the connected clients. Before this PR, the session storage was initialized at the top level of the background script. This is an issue since it will be executed after the service worker wake up thus overwriting the existing client map. This PR removes this closes odoo/odoo#150084 Initialization: the map will be created when needed instead. Signed-off-by: Alexandre Kühn (aku) --- .../mail/push-to-talk-extension/background.js | 19 ++++++++++--------- .../mail/push-to-talk-extension/manifest.json | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/addons/mail/push-to-talk-extension/background.js b/addons/mail/push-to-talk-extension/background.js index 26c78dbf403..cc635a0ee5f 100644 --- a/addons/mail/push-to-talk-extension/background.js +++ b/addons/mail/push-to-talk-extension/background.js @@ -5,12 +5,13 @@ import { throttle } from "./utils.js"; const ACTIVE_APP_ICON = "/assets/icons/active_icon.png"; const INACTIVE_APP_ICON = "/assets/icons/inactive_icon.png"; -// ServiceWorker can be terminated at any time, storage session is -// used to ensure local state is not lost. -chrome.storage.session.set({ isTalkingByTabId: {} }); +async function getIsTalkingByTabId() { + const { isTalkingByTabId = {} } = await chrome.storage.session.get(); + return isTalkingByTabId; +} chrome.tabs.onRemoved.addListener(async (tabId) => { - const { isTalkingByTabId } = await chrome.storage.session.get(); + const isTalkingByTabId = await getIsTalkingByTabId(); delete isTalkingByTabId[tabId]; await chrome.storage.session.set({ isTalkingByTabId }); await updateAppIcon(); @@ -21,7 +22,7 @@ chrome.action.onClicked.addListener(function () { }); async function updateAppIcon() { - const { isTalkingByTabId } = await chrome.storage.session.get(); + const isTalkingByTabId = await getIsTalkingByTabId(); const isTalking = Object.values(isTalkingByTabId).some(Boolean); chrome.action.setIcon({ path: isTalking ? ACTIVE_APP_ICON : INACTIVE_APP_ICON }); } @@ -34,14 +35,14 @@ chrome.runtime.onMessage.addListener(async function (request, sender) { switch (type) { case "subscribe": { - const { isTalkingByTabId } = await chrome.storage.session.get(); + const isTalkingByTabId = await getIsTalkingByTabId(); isTalkingByTabId[sender.tab.id] = false; await chrome.storage.session.set({ isTalkingByTabId }); } break; case "unsubscribe": { - const { isTalkingByTabId } = await chrome.storage.session.get(); + const isTalkingByTabId = await getIsTalkingByTabId(); delete isTalkingByTabId[sender.tab.id]; await chrome.storage.session.set({ isTalkingByTabId }); await updateAppIcon(); @@ -49,7 +50,7 @@ chrome.runtime.onMessage.addListener(async function (request, sender) { break; case "is-talking": { - const { isTalkingByTabId } = await chrome.storage.session.get(); + const isTalkingByTabId = await getIsTalkingByTabId(); isTalkingByTabId[sender.tab.id] = value; await chrome.storage.session.set({ isTalkingByTabId }); await updateAppIcon(); @@ -65,7 +66,7 @@ chrome.runtime.onMessage.addListener(async function (request, sender) { }); async function onCommand(command) { - const { isTalkingByTabId } = await chrome.storage.session.get(); + const isTalkingByTabId = await getIsTalkingByTabId(); for (const tabId of Object.keys(isTalkingByTabId)) { switch (command) { case "toggle-voice": diff --git a/addons/mail/push-to-talk-extension/manifest.json b/addons/mail/push-to-talk-extension/manifest.json index 1c6038c777e..a7318d9ad7d 100644 --- a/addons/mail/push-to-talk-extension/manifest.json +++ b/addons/mail/push-to-talk-extension/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "Discuss Push-to-talk", "description": "Empowers Odoo Discuss with system-wide Push-to-Talk", - "version": "1.0.0.0", + "version": "1.0.0.1", "permissions": [ "storage" ],