X-Git-Url: https://git.r.bdr.sh/rbdr/junction/blobdiff_plain/db35e9e7647c1169425c6b949c7f4498a6d65f4c..4757c4616d5d7106cd023f06e5e5ba04d01bbb07:/extension/junction.js?ds=sidebyside diff --git a/extension/junction.js b/extension/junction.js index e78a02b..16bc9f3 100644 --- a/extension/junction.js +++ b/extension/junction.js @@ -1,7 +1,7 @@ const internals = { promisesSupported: !!(window.browser), - isInCallState: false, + port: null, icons: { call: { @@ -23,34 +23,59 @@ const internals = { return internals.joinAudioCall(); }, - async joinAudioCall() { + onConnect(port) { - internals.isInCallState = true; + internals.port = port; + port.onDisconnect.addListener(internals.onDisconnect); + port.onMessage.addListener(internals.onMessage); + port.postMessage({ + action: 'joinAudioCall', + data: { + tada: internals.getRoot().runtime.getURL('sounds/tada.wav') + } + }); + internals.getRoot().browserAction.enable(); internals.setIcon('hangUp'); - const activeTabs = await internals.getActiveTabs(); - - console.log(activeTabs[0].url); // placeholder while we connect backend. - internals.createAudioElement(internals.getRoot().runtime.getURL('sounds/tada.wav')); }, - hangUp() { + onMessage(message) { - document.querySelectorAll('audio').forEach((audioElement) => audioElement.remove()); + if (message.action === 'error') { + internals.getRoot().browserAction.setBadgeText({ text: 'x' }, () => {}); + } + }, + + onDisconnect() { + internals.getRoot().browserAction.setBadgeText({ text: '' }, () => {}); internals.setIcon('call'); - internals.isInCallState = false; + internals.port = null; + internals.getRoot().browserAction.enable(); }, - createAudioElement(source, type = 'audio/wav') { + async joinAudioCall() { - const audioElement = document.createElement('audio'); - audioElement.src = source; - audioElement.autoplay = 'autoplay'; - audioElement.type = type; - document.querySelector('body').appendChild(audioElement); + internals.getRoot().browserAction.disable(); + const activeTabs = await internals.getActiveTabs(); + const execution = await internals.getRoot().tabs.executeScript(activeTabs[0].id, { + file: '/content_script.js' + }); + + if (!execution[0]) { + internals.onDisconnect(); + } + }, + + hangUp() { + + internals.getRoot().browserAction.disable(); + internals.port.postMessage({ + action: 'hangUp' + }); }, isInCall() { - return internals.isInCallState; // this should be replaced with actually checking the built stuff + + return !!(internals.port); }, setIcon(iconSet) { @@ -89,3 +114,4 @@ const internals = { }; internals.getRoot().browserAction.onClicked.addListener(internals.onClick); +internals.getRoot().runtime.onConnect.addListener(internals.onConnect);