diff options
Diffstat (limited to 'client-web/source/resource/track.ts')
-rw-r--r-- | client-web/source/resource/track.ts | 67 |
1 files changed, 21 insertions, 46 deletions
diff --git a/client-web/source/resource/track.ts b/client-web/source/resource/track.ts index 8cdf6eb..1ae6f94 100644 --- a/client-web/source/resource/track.ts +++ b/client-web/source/resource/track.ts @@ -6,71 +6,46 @@ /// <reference lib="dom" /> import { ProvideInfo } from "../../../common/packets.d.ts"; -import { ebutton } from "../helper.ts"; import { TrackHandle } from "../track_handle.ts"; -import { LocalUser } from "../user/local.ts"; import { User } from "../user/mod.ts"; import { Resource } from "./mod.ts"; export class TrackResource extends Resource { - private _track?: TrackHandle constructor(user: User, info: ProvideInfo, track?: TrackHandle) { super(user, info) this.track = track } - get track() { return this._track } - set track(value: TrackHandle | undefined) { - const handle_end = () => { - this.track = undefined - if (this.user instanceof LocalUser) this.destroy() - } - this._track?.removeEventListener("ended", handle_end) - this._track = value - this._track?.addEventListener("ended", handle_end) - this.update_el() - } - destroy() { this.track?.end() super.destroy() } - create_element() { + on_track(track: TrackHandle): HTMLElement { const el = document.createElement("div") - if (!this.track?.local) { - el.append(ebutton(`${this.track ? "Disable" : "Enable"} ${this.info.kind}`, { - onclick: (e) => { - (e as HTMLButtonElement).disabled = true; - this.track ? this.request_stop() : this.request() - } - })) - } - if (this.track) { - const is_video = this.track.kind == "video" - const media_el = is_video ? document.createElement("video") : document.createElement("audio") - const stream = new MediaStream([this.track.track]) - media_el.srcObject = stream - media_el.classList.add("media") - media_el.autoplay = true - media_el.controls = true - if (this.track.local) media_el.muted = true - el.append(media_el) + const is_video = track.kind == "video" + const media_el = is_video ? document.createElement("video") : document.createElement("audio") + const stream = new MediaStream([track.track]) + media_el.srcObject = stream + media_el.classList.add("media") + media_el.autoplay = true + media_el.controls = true + if (track.local) media_el.muted = true + el.append(media_el) - if (this.track.local) { - const end_button = document.createElement("button") - end_button.textContent = "End" - end_button.addEventListener("click", () => { - this.track?.end() - }) - el.append(end_button) - } - this.el.append(el) - this.track.addEventListener("ended", () => { - media_el.srcObject = null // TODO - el.remove() + if (track.local) { + const end_button = document.createElement("button") + end_button.textContent = "End" + end_button.addEventListener("click", () => { + track?.end() }) + el.append(end_button) } + this.el.append(el) + track.addEventListener("ended", () => { + media_el.srcObject = null // TODO + el.remove() + }) return el } }
\ No newline at end of file |