From b079510b4739d2d58297ebe87200e97dcbc0054e Mon Sep 17 00:00:00 2001 From: Ollie Taylor <13766232+OllieJT@users.noreply.github.com> Date: Fri, 24 Feb 2023 20:03:33 +0000 Subject: [PATCH] clamps preferences to valid values --- src/lib/context/user-preferences.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/lib/context/user-preferences.ts b/src/lib/context/user-preferences.ts index 8481387..21bd6c8 100644 --- a/src/lib/context/user-preferences.ts +++ b/src/lib/context/user-preferences.ts @@ -1,5 +1,6 @@ import { browser } from '$app/environment'; import { info, warn } from '$lib/utility/package/log'; +import clamp from 'just-clamp'; import { writable } from 'svelte/store'; export type UserPreferences = { @@ -14,8 +15,15 @@ const default_user_preferences = { const user_preference_store = writable(default_user_preferences); +function clamp_preferences(prefs: UserPreferences) { + return { + playback_rate: clamp(prefs.playback_rate, 0.5, 5), + volume: clamp(prefs.volume, 0, 1), + }; +} + function set_preference(prefs: Partial) { - user_preference_store.update((prev) => ({ ...prev, ...prefs })); + user_preference_store.update((prev) => clamp_preferences({ ...prev, ...prefs })); save(); } const USER_PREFERENCE_KEY = 'USER_PREFERENCE' as const; @@ -38,14 +46,14 @@ function load() { } const data = localStorage.getItem(USER_PREFERENCE_KEY); - if (!data || typeof data !== 'object') { + if (!data) { info('No saved user preferences found'); return; } const preferences = JSON.parse(data) as UserPreferences; - user_preference_store.update((prev) => ({ ...prev, ...preferences })); - info(`Loaded user preferences from localStorage`, data); + set_preference(preferences); + info(`Loaded user preferences from localStorage`, preferences); } function clear() {