From 5aa29d13dbfc65bf845445cca7a6f5b79d023bc1 Mon Sep 17 00:00:00 2001 From: Azalea <22280294+hykilpikonna@users.noreply.github.com> Date: Tue, 25 Nov 2025 21:17:37 +0800 Subject: [PATCH] [F] Fix settings persistence --- src/lib/ui/player/state.svelte.ts | 24 +++++++++++++++++++++++ src/routes/song/[id]/+page.svelte | 10 +++------- src/routes/song/[id]/karaoke/+page.svelte | 14 +++++-------- src/routes/song/[id]/play/+page.svelte | 22 +++++++++------------ 4 files changed, 41 insertions(+), 29 deletions(-) create mode 100644 src/lib/ui/player/state.svelte.ts diff --git a/src/lib/ui/player/state.svelte.ts b/src/lib/ui/player/state.svelte.ts new file mode 100644 index 0000000..4e8f4d8 --- /dev/null +++ b/src/lib/ui/player/state.svelte.ts @@ -0,0 +1,24 @@ +import { API } from "$lib/client" +import { typingSettingsDefault, type TypingSettings, type UserData } from "$lib/types" + +export class UserDataSync { + settings = $state(typingSettingsDefault) + loc = $state(undefined) + + constructor(data: any) { + this.settings = data.user.data?.typingSettings ?? typingSettingsDefault + this.loc = data.user.data.loc + + $effect(() => { + data.user.data = data.user.data || {} + data.user.data.typingSettings = this.settings + API.saveUserData({ typingSettings: this.settings }) + }) + + $effect(() => { + data.user.data = data.user.data || {} + data.user.data.loc = this.loc + API.saveUserData({ loc: this.loc }) + }) + } +} diff --git a/src/routes/song/[id]/+page.svelte b/src/routes/song/[id]/+page.svelte index fd0e135..85c44cd 100644 --- a/src/routes/song/[id]/+page.svelte +++ b/src/routes/song/[id]/+page.svelte @@ -6,19 +6,15 @@ import ProgressList from "$lib/ui/ProgressList.svelte" import { goto } from "$app/navigation" import { getI18n, useMsg } from "$lib/i18n" - import { typingSettingsDefault } from "$lib/types" import { getNextSong } from "$lib/ui/player/SongSwitching.js" + import { UserDataSync } from "$lib/ui/player/state.svelte" const t = getI18n().song.mode const getMsg = useMsg() let { data } = $props() - let settings = $state(data.user.data?.typingSettings ?? typingSettingsDefault) - $effect(() => { API.saveUserData({ typingSettings: settings }) }) - - let loc = $state(data.user.data.loc) - $effect(() => { API.saveUserData({ loc }) }) + const ud = new UserDataSync(data) let taskStatus = $state({ lyrics: false, @@ -89,7 +85,7 @@ } - + diff --git a/src/routes/song/[id]/karaoke/+page.svelte b/src/routes/song/[id]/karaoke/+page.svelte index 1689336..013c32c 100644 --- a/src/routes/song/[id]/karaoke/+page.svelte +++ b/src/routes/song/[id]/karaoke/+page.svelte @@ -1,13 +1,13 @@