diff options
Diffstat (limited to 'web/script/player/track.ts')
-rw-r--r-- | web/script/player/track.ts | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/web/script/player/track.ts b/web/script/player/track.ts index c6f90b4..df7ab69 100644 --- a/web/script/player/track.ts +++ b/web/script/player/track.ts @@ -3,6 +3,7 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2023 metamuffin <metamuffin.org> */ +/// <reference lib="dom" /> import { JhlsTrackIndex, SourceTrack, TimeRange } from "./jhls.d.ts"; import { OVar } from "../jshelper/mod.ts"; import { profile_to_partial_track, track_to_content_type } from "./mediacaps.ts"; @@ -24,16 +25,22 @@ export class PlayerTrack { public profile_selector: ProfileSelector public static async new(player: Player, node_id: string, track_index: number, metadata: SourceTrack): Promise<PlayerTrack | undefined> { - const res = await fetch(`/n/${encodeURIComponent(player.node_id)}/stream?format=jhlsi&tracks=${track_index}`, { headers: { "Accept": "application/json" } }) - if (!res.ok) return player.error.value = "Cannot download node.", undefined - let index!: JhlsTrackIndex & { error: string } - try { index = await res.json() } - catch (_) { player.set_pers("Error: Failed to fetch node") } - if (index.error) return player.set_pers("server error: " + index.error), undefined + try { + const res = await fetch(`/n/${encodeURIComponent(player.node_id)}/stream?format=jhlsi&tracks=${track_index}`, { headers: { "Accept": "application/json" } }) + if (!res.ok) return player.error.value = "Cannot download index.", undefined + let index!: JhlsTrackIndex & { error: string } + try { index = await res.json() } + catch (_) { player.set_pers("Error: Failed to fetch node") } + if (index.error) return player.set_pers("server error: " + index.error), undefined - const t = new PlayerTrack(player, node_id, track_index, metadata, index) - await t.init() - return t + const t = new PlayerTrack(player, node_id, track_index, metadata, index) + await t.init() + return t + } catch (e) { + if (e instanceof TypeError) { + player.set_pers("Cannot download index: Network Error") + } else throw e + } } constructor( private player: Player, |