mail/push-to-talk-extension/background.js

89 lines
2.9 KiB
JavaScript
Raw Permalink Normal View History

2024-05-03 12:40:35 +03:00
/* global chrome */
import { throttle } from "./utils.js";
const ACTIVE_APP_ICON = "/assets/icons/active_icon.png";
const INACTIVE_APP_ICON = "/assets/icons/inactive_icon.png";
async function getIsTalkingByTabId() {
const { isTalkingByTabId = {} } = await chrome.storage.session.get();
return isTalkingByTabId;
}
chrome.tabs.onRemoved.addListener(async (tabId) => {
const isTalkingByTabId = await getIsTalkingByTabId();
delete isTalkingByTabId[tabId];
await chrome.storage.session.set({ isTalkingByTabId });
await updateAppIcon();
});
chrome.action.onClicked.addListener(function () {
chrome.tabs.create({ url: "chrome://extensions/shortcuts" });
});
async function updateAppIcon() {
const isTalkingByTabId = await getIsTalkingByTabId();
const isTalking = Object.values(isTalkingByTabId).some(Boolean);
chrome.action.setIcon({ path: isTalking ? ACTIVE_APP_ICON : INACTIVE_APP_ICON });
}
chrome.runtime.onMessage.addListener(async function (request, sender) {
const { from, type, value } = request;
if (from !== "discuss") {
return;
}
switch (type) {
case "subscribe":
{
const isTalkingByTabId = await getIsTalkingByTabId();
isTalkingByTabId[sender.tab.id] = false;
await chrome.storage.session.set({ isTalkingByTabId });
}
break;
case "unsubscribe":
{
const isTalkingByTabId = await getIsTalkingByTabId();
delete isTalkingByTabId[sender.tab.id];
await chrome.storage.session.set({ isTalkingByTabId });
await updateAppIcon();
}
break;
case "is-talking":
{
const isTalkingByTabId = await getIsTalkingByTabId();
isTalkingByTabId[sender.tab.id] = value;
await chrome.storage.session.set({ isTalkingByTabId });
await updateAppIcon();
}
break;
case "ask-is-enabled":
chrome.tabs.sendMessage(sender.tab.id, {
from: "discuss-push-to-talk",
type: "answer-is-enabled",
});
break;
}
});
async function onCommand(command) {
const isTalkingByTabId = await getIsTalkingByTabId();
for (const tabId of Object.keys(isTalkingByTabId)) {
switch (command) {
case "toggle-voice":
chrome.tabs.sendMessage(Number(tabId), {
from: "discuss-push-to-talk",
type: "toggle-voice",
});
break;
case "ptt-pressed":
chrome.tabs.sendMessage(Number(tabId), {
from: "discuss-push-to-talk",
type: "push-to-talk-pressed",
});
break;
}
}
}
chrome.commands.onCommand.addListener(throttle(onCommand, 150));