From 7965bcc08e5693a981586b6194309a9d90fb43b5 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Wed, 3 Apr 2024 20:34:41 +1300 Subject: [PATCH] Prefer closest quality --- materialious/src/lib/Player.svelte | 38 +++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/materialious/src/lib/Player.svelte b/materialious/src/lib/Player.svelte index b85f73cb..1b9f5e4b 100644 --- a/materialious/src/lib/Player.svelte +++ b/materialious/src/lib/Player.svelte @@ -5,7 +5,12 @@ import { SponsorBlock, type Category } from 'sponsorblock-api'; import { onDestroy, onMount } from 'svelte'; import { get } from 'svelte/store'; - import type { MediaTimeUpdateEvent, MediaVolumeChangeEvent, PlayerSrc } from 'vidstack'; + import type { + MediaQualityChangeEvent, + MediaTimeUpdateEvent, + MediaVolumeChangeEvent, + PlayerSrc + } from 'vidstack'; import type { MediaPlayerElement } from 'vidstack/elements'; import { playerAlwaysLoop, @@ -110,6 +115,19 @@ } catch {} }); + player.addEventListener('quality-change', (event: MediaQualityChangeEvent) => { + if (!event.detail) return; + + if (player.qualities.auto) return; + + try { + localStorage.setItem( + 'preferredQuality', + player.qualities.indexOf(event.detail).toString() + ); + } catch {} + }); + if (get(sponsorBlockCategories)) { const currentCategories = get(sponsorBlockCategories); @@ -181,6 +199,24 @@ ]; } + // Have to wait for qualities to be loaded. + setTimeout(() => { + try { + const preferredQuality = localStorage.getItem('preferredQuality'); + if (preferredQuality) { + let qualityIndex = Number(preferredQuality); + + if (qualityIndex > player.qualities.length - 1) { + while (qualityIndex > player.qualities.length - 1) { + qualityIndex--; + } + } + + player.remoteControl.changeQuality(qualityIndex); + } + } catch (error) {} + }, 100); + const currentTheme = await getDynamicTheme(); document.documentElement.style.setProperty(