[FIX] mail: fix ptt extension not working after worker wake up

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) <aku@odoo.com>
This commit is contained in:
tsm-odoo
2024-01-20 02:43:04 +00:00
parent 2ddc00f9af
commit cfea1ace7a
2 changed files with 11 additions and 10 deletions
@@ -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":
@@ -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"
],