From 29c5bc5ada9c8bf2a5cfbbdaf61c2ccea10ef15e Mon Sep 17 00:00:00 2001 From: WardPearce Date: Sun, 28 Apr 2024 20:29:00 +1200 Subject: [PATCH] Add player time sync with syncious --- materialious/src/lib/Player.svelte | 37 +++++++++++++++----- materialious/src/routes/history/+page.svelte | 10 ++++-- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/materialious/src/lib/Player.svelte b/materialious/src/lib/Player.svelte index 3be87ae7..5a0c3d27 100644 --- a/materialious/src/lib/Player.svelte +++ b/materialious/src/lib/Player.svelte @@ -8,14 +8,17 @@ import type { MediaTimeUpdateEvent, PlayerSrc } from 'vidstack'; import type { MediaPlayerElement } from 'vidstack/elements'; import { + authStore, playerAlwaysLoopStore, playerAutoPlayStore, playerDashStore, playerProxyVideosStore, playerSavePlaybackPositionStore, sponsorBlockCategoriesStore, - sponsorBlockUrlStore + sponsorBlockUrlStore, + synciousStore } from '../store'; + import { deleteVideoProgress, getVideoProgress, saveVideoProgress } from './Api'; import type { VideoPlay } from './Api/model'; import { getBestThumbnail, proxyVideoUrl, videoLength, type PhasedDescription } from './misc'; import { getDynamicTheme } from './theme'; @@ -114,8 +117,8 @@ } if (get(playerDashStore)) { - player.addEventListener('dash-can-play', () => { - loadPlayerPos(); + player.addEventListener('dash-can-play', async () => { + await loadPlayerPos(); }); src = [{ src: data.video.dashUrl + '?local=true', type: 'application/dash+xml' }]; @@ -180,10 +183,16 @@ document.documentElement.style.setProperty('--audio-bg', currentTheme['--surface']); }); - function loadPlayerPos() { + async function loadPlayerPos() { if (playerPosSet) return; playerPosSet = true; if (get(playerSavePlaybackPositionStore)) { + if (get(synciousStore) && get(authStore)) { + try { + player.currentTime = (await getVideoProgress(data.video.videoId))[0].time; + } catch {} + } + try { const playerPos = localStorage.getItem(`v_${data.video.videoId}`); if (playerPos) { @@ -196,15 +205,25 @@ function savePlayerPos() { if (data.video.hlsUrl) return; - try { - if (get(playerSavePlaybackPositionStore) && player.currentTime) { - if (player.currentTime < player.duration - 10 && player.currentTime > 10) { + if (get(playerSavePlaybackPositionStore) && player.currentTime) { + if (player.currentTime < player.duration - 10 && player.currentTime > 10) { + try { localStorage.setItem(`v_${data.video.videoId}`, player.currentTime.toString()); - } else { + } catch {} + + if (get(synciousStore) && get(authStore)) { + saveVideoProgress(data.video.videoId, player.currentTime); + } + } else { + try { localStorage.removeItem(`v_${data.video.videoId}`); + } catch {} + + if (get(synciousStore) && get(authStore)) { + deleteVideoProgress(data.video.videoId); } } - } catch {} + } } onDestroy(() => { diff --git a/materialious/src/routes/history/+page.svelte b/materialious/src/routes/history/+page.svelte index f25a721b..eaa5b567 100644 --- a/materialious/src/routes/history/+page.svelte +++ b/materialious/src/routes/history/+page.svelte @@ -1,5 +1,5 @@