[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:
@@ -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"
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user