From 9812161826f869dd4055d6485fab9eeaf98fd467 Mon Sep 17 00:00:00 2001 From: vicrodh <103399283+vicrodh@users.noreply.github.com> Date: Sun, 11 Jan 2026 23:31:50 -0600 Subject: [PATCH] fix: playlist artwork state reset + update roadmap - Reset customArtworkPath when switching playlists (prevents wrong image) - Fixed asset:// URL for custom playlist artwork display - Updated ROADMAP.md with current implementation status --- ROADMAP.md | 70 ++++++++++++++----- .../views/PlaylistDetailView.svelte | 9 ++- 2 files changed, 62 insertions(+), 17 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index e7fc22aa9..4f0445638 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -15,7 +15,7 @@ **Description:** Remember playback state, queue, and position when restarting the app. **Current State:** -- Basic implementation exists but inconsistent ("funciona a veces si a veces no") +- Basic implementation exists but inconsistent - Sometimes restores session, sometimes doesn't **TODO:** @@ -98,42 +98,80 @@ ## 6. Playlist Management -**Status:** Partial (Import fully working) +**Status:** In Progress (~70% complete) -**Description:** Create, edit, and manage playlists within QBZ. +**Description:** Full playlist management with CRUD, statistics, and enhanced UI. -**Implemented Features:** -- [x] Import playlists from Spotify, Apple Music, Tidal, Deezer (all working) +### Implemented Features: + +**Import (100% complete):** +- [x] Import from Spotify, Apple Music, Tidal, Deezer - [x] Track matching via ISRC + fuzzy matching algorithm - [x] Progress log UI during import - [x] Auto-create Qobuz playlist with matched tracks -- [x] Tidal rate limiting and API chunk size fixes +- [x] Rate limiting and API chunk size handling -**TODO:** -- [ ] Create new playlists (basic UI exists) -- [ ] Add/remove tracks from playlists -- [ ] Reorder tracks in playlist -- [ ] Delete playlists -- [ ] Sync with Qobuz account playlists -- [ ] Export playlists +**Database & Backend (100% complete):** +- [x] `playlist_settings` table with custom_artwork_path, sort_by, sort_order, hidden, position +- [x] `playlist_stats` table with play_count, last_played_at +- [x] Backend commands: `playlist_get_settings`, `playlist_set_artwork`, `playlist_get_stats`, etc. + +**UI Components (80% complete):** +- [x] PlaylistCollage component (Qobuz-style 4 album covers) +- [x] Custom artwork selection per playlist +- [x] Sort menu in sidebar (dropdown with submenu) +- [x] PlaylistDetailView with collage header +- [x] Stats display (play count) +- [ ] PlaylistEditModal (edit name/description) +- [ ] Filter dropdown (All/Visible/Hidden) in sidebar +- [ ] Drag-to-reorder playlists +- [ ] Grid view toggle (list vs mosaic) + +**ML Suggestions (0% complete):** +- [ ] `get_playlist_suggestions` backend algorithm +- [ ] Suggested Tracks section in PlaylistDetailView + +### Recent Fixes (This Session): +- [x] Fixed custom artwork not loading (asset:// URL conversion) +- [x] Fixed settings state persisting between playlists +- [x] Fixed sort submenu closing too fast +- [x] Fixed z-index for all menus/tooltips (10000+) +- [x] Added hi-res logo variants (grayscale version in use) --- -## Additional Completed Features (This Session) +## Additional Completed Features +**UI/UX:** - [x] Enhanced notifications with album artwork - [x] Quality info in notifications (Hi-Res / CD Quality badges) - [x] 3-line notification format (Title, Artist • Album, Quality) - [x] Window drag region fix for TitleBar +- [x] Hi-res logo variants (gold, gray, blue, mono SVGs) +- [x] Sidebar tooltip system with lazy loading +- [x] Fixed scrollbar spacing in main content + +**Performance:** - [x] Removed unnecessary PipeWire polling (was every 10s) - [x] Artwork caching with MD5 hash filenames -- [x] Playlist import from Spotify/Apple/Tidal/Deezer (Codex integration) --- ## Technical Notes -- **Stack:** Tauri 2.0, Rust backend, Svelte 5 frontend +- **Stack:** Tauri 2.0, Rust backend, Svelte 5 (runes) frontend - **Audio:** rodio/cpal with PipeWire/ALSA integration - **Commands:** `pactl list sinks` for PipeWire device info - **Notifications:** `notify_rust` with `reqwest::blocking` for artwork download +- **Icons:** Hi-res logo at `/static/hi-res-gray.svg` (grayscale version) + +--- + +## Priority Order for Remaining Work + +1. **Session Persistence debugging** - Critical for UX +2. **PlaylistEditModal** - Complete playlist CRUD +3. **Tray Icon** - Expected feature for music apps +4. **MiniPlayer** - Nice to have +5. **ML Suggestions** - Enhancement +6. **DLNA/AirPlay** - Lower priority diff --git a/src/lib/components/views/PlaylistDetailView.svelte b/src/lib/components/views/PlaylistDetailView.svelte index 868d6ba4c..b0bda2123 100644 --- a/src/lib/components/views/PlaylistDetailView.svelte +++ b/src/lib/components/views/PlaylistDetailView.svelte @@ -208,6 +208,13 @@ } async function loadSettings() { + // Reset state before loading new playlist settings + sortBy = 'default'; + sortOrder = 'asc'; + customArtworkPath = null; + searchQuery = ''; + playlistSettings = null; + try { const settings = await invoke('playlist_get_settings', { playlistId }); playlistSettings = settings; @@ -553,7 +560,7 @@
{#if customArtworkPath}
- {playlist.name} + {playlist.name}