From: Ruben Beltran del Rio Date: Sun, 27 Sep 2020 19:00:40 +0000 (+0200) Subject: Merge branch 'main' into rbdr-content-script X-Git-Url: https://git.r.bdr.sh/rbdr/junction/commitdiff_plain/d4fb48eb3793a93a8726652692b68592333dd778?hp=90b43ea817f95364b429c4b55a565634b3d59638 Merge branch 'main' into rbdr-content-script --- diff --git a/extension/content_script.js b/extension/content_script.js new file mode 100644 index 0000000..a9d713d --- /dev/null +++ b/extension/content_script.js @@ -0,0 +1,84 @@ +(() => { + + const io = require('socket.io-client'); + + const internals = { + + kSocketUrl: 'http://unlimited.pizza:8000/', + + port: null, + socket: null, + peers: 0, + + onMessage(message) { + internals[message.action](message.data); + }, + + async joinAudioCall(data) { + + try { + const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true }); + + internals.socket = io(socketUrl); + + internals.socket.on('connect', function() { + + console.log("Connected to signaling server"); + internals.socket.emit('join', { + 'url': currentUrl, + }); + }); + + internals.socket.on('disconnect', function() { + + console.log("disconnected from signaling server"); + }); + + internals.socket.on('addPeer', function(data) { + + console.log(data); + internals.peers++; + console.log(`There are now ${internals.peers} participants`); + }); + + internals.socket.on('removePeer', function() { + + internals.peers--; + console.log(`There are now ${internals.peers} participants`); + }); + + internals.createAudioElement(data.tada); + } + catch (err) { + + internals.port.postMessage({ + action: 'error' + }); + internals.port.disconnect(); + internals.createAudioElement(data.tada); + } + }, + + hangUp() { + document.querySelectorAll('.junction-call-audio').forEach((audioElement) => audioElement.remove()); + internals.socket.close(); + internals.port.disconnect(); + }, + + createAudioElement(source, type = 'audio/wav') { + + const audioElement = document.createElement('audio'); + audioElement.setAttribute('class', 'junction-call-audio'); + audioElement.src = source; + audioElement.autoplay = 'autoplay'; + audioElement.type = type; + document.querySelector('body').appendChild(audioElement); + } + }; + + internals.port = chrome.runtime.connect({ name:"content" }); + internals.port.onMessage.addListener(internals.onMessage); +})(); + +// Indicates to the background script that we executed correctly +true; diff --git a/extension/junction.js b/extension/junction.js index f1a4361..a662f6c 100644 --- a/extension/junction.js +++ b/extension/junction.js @@ -1,9 +1,7 @@ -const io = require('socket.io-client'); - const internals = { promisesSupported: !!(window.browser), - isInCallState: false, + port: null, icons: { call: { @@ -17,10 +15,6 @@ const internals = { } }, - socket: null, - - peers: 0, - onClick() { if (internals.isInCall()) { return internals.hangUp(); @@ -29,67 +23,61 @@ const internals = { return internals.joinAudioCall(); }, - async joinAudioCall() { - - internals.isInCallState = true; - internals.setIcon('hangUp'); - const activeTabs = await internals.getActiveTabs(); - - const socketUrl = 'http://unlimited.pizza:8000/'; - const currentUrl = activeTabs[0].url; + onConnect(port) { - this.socket = io(socketUrl); - - var that = this; - - this.socket.on('connect', function() { - console.log("Connected to signaling server"); - - that.socket.emit('join', { - 'url': currentUrl, - }); - }); - - this.socket.on('disconnect', function() { - console.log("disconnected from signaling server"); + 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'); + }, - this.socket.on('addPeer', function(data) { - console.log(data); - that.peers++; - console.log(`There are now ${that.peers} participants`); - }); + onMessage(message) { - this.socket.on('removePeer', function() { - that.peers--; - console.log(`There are now ${that.peers} participants`); - }); + if (message.action === 'error') { + internals.getRoot().browserAction.setBadgeText({ text: 'x' }, () => {}); + } + }, - console.log(activeTabs[0].url); // placeholder while we connect backend. - internals.createAudioElement(internals.getRoot().runtime.getURL('sounds/tada.wav')); + onDisconnect() { + internals.getRoot().browserAction.setBadgeText({ text: '' }, () => {}); + internals.setIcon('call'); + internals.port = null; + internals.getRoot().browserAction.enable(); }, - hangUp() { - this.socket.close(); + async joinAudioCall() { + internals.getRoot().browserAction.disable(); + const activeTabs = await internals.getActiveTabs(); + const execution = await internals.getRoot().tabs.executeScript(activeTabs[0].id, { + file: '/content_script.js' + }); - document.querySelectorAll('audio').forEach((audioElement) => audioElement.remove()); - internals.setIcon('call'); - internals.isInCallState = false; - }, + if (!execution || !execution[0]) { + internals.onDisconnect(); + } + } + , - createAudioElement(source, type = 'audio/wav') { + hangUp() { - 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) { @@ -128,3 +116,4 @@ const internals = { }; internals.getRoot().browserAction.onClicked.addListener(internals.onClick); +internals.getRoot().runtime.onConnect.addListener(internals.onConnect); diff --git a/extension/manifest.json b/extension/manifest.json index 6ab87f4..3274b00 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -21,5 +21,9 @@ "16": "icons/action-16.png", "32": "icons/action-32.png" } - } + }, + + "web_accessible_resources": [ + "sounds/tada.wav" + ] }