diff --git a/eslint.config.js b/eslint.config.js index 2f86e50..2c67b34 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -11,6 +11,7 @@ export default tseslint.config( tsconfigRootDir: import.meta.dirname, svelteConfig } - } + }, + ignores: ['build/', '.svelte-kit/', 'node_modules/'] } ) diff --git a/package.json b/package.json index 4d6fb5d..31c3da9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ui", - "version": "6.4.85", + "version": "6.4.86", "license": "BUSL-1.1", "private": true, "packageManager": "pnpm@9.15.5", diff --git a/src/lib/components/ui/player/options.svelte b/src/lib/components/ui/player/options.svelte index 1ae595a..517e79a 100644 --- a/src/lib/components/ui/player/options.svelte +++ b/src/lib/components/ui/player/options.svelte @@ -193,25 +193,25 @@ Playback Rate - { playbackRate = 0.5; open = false }}> + { playbackRate = 0.5; open = false }}> 0.5x - { playbackRate = 0.75; open = false }}> + { playbackRate = 0.75; open = false }}> 0.75x - { playbackRate = 1; open = false }}> + { playbackRate = 1; open = false }}> 1x - { playbackRate = 1.25; open = false }}> + { playbackRate = 1.25; open = false }}> 1.25x - { playbackRate = 1.5; open = false }}> + { playbackRate = 1.5; open = false }}> 1.5x - { playbackRate = 1.75; open = false }}> + { playbackRate = 1.75; open = false }}> 1.75x - { playbackRate = 2; open = false }}> + { playbackRate = 2; open = false }}> 2x diff --git a/src/lib/components/ui/player/player.svelte b/src/lib/components/ui/player/player.svelte index 4f86d25..2d934ad 100644 --- a/src/lib/components/ui/player/player.svelte +++ b/src/lib/components/ui/player/player.svelte @@ -77,7 +77,7 @@ let currentTime = 0 let seekPercent = 0 let duration = 1 - let playbackRate = 1 + const playbackRate = persisted('playbackRate', 1) let buffered: SvelteMediaTimeRange[] = [] let subtitleDelay = 0 $: buffer = Math.max(...buffered.map(({ end }) => end)) @@ -462,7 +462,7 @@ $: if (readyState && !seekIndex) thumbnailer._paintThumbnail(video, playbackIndex) $: native.setMediaSession(mediaInfo.session, mediaInfo.media.id, safeduration) - $: native.setPositionState({ duration: safeduration, position: Math.min(Math.max(0, currentTime), safeduration), playbackRate }, readyState === 0 ? 'none' : paused ? 'paused' : 'playing') + $: native.setPositionState({ duration: safeduration, position: Math.min(Math.max(0, currentTime), safeduration), playbackRate: $playbackRate }, readyState === 0 ? 'none' : paused ? 'paused' : 'playing') $: native.setPlayBackState(readyState === 0 ? 'none' : paused ? 'paused' : 'playing') native.setActionHandler('play', playPause) native.setActionHandler('pause', playPause) @@ -657,21 +657,21 @@ desc: 'Volume Down' }, BracketLeft: { - fn: () => { playbackRate = video.defaultPlaybackRate -= 0.1 }, + fn: () => { $playbackRate -= 0.1 }, id: 'history', icon: RotateCcw, type: 'icon', desc: 'Decrease Playback Rate' }, BracketRight: { - fn: () => { playbackRate = video.defaultPlaybackRate += 0.1 }, + fn: () => { $playbackRate += 0.1 }, id: 'update', icon: RotateCw, type: 'icon', desc: 'Increase Playback Rate' }, Backslash: { - fn: () => { playbackRate = video.defaultPlaybackRate = 1 }, + fn: () => { $playbackRate = 1 }, icon: RefreshCcw, id: 'schedule', type: 'icon', @@ -700,23 +700,25 @@ function holdToFF (document: HTMLElement, type: 'key' | 'pointer') { const ctrl = new AbortController() let timeout = 0 - let oldPlaybackRate = playbackRate + let oldPlaybackRate = $playbackRate + let wasPaused = paused const startFF = () => { clearTimeout(timeout) timeout = setTimeout(() => { if (fastForwarding) return + wasPaused = paused paused = false fastForwarding = true - oldPlaybackRate = playbackRate - playbackRate = 2 + oldPlaybackRate = $playbackRate + $playbackRate = 2 }, 1000) } const endFF = () => { clearTimeout(timeout) if (!fastForwarding) return fastForwarding = false - playbackRate = oldPlaybackRate - paused = true + $playbackRate = oldPlaybackRate + paused = wasPaused } document.addEventListener(type + 'down' as 'keydown' | 'pointerdown', event => { if (isMiniplayer) return @@ -801,7 +803,7 @@ bind:muted bind:readyState bind:buffered - bind:playbackRate + bind:playbackRate={$playbackRate} bind:volume={exponentialVolume} bind:this={video} on:click={() => isMiniplayer ? goto('/app/player') : playPause()} @@ -852,7 +854,7 @@ Subtitle delay: {subtitleDelay} sec {/if} - {#if fastForwarding}
x2
@@ -949,12 +951,12 @@
- {#if playbackRate !== 1} + {#if $playbackRate !== 1}
- x{playbackRate.toFixed(1)} + x{$playbackRate.toFixed(1)}
{/if} - + {#if subtitles}