]> git.r.bdr.sh - rbdr/junction/commitdiff
Merge branch 'main' into rbdr-content-script
authorRuben Beltran del Rio <redacted>
Sun, 27 Sep 2020 19:00:40 +0000 (21:00 +0200)
committerRuben Beltran del Rio <redacted>
Sun, 27 Sep 2020 19:00:40 +0000 (21:00 +0200)
extension/content_script.js [new file with mode: 0644]
extension/junction.js
extension/manifest.json

diff --git a/extension/content_script.js b/extension/content_script.js
new file mode 100644 (file)
index 0000000..a9d713d
--- /dev/null
@@ -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;
index f1a4361491d69c837b38f10f92b379eb3f54a1c7..a662f6c8f612150cca9843e57262e613e9ea7075 100644 (file)
@@ -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);
index 6ab87f43ab3e2e09f793dd3f5cbe903c823fbd82..3274b0058678d5692f3c7d59ce36491ec64b44cb 100644 (file)
@@ -21,5 +21,9 @@
       "16": "icons/action-16.png",
       "32": "icons/action-32.png"
     }
-  }
+  },
+
+  "web_accessible_resources": [
+    "sounds/tada.wav"
+  ]
 }