X-Git-Url: https://git.r.bdr.sh/rbdr/junction/blobdiff_plain/b9a2baf2a7c957089e63844b857e05c07b87c2fb..650c5f155e98dc8428ab617a535541736c9dd08f:/extension/junction.js?ds=sidebyside diff --git a/extension/junction.js b/extension/junction.js index 3e8b4d9..1d5f8a5 100644 --- a/extension/junction.js +++ b/extension/junction.js @@ -1,5 +1,6 @@ const internals = { promisesSupported: !!window.browser, + injectedScript: {}, port: null, currentUrl: null, @@ -20,14 +21,11 @@ const internals = { return internals.hangUp(); } - return internals.joinAudioCall(); + return internals.initializeContentScript(); }, - onConnect(port) { - internals.port = port; - port.onDisconnect.addListener(internals.onDisconnect); - port.onMessage.addListener(internals.onMessage); - port.postMessage({ + joinAudioCall() { + internals.port.postMessage({ action: "joinAudioCall", data: { currentUrl: internals.currentUrl, @@ -38,6 +36,13 @@ const internals = { internals.setIcon("hangUp"); }, + onConnect(port) { + internals.port = port; + port.onDisconnect.addListener(internals.onDisconnect); + port.onMessage.addListener(internals.onMessage); + internals.joinAudioCall(); + }, + onMessage(message) { if (message.action === "error") { internals.getRoot().browserAction.setBadgeText({ text: "x" }, () => {}); @@ -52,27 +57,31 @@ const internals = { internals.getRoot().browserAction.enable(); }, - async joinAudioCall() { + async initializeContentScript() { internals.getRoot().browserAction.disable(); const activeTabs = await internals.getActiveTabs(); internals.currentUrl = activeTabs[0].url; - const execution = await internals.getRoot().tabs.executeScript( - activeTabs[0].id, - { - file: "/build/content_script.js", - }, - () => { - if (internals.getRoot().runtime.lastError) { - internals.onDisconnect(); - } - }, - ); - - if (execution && !execution[0]) { - internals.onDisconnect(); + const id = activeTabs[0].id; + if (!internals.injectedScript[id]) { + const execution = await internals.getRoot().tabs.executeScript( + activeTabs[0].id, + { + file: "/build/content_script.js", + }, + () => { + internals.injectedScript[id] = true; + }, + ); + + if (execution && !execution[0]) { + internals.onDisconnect(); + } + } else { + internals.getRoot().tabs.connect(activeTabs[0].id); } }, + hangUp() { internals.getRoot().browserAction.disable(); internals.port.postMessage({