Commit Graph
7005 Commits
Author SHA1 Message Date
vicrodh 3d56053d58 docs: mark tray icon as completed 2026-01-12 02:08:14 -06:00
vicrodh 06fa565d84 feat: add system tray icon with playback controls
- Add tray-icon feature to Tauri dependencies
- Create tray.rs module with full tray implementation
- Tray menu: Play/Pause, Next, Previous, Show/Hide, Quit
- Left-click toggles window visibility
- Double-click always shows and focuses window
- Right-click shows context menu
- Frontend listens for tray:play_pause, tray:next, tray:previous events
- Tray icon uses app default icon with "QBZ - Music Player" tooltip
2026-01-12 02:07:51 -06:00
vicrodh 6c8f4298d6 docs: mark session persistence as completed 2026-01-12 02:01:39 -06:00
vicrodh fb0bd2b9cd fix: reliable session persistence during playback
- Enable debouncedSavePosition() during playback state updates
  (saves position every 5 seconds while playing)
- Flush position save immediately when pausing
- Add periodic full session save every 30 seconds during playback
- Persist volume changes to session immediately
- Persist shuffle/repeat mode changes to session immediately

This fixes the race condition where async saves in beforeunload
wouldn't complete before app close. Now we save frequently enough
that the worst case is losing only 5-30 seconds of progress.
2026-01-12 02:01:09 -06:00
vicrodh c43867d403 feat: cross-platform audio device listing and Mac Easter egg
- Add conditional compilation for get_pipewire_sinks():
  - Linux: Uses pactl to get PipeWire/PulseAudio sinks with volume info
  - macOS/Windows: Uses cpal to enumerate audio devices (no volume)
- AboutModal: Detect platform and show macOS or Linux label
- Easter egg: Tux penguin is 64px on Mac (asserts dominance)
2026-01-12 01:25:59 -06:00
vicrodh 8257e8866b feat: platform-specific dialog plugin (xdg-portal on Linux only) 2026-01-12 01:22:44 -06:00
vicrodh a6960769e6 docs: update roadmap - playlist management complete, ML suggestions removed 2026-01-12 01:03:15 -06:00
vicrodh ccdebfbbce fix(artist): remove top gap for jump nav 2026-01-12 00:57:25 -06:00
vicrodh 95bae2e036 feat(artist): restyle jump nav 2026-01-12 00:50:25 -06:00
vicrodh 0e682e9ca6 feat(artist): add jump-to anchors 2026-01-12 00:45:17 -06:00
vicrodh 19028ab232 feat(artist): enhance artist view sections 2026-01-12 00:37:03 -06:00
vicrodh c7cd09f3ec feat(artist): expand artist models for new sections 2026-01-12 00:36:57 -06:00
vicrodh 4e2491a9a6 feat(artist): add artist detail and similar endpoints 2026-01-12 00:36:52 -06:00
vicrodh 74f659e1bf feat(collage): implement classic 2x2 grid layout instead of overlap 2026-01-12 00:29:12 -06:00
vicrodh 6748842a82 fix(collage): correct Svelte 5 derived syntax 2026-01-12 00:26:45 -06:00
vicrodh 57591ca1d7 fix(collage): use CSS classes instead of attribute selectors for count 2026-01-12 00:21:19 -06:00
vicrodh ae39399a45 refactor: remove ML suggestions, fix collage layout
- Remove suggested tracks feature (no similarity algorithm)
- Fix collage to show 3-4 covers properly in square format
- Covers now fill full height, cropped on sides as needed
2026-01-12 00:09:32 -06:00
vicrodh c53a86e317 fix(collage): square container with properly sized overlapping covers 2026-01-12 00:06:53 -06:00
vicrodh db39173467 fix(collage): enforce 1:1 aspect ratio for playlist artwork 2026-01-12 00:04:29 -06:00
vicrodh 4949f89b46 feat(playlist-manager): improved grid layout and search
- Fixed grid card layout with header row (drag handle left, edit right)
- Fixed 180px card width with 160px artwork
- Added playlist search bar for both list and grid views
- Replaced hide/show button with edit button (opens PlaylistModal)
- Clean separation of clickable content area
2026-01-11 23:55:57 -06:00
vicrodh 83afac8b37 feat: add ML-based playlist suggestions
- Add get_playlist_suggestions backend command using reco_store scores
- Add Suggested Tracks expandable section in PlaylistDetailView
- Track dismissals persisted in localStorage per playlist
- Add button to add suggestions directly to playlist
- Boost favorite tracks 1.5x in suggestion ranking
2026-01-11 23:50:48 -06:00
vicrodh 9812161826 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
2026-01-11 23:31:50 -06:00
vicrodh 719915058b feat: add hi-res logo variants (gray, blue, mono) and use grayscale version
- Created hi-res-gray.svg: grayscale filter on original logo
- Created hi-res-blue.svg: metallic blue version matching app accent
- Created hi-res-mono.svg: simplified black/white version
- QualityBadge now uses grayscale version for cleaner look
2026-01-11 23:21:00 -06:00
vicrodh bd578d8123 fix: z-index for menus/tooltips, sidebar dropdown, hi-res SVG icon
- Fix z-index across all menus and tooltips (10000+) to prevent overlap issues
- Redesign sidebar playlist header with dropdown menu: Sort by, Refresh, Import, Manage
- Add playlist tooltip on hover showing track count (lazy-loads artists)
- Fix submenu navigation with delayed close for better UX
- Replace hi-res PNG with SVG icon in QualityBadge
- Fix scrollbar spacing (8px from window edge) in main content
- Fix Svelte state_unsafe_mutation error in sidebar tooltip loading
2026-01-11 22:48:54 -06:00
vicrodh f4fe4b01c9 fix(ui): Standardize scrollbar across all views
- Add consistent scrollbar styling to all view components
- Scrollbar is visible (subtle) by default, brighter on hover
- Position scrollbar 8px from right edge
- Each view now handles its own scroll container
2026-01-11 22:08:57 -06:00
vicrodh 8f60a42d7f fix(ui): Import modal and scrollbar improvements
- Set min-height for import modal to prevent layout shift
- Fix Qobuz logo color to match text (white)
- Invert Tidal logo when active for visibility on dark background
- Reduce spacing between platform icons
- Refresh sidebar on playlist edit/delete from detail view
- Custom scrollbar: closer to edge, hidden until hover/scroll
2026-01-11 22:01:14 -06:00
vicrodh a1fd30d971 fix(playlists): Fix modal backgrounds and artwork overlay
- Change PlaylistImportModal from glass effect to solid background
- Add z-index to collage artwork overlay to ensure visibility
2026-01-11 21:52:32 -06:00
vicrodh f517910a6b fix(playlists): UI improvements for playlist manager
- Upscale Qobuz image URLs to 600x600 for better quality
- Change import icon from Download to Import for clarity
- Move hidden badge to bottom-right of artwork
- Reduce playlist name font size in grid view
2026-01-11 21:50:36 -06:00
vicrodh 436f245931 fix(playlists): Improve playlist UI
- Use large album art instead of thumbnail for collage quality
- Move edit button to navigation row (same level as back button)
- Replace glass effect with solid background in PlaylistModal
2026-01-11 21:47:58 -06:00
vicrodh b18bd2eac2 feat(playlists): Wire PlaylistManagerView to main page
Add 'playlist-manager' to ViewType and connect it to Sidebar navigation
2026-01-11 20:53:31 -06:00
vicrodh 5033befa1d feat(playlists): Add PlaylistManagerView page
- New view for managing playlists with full features
- Filter by All/Visible/Hidden
- Sort by Name/Recent/Play Count/Custom
- Toggle between grid and list view
- Drag reorder when in Custom sort mode
- Display play count stats
- Toggle visibility per playlist
- Uses PlaylistCollage for artwork
- Persists preferences in localStorage
2026-01-11 20:49:33 -06:00
vicrodh 4c76d9ca95 refactor(sidebar): Simplify playlists section, move features to manager page
- Remove filter, sort, view toggle from sidebar (will be in manager page)
- Remove grid view and collage from sidebar
- Add Settings button for playlist manager
- Show only visible playlists in sidebar
- Add onPlaylistManagerClick prop for navigation
- Clean up unused CSS
2026-01-11 20:47:16 -06:00
vicrodh 513ac9a8a0 feat(playlists): Update PlaylistDetailView with collage, stats, edit button
- Replace artwork section with PlaylistCollage component
- Add play count display in header info (with BarChart2 icon)
- Increment play count when "Play All" is clicked
- Add edit button that opens PlaylistModal
- Add handleEditSuccess and handleDelete callbacks
- Add onPlaylistUpdated and onPlaylistDeleted props
- Update Sidebar to use NavigationItem in list view (icons only)
- Keep PlaylistCollage in grid view only per user request
- Add badge and class props to NavigationItem component
2026-01-11 20:44:39 -06:00
vicrodh ec4df03455 feat(playlists): Add hidden toggle and delete to PlaylistModal
- Add hidden checkbox to toggle sidebar visibility in edit mode
- Add danger zone with delete button and confirmation
- Update handleUpdate to save hidden status locally
- Add handleDelete function with proper error handling
- Style danger zone with red theme for visibility
2026-01-11 20:39:12 -06:00
vicrodh 3fb9ee1381 feat(playlists): Add playlist management - filter, sort, view modes, collage artwork
- Add PlaylistCollage component with Qobuz-style overlapping covers
- Add playlist_settings columns (hidden, position) with migration
- Add playlist_stats table for play count tracking
- Add backend commands for playlist management:
  - playlist_get_all_settings, playlist_set_hidden
  - playlist_set_position, playlist_reorder
  - playlist_get_stats, playlist_get_all_stats
  - playlist_increment_play_count
- Update Sidebar with filter dropdown (All/Visible/Hidden)
- Add sort dropdown (Name/Recent/Custom)
- Add view toggle between list and grid modes
- Fix TypeScript errors in +page.svelte and TitleBar.svelte
2026-01-11 20:37:23 -06:00
vicrodh 7affd2bf13 Fix Hi-Res quality badge showing as CD when playing from playlists
Root cause: Queue tracks were being built without quality fields (hires,
bit_depth, sample_rate) in multiple views. When auto-advancing or skipping
tracks, the playerStore would have undefined quality data, causing
QualityBadge to default to CD tier.

Fixed by:
- Adding quality fields to queue track builders in PlaylistDetailView,
  FavoritesView, ArtistDetailView, and LocalLibraryView
- Replacing all 'CD Quality' fallbacks with '-' placeholder in +page.svelte
- Adding bitDepth/samplingRate fields to ArtistDetailView DisplayTrack
2026-01-11 19:57:40 -06:00
vicrodh ed3cfe6b4f fix: queue panel scroll - add flex properties to glass-content
The GlassSurface's .glass-content wrapper wasn't set up for flex layout,
preventing the inner .content div from scrolling properly.

Added global styles for .queue-panel .glass-content:
- display: flex; flex-direction: column
- flex: 1; min-height: 0
- overflow: hidden (so child .content can scroll)
2026-01-11 19:51:12 -06:00
vicrodh 1ae0073dff fix: use '-' placeholder for unknown quality instead of 'CD Quality'
- PlaylistDetailView: Show '-' when quality data is unavailable
- handleDisplayTrackPlay: Use '-' fallback, added TODO for streaming update
- handleDisplayTrackDownload: Consistent quality fallback logic
- TrackRow: Always render quality column (previous commit)

This prevents showing potentially incorrect 'CD Quality' labels.
Quality should be updated when actual streaming info is available.
2026-01-11 19:49:17 -06:00
vicrodh 60fcc7253d fix: playlist track quality column alignment and CD Quality fallback
- TrackRow: Always render quality column to maintain consistent layout
- PlaylistDetailView: Show exact quality (24bit/96kHz) when available
- PlaylistDetailView: Fall back to 'Hi-Res' or 'CD Quality' label
- Prevents column shift when quality data is missing
2026-01-11 19:45:42 -06:00
vicrodh c06ef5541f fix: queue panel scroll detection with wheel event capture
- Added onwheel stopPropagation on .content to capture scroll events
- Scroll on .content (not .tracks) so entire queue area scrolls
- Thin 4px scrollbar visible when content overflows
- Scrollbar brightens on hover (0.15 → 0.25 → 0.4)
- overscroll-behavior: contain for isolation
2026-01-11 19:40:18 -06:00
vicrodh 411cc5176f fix: queue scroll now works on tracks list with thin auto-hide scrollbar
- Moved scroll from .content to .tracks container
- Added wheel event stopPropagation to prevent main content scroll
- Thin 4px scrollbar that brightens on hover
- overscroll-behavior: contain for scroll isolation
- Fixed flex layout so tracks list fills available space
2026-01-11 19:37:41 -06:00
vicrodh 70f03a1003 fix: quality badge accuracy and queue drag-to-reorder
Quality Badge Fix:
- Extended BackendQueueTrack with hires, bit_depth, sample_rate fields
- Updated all queue track builder functions to pass quality data
- Fixed quality badge showing CD instead of Hi-Res for playlist tracks
- Extended session persistence to save/restore quality info

Queue Drag-to-Reorder:
- Added move_track function to Rust QueueManager
- Added move_queue_track Tauri command
- Implemented HTML5 drag-and-drop in QueuePanel
- Visual feedback with drag-over indicator and dragging opacity
- Disabled drag when search filter is active
- Prevented text selection during drag operations
2026-01-11 19:28:34 -06:00
vicrodh 24c8ee5cad fix(queue): scroll isolation and UX improvements
- Add overscroll-behavior: contain to prevent scroll chaining to main content
- Add visible fancy scrollbar (webkit) with hover effect
- Move search bar below Now Playing section for better UX
- Scroll now works independently when cursor is over queue panel
2026-01-11 19:12:03 -06:00
vicrodh f9cf4f06cd feat(ui): queue panel improvements and playlist album column
Queue Panel:
- Fix scroll by constraining panel between TitleBar and NowPlayingBar
- Add search bar to filter entire queue (not just first 20)
- Reduce font sizes by 1px for compact layout
- Reduce item height from 48px to 40px

TrackRow:
- Add album prop to display album column

PlaylistDetailView:
- Pass album data to TrackRow for album column display
2026-01-11 18:51:38 -06:00
vicrodh 4d2fdce1aa fix(ui): playlist navigation and title font sizes
- Fix clicking another playlist from sidebar while on playlist view
  (was not notifying listeners because view type hadn't changed)
- Use $effect to reload playlist data when playlistId prop changes
- Reduce playlist title from 48px to 24px
- Reduce album title from 26px to 24px
- Max font size is now 24px (same as home greeting)
2026-01-11 18:43:37 -06:00
vicrodh a9f80a15b0 docs: update roadmap - playlist import fully working 2026-01-11 18:41:00 -06:00
vicrodh 00a7c97322 fix(playlist-import): fix Tidal API rate limiting and chunk size
- Add 200ms delay between API calls to avoid 429 Too Many Requests
- Reduce chunk size from 50 to 20 (Tidal API limit for filter[id])
- Improve error messages to include response body for debugging
2026-01-11 18:40:45 -06:00
vicrodh 25fe2e363f docs: update roadmap with playlist import status 2026-01-11 17:43:17 -06:00
vicrodh 22cf6d9051 feat(playlist-import): integrate Codex playlist import feature
Cherry-pick and integrate playlist import from playlist-import-impl branch:
- Add playlist_import Rust module with providers (Spotify, Apple, Tidal, Deezer)
- Add track matching algorithm (ISRC first, then fuzzy matching)
- Add PlaylistImportModal.svelte with progress log UI
- Wire up import button in Sidebar
- Add modal state management in uiStore
- Register Tauri commands for preview and execute

Original implementation by Codex, integrated manually due to branch divergence.
2026-01-11 17:42:52 -06:00
vicrodh 4b7e6b9c17 Add launch roadmap documentation
Document 6-point roadmap for v1.0 launch:
1. Session persistence (partial)
2. Device select/passthrough/exclusivity (done)
3. Tray icon (pending)
4. MiniPlayer (pending)
5. DLNA/AirCast (ChromeCast only)
6. Playlist management (pending)

Also documents completed features from recent sessions.
2026-01-11 17:04:16 -06:00