diff options
author | metamuffin <metamuffin@disroot.org> | 2022-09-07 11:14:42 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-09-07 11:14:42 +0200 |
commit | 61950198e3bf06555f48e8f51c882a4c3cce5128 (patch) | |
tree | a7701a44804d4a2a634f3410d400545ea82d1c45 /client-web/source/track_handle.ts | |
parent | 832f48f29098cc6f840ade90db3b94efa67c6833 (diff) | |
download | keks-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.ts | 26 |
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")) } +} |