diff --git a/materialious/src/routes/(no-layout)/tv/[slug]/+page.svelte b/materialious/src/routes/(no-layout)/tv/[slug]/+page.svelte index da6fa5f5..c39321e6 100644 --- a/materialious/src/routes/(no-layout)/tv/[slug]/+page.svelte +++ b/materialious/src/routes/(no-layout)/tv/[slug]/+page.svelte @@ -15,11 +15,19 @@ let playerElement: HTMLMediaElement | undefined = $state(); let showInfo = $state(false); + let playerCurrentTime: number = $state(0); let subscribed: boolean = $state(false); data.streamed.subscribed.then((isSubbed) => (subscribed = isSubbed)); onMount(() => { + if (playerElement) { + playerElement.addEventListener('timeupdate', () => { + if (!playerElement) return; + playerCurrentTime = playerElement.currentTime; + }); + } + Mousetrap.bind('down', () => { if (showInfo) return true; @@ -99,6 +107,30 @@ + {#if data.content.timestamps.length > 0} +
{$_('player.chapters')}
+
+ {#each data.content.timestamps as timestamp} +
{ + if (playerElement) playerElement.currentTime = timestamp.time; + }} + > +
+

{timestamp.title}

+ = timestamp.time && + (playerCurrentTime <= timestamp.endTime || timestamp.endTime === -1)} + class="chip no-margin">{timestamp.timePretty} +
+
+ {/each} +
+ {/if} + {#if data.playlistId && data.playlistId in $playlistCacheStore}
{$_('playlistVideos')}