diff options
Diffstat (limited to 'web')
-rw-r--r-- | web/script/player/jhls.d.ts | 5 | ||||
-rw-r--r-- | web/script/player/player.ts | 22 |
2 files changed, 25 insertions, 2 deletions
diff --git a/web/script/player/jhls.d.ts b/web/script/player/jhls.d.ts index 9938365..2be6999 100644 --- a/web/script/player/jhls.d.ts +++ b/web/script/player/jhls.d.ts @@ -90,3 +90,8 @@ export interface EncodingProfile { codec: string, }, } + +export interface NodeUserData { + watched: WatchedState +} +export type WatchedState = "none" | "watched" | "pending" | { progress: number } diff --git a/web/script/player/player.ts b/web/script/player/player.ts index f31a43b..a92ab4b 100644 --- a/web/script/player/player.ts +++ b/web/script/player/player.ts @@ -5,10 +5,11 @@ */ /// <reference lib="dom" /> import { OVar, e } from "../jshelper/mod.ts"; -import { NodePublic, SourceTrack, TimeRange } from "./jhls.d.ts"; +import { NodePublic, NodeUserData, SourceTrack, TimeRange } from "./jhls.d.ts"; import { SegmentDownloader } from "./download.ts"; import { PlayerTrack } from "./track.ts"; import { Logger } from "../jshelper/src/log.ts"; +import { WatchedState } from "./jhls.d.ts"; export interface BufferRange extends TimeRange { status: "buffered" | "loading" | "queued" } export class Player { @@ -88,6 +89,15 @@ export class Player { try { metadata = await res.json() } catch (_) { this.set_pers("Error: Failed to fetch node") } if (metadata.error) return this.set_pers("server error: " + metadata.error) + + this.set_pers("Loading node user data...") + const udres = await fetch(`/n/${encodeURIComponent(this.node_id)}/userdata`, { headers: { "Accept": "application/json" } }) + if (!udres.ok) return this.error.value = "Cannot download node." + let userdata!: NodeUserData & { error: string } + try { userdata = await udres.json() } + catch (_) { this.set_pers("Error: Failed to fetch node") } + if (userdata.error) return this.set_pers("server error: " + metadata.error) + this.set_pers() this.tracks = metadata.media!.tracks @@ -97,8 +107,12 @@ export class Player { this.set_pers("Downloading track indecies...") await this.set_track_enabled(0, true, false) await this.set_track_enabled(1, true, false) + this.set_pers("Downloading initial segments...") - this.update() + const start_time = get_continue_time(userdata.watched); + this.update(start_time) + this.video.currentTime = start_time + await this.canplay.wait_for(true) this.set_pers() }) @@ -137,3 +151,7 @@ export class Player { } } +function get_continue_time(w: WatchedState): number { + if (typeof w == "string") return 0 + else return w.progress +} |