diff --git a/materialious/src/lib/Player.svelte b/materialious/src/lib/Player.svelte index 31959e61..011bcfbb 100644 --- a/materialious/src/lib/Player.svelte +++ b/materialious/src/lib/Player.svelte @@ -16,15 +16,15 @@ sponsorBlockUrl } from '../store'; import type { VideoPlay } from './Api/model'; + import { videoLength, type PhasedDescription } from './misc'; - export let data: { video: VideoPlay }; + export let data: { video: VideoPlay; content: PhasedDescription }; export let currentTime: number = 0; export let audioMode = false; let player: MediaPlayerElement; let src: PlayerSrc = []; let categoryBeingSkipped = ''; - let captions: { label: string; srcLang: string; src: string }[] = []; export function seekTo(time: number) { if (typeof player !== 'undefined') { @@ -47,6 +47,30 @@ }); } + if (data.content.timestamps) { + let chapterWebVTT = 'WEBVTT\n\n'; + + let timestampIndex = 0; + data.content.timestamps.forEach((timestamp) => { + let endTime: string; + if (timestampIndex === data.content.timestamps.length - 1) { + endTime = videoLength(data.video.lengthSeconds); + } else { + endTime = data.content.timestamps[timestampIndex + 1].timePretty; + } + + chapterWebVTT += `${timestamp.timePretty} --> ${endTime}\n${timestamp.title.replaceAll('-', '').trim()}\n\n`; + + timestampIndex += 1; + }); + + player.textTracks.add({ + kind: 'chapters', + src: URL.createObjectURL(new Blob([chapterWebVTT])), + default: true + }); + } + player.addEventListener('time-update', () => { currentTime = player.currentTime; }); diff --git a/materialious/src/lib/Thumbnail.svelte b/materialious/src/lib/Thumbnail.svelte index 84d5302a..19e97da4 100644 --- a/materialious/src/lib/Thumbnail.svelte +++ b/materialious/src/lib/Thumbnail.svelte @@ -1,18 +1,10 @@