diff options
Diffstat (limited to 'client-web/source/resource')
-rw-r--r-- | client-web/source/resource/file.ts | 23 | ||||
-rw-r--r-- | client-web/source/resource/mod.ts | 74 |
2 files changed, 16 insertions, 81 deletions
diff --git a/client-web/source/resource/file.ts b/client-web/source/resource/file.ts index d76961d..6cf3ff6 100644 --- a/client-web/source/resource/file.ts +++ b/client-web/source/resource/file.ts @@ -1,4 +1,12 @@ +/* + This file is part of keks-meet (https://codeberg.org/metamuffin/keks-meet) + which is licensed under the GNU Affero General Public License (version 3); see /COPYING. + Copyright (C) 2022 metamuffin <metamuffin@disroot.org> +*/ +/// <reference lib="dom" /> + import { ebutton, ediv, espan, sleep } from "../helper.ts"; +import { log } from "../logger.ts"; import { LocalResource, ResourceHandlerDecl } from "./mod.ts"; export const resource_file: ResourceHandlerDecl = { @@ -28,13 +36,13 @@ export const resource_file: ResourceHandlerDecl = { this.el.appendChild(display.el) channel.onopen = _ev => { - console.log(`${user.display_name}: channel open`); + log("dc", `${user.display_name}: channel open`); } channel.onerror = _ev => { - console.log(`${user.display_name}: channel error`); + log("dc", `${user.display_name}: channel error`); } channel.onclose = _ev => { - console.log(`${user.display_name}: channel closed`); + log("dc", `${user.display_name}: channel closed`); const a = document.createElement("a") a.href = URL.createObjectURL(new Blob([buffer], { type: "text/plain" })) a.download = info.label ?? "file" @@ -99,12 +107,13 @@ function file_res_inner(file: File): LocalResource { display.status = `Draining buffers… (buffer: ${channel.bufferedAmount})` await sleep(10) } + display.status = "Waiting for the channel to close…" return channel.close() } const feed = async () => { const { value: chunk, done } = await reader.read() - if (!chunk) console.warn("no chunk"); if (done) return await finish() + if (!chunk) console.warn("no chunk"); position += chunk.length channel.send(chunk) display.status = `${position} / ${file.size} (buffer: ${channel.bufferedAmount})` @@ -119,17 +128,17 @@ function file_res_inner(file: File): LocalResource { channel.onbufferedamountlow = () => feed_until_full() channel.onopen = _ev => { display.status = "Buffering…" - console.log(`${user.display_name}: channel open`); + log("dc", `${user.display_name}: channel open`); feed_until_full() } channel.onerror = _ev => { - console.log(`${user.display_name}: channel error`); + log("dc", `${user.display_name}: channel error`); } channel.onclosing = _ev => { display.status = "Channel closing…" } channel.onclose = _ev => { - console.log(`${user.display_name}: channel closed`); + log("dc", `${user.display_name}: channel closed`); transfers_el.removeChild(display.el) } return channel diff --git a/client-web/source/resource/mod.ts b/client-web/source/resource/mod.ts index a213d87..c6e51f5 100644 --- a/client-web/source/resource/mod.ts +++ b/client-web/source/resource/mod.ts @@ -11,80 +11,6 @@ import { RemoteUser } from "../user/remote.ts" import { resource_file } from "./file.ts"; import { resource_track } from "./track.ts"; -// export abstract class Resource extends EventTarget { -// abstract transport_method: TransportMethod -// local: boolean -// el: HTMLElement = ediv({ class: ["channel"] }) -// inner_el?: HTMLElement - -// constructor( -// public user: User, -// public info: ProvideInfo, -// ) { -// super() -// this.local = this.user instanceof LocalUser -// const button = document.createElement("button") -// button.onclick = () => { -// this.state == "enabled" ? this.request_stop() : this.request() -// } -// this.addEventListener("statechange", () => { -// if (this.local) button.textContent = "End", button.disabled = false -// else if (this.state == "enabled") button.textContent = "Disable", button.disabled = false -// else if (this.state == "disabled") button.textContent = `Enable ${this.info.kind}`, button.disabled = false -// else button.textContent = "Working…", button.disabled = true; -// }) -// this.dispatchEvent(new CustomEvent("statechange")) -// this.el.append(button) -// } - -// static create(user: User, info: ProvideInfo): Resource { -// } - -// private _state: ChannelState = "disabled" -// get state() { return this._state } -// set state(value: ChannelState) { -// const old_value = this._state -// this._state = value -// if (value != old_value) this.dispatchEvent(new CustomEvent("statechange")) -// } - -// private _channel?: TrackHandle | RTCDataChannel -// get channel() { return this._channel } -// set channel(value: TrackHandle | RTCDataChannel | undefined) { -// const handle_end = () => { -// this.channel = undefined -// this.state = "disabled" -// this.inner_el?.remove() -// if (this.user instanceof LocalUser) this.destroy() -// } -// this._channel?.removeEventListener("ended", handle_end) -// this._channel = value -// if (value) this.el.append(this.inner_el = this.on_channel(value)) -// if (value) this.state = "enabled" -// else this.state = "disabled" -// this._channel?.addEventListener("ended", handle_end) -// } - -// abstract on_channel(channel: TrackHandle | RTCDataChannel): HTMLElement -// abstract on_request(): void; - -// destroy() { this.dispatchEvent(new CustomEvent("destroy")) } - -// request() { -// if (!(this.user instanceof RemoteUser)) return -// this.state = "await_enable" -// this.user.send_to({ request: { id: this.info.id } }) -// } -// request_stop() { -// if (this.user instanceof RemoteUser) { -// this.state = "await_disable" -// this.user.send_to({ request_stop: { id: this.info.id } }) -// } else if (this.user instanceof LocalUser) { -// this.destroy() -// } -// } -// } - export type TransportMethod = "data-channel" | "track" export type RemoteResourceState = "connected" | "disconnected" | "await_connect" | "await_disconnect" export interface ResourceHandlerDecl { |