Files
Psychotoxical-psysonic/src/store/downloadModalStore.ts
T
Psychotoxical 0e88e8a5cd feat: Replay Gain, Crossfade, Download Folder Modal, Changelog in Settings (v1.6.0)
### Audio
- Replay Gain support (track + album mode, configurable pre-gain, hard limiter)
- Crossfade between tracks (configurable duration 1–10 s)
- Gapless preloading ⚠️ experimental/alpha — enable in Settings → Playback
- Atomic sink swap: old track plays until new one is decoded, then stops cleanly

### UI / UX
- Settings redesigned with tab navigation (General, Playback, About)
- Changelog viewer in Settings → About with collapsible version entries
- Download Folder Modal: choose folder + "remember" checkbox per-download
- EQ popup now accessible directly from the Player Bar
- "Also Featured On" section on Artist pages for non-album appearances

### Fixes
- Bundle identifier changed from dev.psysonic.app → dev.psysonic.player (fixes macOS warning)
- Version sync: all four version files (package.json, Cargo.toml, tauri.conf.json, PKGBUILD) now at 1.6.0

### Known Issues
- FLAC seeking via waveform seekbar does not work (MP3/OGG unaffected) — under investigation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 20:23:17 +01:00

46 lines
1.2 KiB
TypeScript

import { create } from 'zustand';
// Module-level callback — not in Zustand state to avoid serialization issues
let _resolve: ((folder: string | null) => void) | null = null;
interface DownloadModalStore {
isOpen: boolean;
folder: string;
remember: boolean;
requestFolder: () => Promise<string | null>;
setFolder: (f: string) => void;
setRemember: (r: boolean) => void;
confirm: (setDownloadFolder: (v: string) => void) => void;
cancel: () => void;
}
export const useDownloadModalStore = create<DownloadModalStore>((set, get) => ({
isOpen: false,
folder: '',
remember: false,
requestFolder: () =>
new Promise<string | null>(resolve => {
_resolve = resolve;
set({ isOpen: true, folder: '', remember: false });
}),
setFolder: (folder) => set({ folder }),
setRemember: (remember) => set({ remember }),
confirm: (setDownloadFolder) => {
const { folder, remember } = get();
if (!folder) return;
if (remember) setDownloadFolder(folder);
_resolve?.(folder);
_resolve = null;
set({ isOpen: false });
},
cancel: () => {
_resolve?.(null);
_resolve = null;
set({ isOpen: false });
},
}));