]> git.r.bdr.sh - rbdr/junction/blobdiff - extension/junction.js
Fixes
[rbdr/junction] / extension / junction.js
index 7de7c28012e5f8781f5fca622402745c48a7f17a..73befa209a8d34d2bae7657d1b61b8478fc20a1f 100644 (file)
@@ -1,5 +1,8 @@
+const io = require('socket.io-client');
+
 const internals = {
 
+  promisesSupported: !!(window.browser),
   isInCallState: false,
 
   icons: {
@@ -14,6 +17,10 @@ const internals = {
     }
   },
 
+  socket: null,
+
+  peers: 0,
+
   onClick() {
     if (internals.isInCall()) {
       return internals.hangUp();
@@ -26,26 +33,58 @@ const internals = {
 
     internals.isInCallState = true;
     internals.setIcon('hangUp');
-    const tabs = await browser.tabs.query({
-      currentWindow: true,
-      active: true
+    const activeTabs = await internals.getActiveTabs();
+
+    const socketUrl = 'http://localhost:8000/';
+    const currentUrl = activeTabs[0].url;
+
+    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");
+    });
+
+    this.socket.on('addPeer', function(data) {
+      console.log(data);
+      that.peers++;
+      console.log(`There are now ${that.peers} participants`);
+    });
+
+    this.socket.on('removePeer', function() {
+      that.peers--;
+      console.log(`There are now ${that.peers} participants`);
     });
 
-    internals.createAudioElement(browser.runtime.getURL('sounds/tada.wav'));
+    console.log(activeTabs[0].url); // placeholder while we connect backend.
+    internals.createAudioElement(internals.getRoot().runtime.getURL('sounds/tada.wav'));
   },
 
   hangUp() {
+    this.socket.close();
+
+
 
     document.querySelectorAll('audio').forEach((audioElement) => audioElement.remove());
     internals.setIcon('call');
     internals.isInCallState = false;
   },
 
-  createAudioElement(source) {
+  createAudioElement(source, type = 'audio/wav') {
 
     const audioElement = document.createElement('audio');
     audioElement.src = source;
     audioElement.autoplay = 'autoplay';
+    audioElement.type = type;
     document.querySelector('body').appendChild(audioElement);
   },
 
@@ -55,10 +94,37 @@ const internals = {
 
   setIcon(iconSet) {
 
-    browser.browserAction.setIcon({
+    internals.getRoot().browserAction.setIcon({
       path: internals.icons[iconSet]
     });
-  }
+  },
+
+  getRoot() {
+
+    return window.browser || window.chrome;
+  },
+
+  // Chrome doesn't yet implement the promise based tabs.query :'(
+
+  getActiveTabs() {
+
+    const query = {
+      currentWindow: true,
+      active: true
+    };
+
+    if (internals.promisesSupported) {
+      return internals.getRoot().tabs.query(query);
+    }
+
+    return new Promise((resolve, reject) => {
+
+      internals.getRoot().tabs.query(query, (tabs) => {
+
+        return resolve(tabs);
+      });
+    });
+  },
 };
 
-browser.browserAction.onClicked.addListener(internals.onClick);
+internals.getRoot().browserAction.onClicked.addListener(internals.onClick);