Summary
Merge the latest dev work into main, including the React import-page migration, album-bundle download fixes, MusicBrainz release variant handling, Downloads tab persistence, and several UI/UX refinements.
What Changed
- Migrated the Import page to the React route stack with dedicated album, singles, and auto-import tabs.
- Added richer import-page state management, API helpers, route tests, and shared form/primitives styling.
- Fixed Vite boot failure by using Zustand’s public
zustand/shallowimport path. - Fixed album-bundle staging so staged Soulseek/torrent/usenet album downloads preserve correct per-track numbers instead of importing every track as
01. - Capped hybrid album downloads to one worker when Soulseek is first in the source order, matching Soulseek-primary album behavior.
- Updated MusicBrainz album import search to show concrete release variants with richer release metadata.
- Fixed manual YouTube searches that begin with
-by escaping dash-leading queries. - Made completed downloads persist in the Downloads view and dashboard finished count.
- Moved and restyled artist-detail actions, including Watchlist, Artist Radio, Discography, and Enhance Quality.
- Improved Now Playing radio mode UI and made Artist Radio seed radio tracks through the same shared radio-mode path.
- Refined issue/stats route navigation and native link behavior.
Verification
PYTHONPATH="$PWD" .venv/bin/pytest tests/downloads/test_downloads_staging.py tests/downloads/test_downloads_master.py tests/downloads/test_downloads_task_worker.py -q73 passed
npm.cmd run build- Vite production build passed
- Manually verified:
- App boots successfully
- Import page loads
- Hybrid with Soulseek first imports album tracks with correct numbering