performance improvements + oscilloscope

This commit is contained in:
Boof2015
2026-06-18 15:52:48 -04:00
parent 5853edd933
commit 9fd37c93d7
14 changed files with 907 additions and 236 deletions
+27 -2
View File
@@ -9,27 +9,45 @@ import type { ArtistGroupingMode } from '@/library/artistGrouping';
* subscribes here to recompute the artist list when the grouping mode changes.
*/
const ARTIST_GROUPING_KEY = 'artist_grouping_mode';
const SCOPE_MODE_KEY = 'scope_mode';
/** Which visualizer the now-playing scope stage shows. */
export type ScopeMode = 'spectrum' | 'scope';
function parseGroupingMode(value: string | null): ArtistGroupingMode {
return value === 'fileTags' ? 'fileTags' : 'astra';
}
function parseScopeMode(value: string | null): ScopeMode {
return value === 'scope' ? 'scope' : 'spectrum';
}
interface SettingsStore {
artistGroupingMode: ArtistGroupingMode;
scopeMode: ScopeMode;
loaded: boolean;
load: () => Promise<void>;
setArtistGroupingMode: (mode: ArtistGroupingMode) => Promise<void>;
setScopeMode: (mode: ScopeMode) => Promise<void>;
}
export const useSettingsStore = create<SettingsStore>((set, get) => ({
artistGroupingMode: 'astra',
scopeMode: 'spectrum',
loaded: false,
load: async () => {
if (get().loaded) return;
const db = await openLibraryDb();
const stored = await getSetting(db, ARTIST_GROUPING_KEY);
set({ artistGroupingMode: parseGroupingMode(stored), loaded: true });
const [grouping, scope] = await Promise.all([
getSetting(db, ARTIST_GROUPING_KEY),
getSetting(db, SCOPE_MODE_KEY),
]);
set({
artistGroupingMode: parseGroupingMode(grouping),
scopeMode: parseScopeMode(scope),
loaded: true,
});
},
setArtistGroupingMode: async (mode) => {
@@ -38,4 +56,11 @@ export const useSettingsStore = create<SettingsStore>((set, get) => ({
const db = await openLibraryDb();
await setSetting(db, ARTIST_GROUPING_KEY, mode);
},
setScopeMode: async (mode) => {
if (get().scopeMode === mode) return;
set({ scopeMode: mode });
const db = await openLibraryDb();
await setSetting(db, SCOPE_MODE_KEY, mode);
},
}));