Commit Graph
7039 Commits
Author SHA1 Message Date
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
vicrodh 7bb2b20767 Show quality info on separate line in track notifications 2026-01-11 12:51:46 -06:00
vicrodh f9baecfbdb Pass bitDepth and samplingRate to playTrack in all handlers 2026-01-11 12:41:50 -06:00
vicrodh bc7e13d756 Improve track notifications with artwork and quality info 2026-01-11 12:38:21 -06:00
vicrodh 2d908c7b12 Remove unnecessary polling from AudioOutputBadges, refresh on hover instead 2026-01-11 12:32:23 -06:00
vicrodh 3efac409bc Fix window drag by adding data-tauri-drag-region attribute 2026-01-11 11:51:53 -06:00
vicrodh 0eb0b2ec1f Add audio device reinit for proper exclusive mode release 2026-01-11 11:47:47 -06:00
vicrodh b6b019e659 Add PipeWire device names via pactl and fix badge margins 2026-01-11 11:37:45 -06:00
vicrodh 78e3af691f Reposition DAC/EXC badges below QualityBadge in vertical layout
Changed quality-indicator to column flex layout with badges row below
the QualityBadge. Both badges now expand to fill the width equally,
matching the QualityBadge width.
2026-01-11 11:30:05 -06:00
vicrodh 23ac19a68f Fix pretty names to handle actual ALSA device name formats 2026-01-11 11:23:22 -06:00
vicrodh dd758d3523 Fix session restore and audio badges visibility
Session restore:
- Add pendingSessionRestore state to playerStore
- When restored track is played, load from Qobuz first
- Seek to saved position after track loads

Audio badges:
- Always show DAC/EXC badges (very muted when off)
- Adjust margins and sizing for better alignment
2026-01-11 11:19:34 -06:00
vicrodh 3fd3d25bdc Add device validation before using saved audio device
- Validate device has supported output configs before using
- Fall back to default if saved device is invalid
- Reduces polling frequency to 10 seconds
2026-01-11 11:10:02 -06:00
vicrodh f6b2b07f5d Fix cover art and badge margins, add audio error detection
UI:
- Cover art now has 2px margin vs song-card edges
- Quality badges have 2px margin on right side

Audio:
- Track consecutive sink failures to detect broken streams
- Stop playback gracefully after 3 failures
2026-01-11 11:08:25 -06:00
vicrodh bae83ad7e8 Enlarge cover art to 56px with 2px margins, align badges to top-right 2026-01-11 11:02:25 -06:00
vicrodh dd9d5558fa Add audio output badges and pretty device names
- Add AudioOutputBadges component showing DAC/Exclusive mode status
- Badges are reactive to actual player state, not just settings
- Add device tooltip on hover showing current output device
- Create audioDeviceNames helper for ALSA name to friendly name mapping
- Use pretty names in Settings dropdown while storing raw names
- Add get_audio_output_status backend command
- Store current device name in player SharedState
2026-01-11 11:00:31 -06:00
vicrodh 4b07618ed0 Improve audio device dropdown: wider, compact, expand-left 2026-01-11 10:42:08 -06:00
vicrodh c80f2d9583 Wire audio device selection from settings to player
- Player::new() now accepts optional device name
- Uses OutputStream::try_from_device() for specific device
- AppState reads saved device from audio settings on startup
- SettingsView loads/saves audio settings to backend
- Changes take effect on app restart
2026-01-11 03:54:56 -06:00