X-Git-Url: https://git.r.bdr.sh/rbdr/junction/blobdiff_plain/344f7c1320d512a423c9f2133959417823f5cc83..6a3568bc5942423b93ba2749036489ad9e38e7cf:/extension/junction.js diff --git a/extension/junction.js b/extension/junction.js index bb2d3e5..889e23f 100644 --- a/extension/junction.js +++ b/extension/junction.js @@ -1,9 +1,8 @@ -const io = require('socket.io-client'); - const internals = { promisesSupported: !!(window.browser), - isInCallState: false, + port: null, + currentUrl: null, icons: { call: { @@ -17,10 +16,6 @@ const internals = { } }, - socket: null, - - peers: 0, - onClick() { if (internals.isInCall()) { return internals.hangUp(); @@ -29,60 +24,69 @@ const internals = { return internals.joinAudioCall(); }, - async joinAudioCall() { - - internals.isInCallState = true; + onConnect(port) { + + internals.port = port; + port.onDisconnect.addListener(internals.onDisconnect); + port.onMessage.addListener(internals.onMessage); + port.postMessage({ + action: 'joinAudioCall', + data: { + currentUrl: internals.currentUrl, + tada: internals.getRoot().runtime.getURL('sounds/tada.wav') + } + }); + internals.getRoot().browserAction.enable(); internals.setIcon('hangUp'); - const activeTabs = await internals.getActiveTabs(); + }, - const socketUrl = 'http://polypropylene.website:8000'; - const currentUrl = activeTabs[0].url; + onMessage(message) { - this.socket = io(socketUrl); + if (message.action === 'error') { + internals.getRoot().browserAction.setBadgeText({ text: 'x' }, () => {}); + } + }, - this.socket.on('connect', function() { - console.log("Connected to signaling server"); - }); + onDisconnect() { + internals.getRoot().browserAction.setBadgeText({ text: '' }, () => {}); + internals.setIcon('call'); + internals.currentUrl = null; + internals.port = null; + internals.getRoot().browserAction.enable(); + }, - this.socket.on('disconnect', function() { - console.log("disconnected from signaling server"); - }); + async joinAudioCall() { - this.socket.on('addPeer', function() { - this.peers++; - console.log(`There are now ${this.peers} participants`); - }); + 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' + }, () => { - this.socket.on('removePeer', function() { - this.peers--; - console.log(`There are now ${this.peers} participants`); + if (internals.getRoot().runtime.lastError) { + internals.onDisconnect(); + } }); - console.log(activeTabs[0].url); // placeholder while we connect backend. - internals.createAudioElement(internals.getRoot().runtime.getURL('sounds/tada.wav')); - }, + if (execution && !execution[0]) { + internals.onDisconnect(); + } + } + , hangUp() { - this.socket.close(); - - - document.querySelectorAll('audio').forEach((audioElement) => audioElement.remove()); - internals.setIcon('call'); - internals.isInCallState = false; - }, - - createAudioElement(source, type = 'audio/wav') { - - const audioElement = document.createElement('audio'); - audioElement.src = source; - audioElement.autoplay = 'autoplay'; - audioElement.type = type; - document.querySelector('body').appendChild(audioElement); + 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) { @@ -110,7 +114,7 @@ const internals = { return internals.getRoot().tabs.query(query); } - return new Promise((resolve, reject) => { + return new Promise((resolve) => { internals.getRoot().tabs.query(query, (tabs) => { @@ -121,3 +125,4 @@ const internals = { }; internals.getRoot().browserAction.onClicked.addListener(internals.onClick); +internals.getRoot().runtime.onConnect.addListener(internals.onConnect);