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" ],