summaryrefslogtreecommitdiff
path: root/client-web/source/track_handle.ts
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-09-07 11:14:42 +0200
committermetamuffin <metamuffin@disroot.org>2022-09-07 11:14:42 +0200
commit61950198e3bf06555f48e8f51c882a4c3cce5128 (patch)
treea7701a44804d4a2a634f3410d400545ea82d1c45 /client-web/source/track_handle.ts
parent832f48f29098cc6f840ade90db3b94efa67c6833 (diff)
downloadkeks-meet-61950198e3bf06555f48e8f51c882a4c3cce5128.tar
keks-meet-61950198e3bf06555f48e8f51c882a4c3cce5128.tar.bz2
keks-meet-61950198e3bf06555f48e8f51c882a4c3cce5128.tar.zst
REFACTOR! pt.1
Diffstat (limited to 'client-web/source/track_handle.ts')
-rw-r--r--client-web/source/track_handle.ts26
1 files changed, 26 insertions, 0 deletions
diff --git a/client-web/source/track_handle.ts b/client-web/source/track_handle.ts
new file mode 100644
index 0000000..98b2b2f
--- /dev/null
+++ b/client-web/source/track_handle.ts
@@ -0,0 +1,26 @@
+/// <reference lib="dom" />
+
+export class TrackHandle extends EventTarget {
+ constructor(
+ public track: MediaStreamTrack,
+ public local = false
+ ) {
+ super()
+ track.onended = () => this.dispatchEvent(new CustomEvent("ended"))
+ // TODO research how onmute and onunmute behave
+ track.onmute = () => this.dispatchEvent(new CustomEvent("ended")) // onmute seems to be called when the remote ends the track
+ track.onunmute = () => this.dispatchEvent(new CustomEvent("started"))
+
+ this.addEventListener("ended", () => {
+ // drop all references to help gc
+ track.onunmute = track.onmute = track.onended = null
+ })
+ }
+
+ get kind() { return this.track.kind }
+ get label() { return this.track.label }
+ get muted() { return this.track.muted }
+ get id() { return this.track.id }
+
+ end() { this.track.stop(); this.dispatchEvent(new CustomEvent("ended")) }
+}