--- /dev/null
+(() => {
+
+ 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;
-const io = require('socket.io-client');
-
const internals = {
promisesSupported: !!(window.browser),
- isInCallState: false,
+ port: null,
icons: {
call: {
}
},
- socket: null,
-
- peers: 0,
-
onClick() {
if (internals.isInCall()) {
return internals.hangUp();
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) {
};
internals.getRoot().browserAction.onClicked.addListener(internals.onClick);
+internals.getRoot().runtime.onConnect.addListener(internals.onConnect);