mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-21 23:05:46 +00:00
fe6acdaa4c
Seven small domain-eng factories peel ~53 trivial setters out of the authStore body: - `createCacheStorageActions` — disk caches (max cache MB, download folder, offline download dir, hot-cache enable/MB/debounce/dir). - `createDiscordSettingsActions` — rich presence, cover source, Bandsintown toggle, three template strings. - `createUiAppearanceActions` — visual chrome: tray, titlebar, sidebar toggles, fullscreen-lyrics rendering, changelog banner, seekbar style, queue collapse, kinetic scroll, mini-player preload. - `createLyricsSettingsActions` — lyrics fetch pipeline (server-first, netease enablement, source order, mode, static-only). - `createTrackPreviewActions` — preview enable + per-location + start ratio (clamped 0…0.9) + duration (clamped 5…120s). - `createDiscoveryActions` — mix min-rating filters (clamped 0…3), random-mix size (snapped to allowed bucket), lucky-mix visibility, random-nav mode, infinite-queue, preserve-play-next-order. - `createPlumbingSettingsActions` — logging mode, getNowPlaying toggle, preload mode + custom seconds, audiobook exclusion, genre blacklist. Pure code-move. authStore.ts: 428 → 384 LOC (−44).
39 lines
1.5 KiB
TypeScript
39 lines
1.5 KiB
TypeScript
import { clampMixFilterMinStars, clampRandomMixSize } from './authStoreHelpers';
|
|
import type { AuthState } from './authStoreTypes';
|
|
|
|
type SetState = (
|
|
partial: Partial<AuthState> | ((state: AuthState) => Partial<AuthState>),
|
|
) => void;
|
|
|
|
/**
|
|
* Discovery + auto-queue settings: mix min-rating thresholds (each
|
|
* clamped to 0…3 stars), random-mix size (snapped to the allowed
|
|
* RANDOM_MIX_SIZE_OPTIONS bucket), lucky-mix sidebar visibility,
|
|
* random-nav style, infinite-queue + preserve-play-next-order
|
|
* toggles.
|
|
*/
|
|
export function createDiscoveryActions(set: SetState): Pick<
|
|
AuthState,
|
|
| 'setMixMinRatingFilterEnabled'
|
|
| 'setMixMinRatingSong'
|
|
| 'setMixMinRatingAlbum'
|
|
| 'setMixMinRatingArtist'
|
|
| 'setRandomMixSize'
|
|
| 'setShowLuckyMixMenu'
|
|
| 'setRandomNavMode'
|
|
| 'setInfiniteQueueEnabled'
|
|
| 'setPreservePlayNextOrder'
|
|
> {
|
|
return {
|
|
setMixMinRatingFilterEnabled: (v) => set({ mixMinRatingFilterEnabled: v }),
|
|
setMixMinRatingSong: (v) => set({ mixMinRatingSong: clampMixFilterMinStars(v) }),
|
|
setMixMinRatingAlbum: (v) => set({ mixMinRatingAlbum: clampMixFilterMinStars(v) }),
|
|
setMixMinRatingArtist: (v) => set({ mixMinRatingArtist: clampMixFilterMinStars(v) }),
|
|
setRandomMixSize: (v) => set({ randomMixSize: clampRandomMixSize(v) }),
|
|
setShowLuckyMixMenu: (v) => set({ showLuckyMixMenu: v }),
|
|
setRandomNavMode: (v) => set({ randomNavMode: v }),
|
|
setInfiniteQueueEnabled: (v) => set({ infiniteQueueEnabled: v }),
|
|
setPreservePlayNextOrder: (v) => set({ preservePlayNextOrder: v }),
|
|
};
|
|
}
|