]> git.r.bdr.sh - rbdr/junction/commitdiff
Add media and peer objects
authorRuben Beltran del Rio <redacted>
Wed, 7 Oct 2020 19:40:15 +0000 (21:40 +0200)
committerRuben Beltran del Rio <redacted>
Wed, 7 Oct 2020 19:40:15 +0000 (21:40 +0200)
extension/media.js [new file with mode: 0644]
extension/peers.js [new file with mode: 0644]

diff --git a/extension/media.js b/extension/media.js
new file mode 100644 (file)
index 0000000..33c6fee
--- /dev/null
@@ -0,0 +1,29 @@
+'use strict';
+
+const internals = {
+  mediaStream: null
+};
+
+module.exports = {
+  async start() {
+
+    internals.mediaStream = internals.mediaStream || await navigator.mediaDevices.getUserMedia({
+      audio: true
+    });
+
+    return internals.mediaStream;
+  },
+
+  stop() {
+
+    if (!internals.mediaStream) {
+      return;
+    }
+
+    for (const track of internals.mediaStream.getAudioTracks()) {
+      track.stop();
+    }
+
+    internals.mediaStream = null;
+  }
+};
diff --git a/extension/peers.js b/extension/peers.js
new file mode 100644 (file)
index 0000000..41155d4
--- /dev/null
@@ -0,0 +1,41 @@
+'use strict';
+
+const internals = {
+  peers: {},
+
+  createAudioElement(source) {
+
+    const audioElement = document.createElement('audio');
+    audioElement.setAttribute('class', 'junction-call-audio');
+    audioElement.src = source;
+    audioElement.autoplay = 'autoplay';
+    document.querySelector('body').appendChild(audioElement);
+
+    return audioElement;
+  }
+};
+
+module.exports = {
+  add(id, url) {
+
+    internals.peers[id] && this.remove(id);
+    internals.peers[id] = internals.createAudioElement(url)
+  },
+
+  remove(id) {
+
+    internals.peers[id] && internals.peers[id].remove();
+    delete internals.peers[id];
+  },
+
+  count() {
+
+    return Object.keys(internals.peers).length;
+  },
+
+  reset() {
+
+    internals.peers = {};
+    document.querySelectorAll('.junction-call-audio').forEach((audioElement) => audioElement.remove());
+  }
+};