Commit Graph
7005 Commits
Author SHA1 Message Date
vicrodh 6f8dc41a98 feat: add Qobuz featured albums (New Releases, Press Awards)
- Add album/getFeatured endpoint to API
- Create get_featured_albums Tauri command
- Add New Releases and Press Awards sections to HomeView
- Featured albums load first for faster perceived performance
2026-01-11 00:25:57 -06:00
vicrodh bb996a4002 feat: improve HomeView with multiple fixes
- Reduce album card size by 10% (180px -> 162px)
- Move quality badge below artist name with subtle styling
- Fix Spanish texts to English for consistency
- Add missing onTrackPlay and onArtistClick handlers
- Implement progressive loading for faster home render
- Use fast reco_get_home query instead of ML-based one
2026-01-11 00:20:52 -06:00
vicrodh 8b46660c99 fix: handle song-card links for local tracks
When playing a local track:
- Album link navigates to local library view
- Artist link shows toast (no Qobuz artist ID available)
2026-01-10 23:56:40 -06:00
vicrodh 73ef1f91db feat: album/playlist header menu and UI consistency
Album/Playlist Menu:
- Remove + and Download buttons from headers
- Add AlbumMenu component with: Play Next, Play Later, Share (Qobuz/song.link), Download
- Implement queue handlers (handleAddAlbumToQueueNext, handleAddAlbumToQueueLater)
- Implement share handlers (shareAlbumQobuzLink, shareAlbumSonglink)
- Apply same menu to PlaylistDetailView

Button consistency (no more pills):
- AlbumDetailView: border-radius 20px → 8px
- PlaylistDetailView: border-radius 24px → 8px
- ArtistDetailView: border-radius 20px → 8px
- FavoritesView: border-radius 20px → 8px
- LocalLibraryView: border-radius 24px/20px → 8px

UserCard simplified (previous commit)
2026-01-10 23:54:25 -06:00
vicrodh c4203a195d fix: song-card responsive width with proper spacing
- Song-card now grows responsively (flex: 1, max-width: 800px)
- 50px gap between sections (100px total separation)
- Left/right sections no longer shrink (flex-shrink: 0)
- Removed fixed min-width from left/right sections
2026-01-10 23:43:08 -06:00
vicrodh 17bc752169 feat: UI refinements for album/playlist views and NowPlayingBar
- Song-card min-width: 640px → 580px
- AlbumDetailView: artwork 280px → 224px (-20%)
- AlbumDetailView: album title 28px → 26px (-2pts)
- AlbumDetailView: buttons border-radius 20px → 8px (not pills)
- PlaylistDetailView: artwork 232px → 186px (-20%)
- PlaylistDetailView: buttons border-radius 24px → 8px
- UserCard: remove collapse/logout buttons (only settings)
- NowPlayingBar: remove max-width on meta-link for album name
2026-01-10 23:42:10 -06:00
vicrodh 266b5e2029 fix: add proper bottom margin to NowPlayingBar
- Increase height to 104px (+8px)
- Increase bottom padding to 26px
- Remove divider separators
- Update all viewport height calculations
2026-01-10 23:31:59 -06:00
vicrodh aa1b93f730 fix: increase bottom margin for controls-row (18px) 2026-01-10 23:25:58 -06:00
vicrodh bfc8fd6a92 fix: increase QualityBadge size for better readability
- HiRes icon: 18px → 24px
- CD/MP3 icons: 14px → 16px
- Badge padding: 4px 8px → 5px 10px
2026-01-10 23:25:11 -06:00
vicrodh 16c5336898 fix: increase NowPlayingBar height to 96px
- More bottom margin for controls row (padding 10px top, 14px bottom)
- Update all viewport height calculations to match
2026-01-10 23:24:50 -06:00
vicrodh c66fe100b5 fix: NowPlayingBar song-card improvements
- Add album prop and click handlers (onArtistClick, onAlbumClick)
- Fix controls-row padding (equal top/bottom: 8px)
- QualityBadge: use gray colors instead of white with alpha
2026-01-10 23:24:17 -06:00
vicrodh c818a807d1 fix: UI refinements for NowPlayingBar and QualityBadge
- Artwork preview only triggers on hover over artwork, not entire song-card
- Double song-card min-width (320px → 640px, max 700px)
- Reduce all control icons by 2px (18→16, 20→18, 22→20)
- Reduce control button sizes (32→30px, play 36→34px)
- QualityBadge: reduce text 1pt (9→8px, 10→9px), alpha 90%
2026-01-10 23:21:41 -06:00
vicrodh 609d88719e feat: redesign NowPlayingBar (88px) and update QualityBadge opacity
- Redesign NowPlayingBar with new layout: seekbar at top, controls/song card/volume below
- Increase NowPlayingBar height from 80px to 88px
- Update all height calculations to match (Sidebar, LyricsSidebar, main-content)
- Set QualityBadge text opacity to 85%
- Add static icons for quality badges (cd.svg, mp3.svg, logo-hires.png)
2026-01-10 23:18:24 -06:00
vicrodh 197e850397 fix: use static icons, white text, reduced font size 2026-01-10 23:15:13 -06:00
vicrodh e15955c3d7 fix: QualityBadge always shows, full label display
- Always render badge (default to CD if unknown)
- Always show full label (Hi-Res 24-bit / 96 kHz)
- Remove compact mode
2026-01-10 22:45:42 -06:00
vicrodh 764ac9f00e feat: redesign QualityBadge with Qobuz-style info display
- Show icon + bit depth + sample rate (e.g., Hi-Res 24-bit / 96 kHz)
- Color-coded tiers: MAX (gold), Hi-Res (blue), CD (gray), MP3 (dim)
- Support compact mode for NowPlayingBar
- Custom Hi-Res audio icon (sound bars)
2026-01-10 21:50:40 -06:00
vicrodh 722d378303 Center ExpandedPlayer content and add loading spinner to HomeView 2026-01-10 11:34:09 -06:00
vicrodh 8f77e01578 Rename FullScreenNowPlaying to ExpandedPlayer + add lyrics
ExpandedPlayer:
- Renamed from FullScreenNowPlaying for clearer nomenclature
- Added lyrics panel on right side (Cider-style blend)
- Blurred album art background with gradient overlay
- All buttons now have tooltips
- Horizontal layout: artwork+controls left, lyrics right
- Responsive breakpoints for smaller screens

FocusMode:
- Centered main layout (max-width: 1400px)
- Fixed empty space on right side

Nomenclature:
- NowPlayingBar: Bottom bar (always visible)
- ExpandedPlayer: Expanded view (click artwork)
- FocusMode: Immersive lyrics view (from ExpandedPlayer)
2026-01-10 11:26:41 -06:00
vicrodh afa1a71a4f Integrate glassmorphism theme across UI components
- QueuePanel: Glass slide-in panel with blur backdrop
- NowPlayingBar: Glass bottom bar with proper fixed positioning
- PlaylistModal: Glass modal with rounded corners and blur
- AddToPlaylistModal: Glass modal with same styling
- GlassSurface: Updated to Svelte 5 (children snippet, role attr)
  - Removed position:relative to allow fixed positioning override

Glass CSS variables used:
--glass-bg, --glass-blur, --glass-radius, --glass-border, --glass-shadow
2026-01-10 11:13:41 -06:00
vicrodh 541511bba2 Redesign FocusMode to match Cider-style layout
- Large artwork on left (~65vh), lyrics panel on right
- Flexbox layout with fade mask on lyrics
- Improved blurred background (80px blur, diagonal gradient)
- ChevronDown close button in top-left
- Bottom bar with track info, centered controls, progress
- Full responsive support (1200px, 900px, 600px breakpoints)
- Added keyboard navigation for progress bar (arrow keys)
2026-01-10 10:57:44 -06:00
vicrodh 98750be2aa feat(glass): add glassmorphism surface components
- GlassSurface: configurable glass effect with ripple animation
- GlassFilterDefs: SVG filter for distortion effect
- Graceful fallback when backdrop-filter unsupported
- Updated to Svelte 5 runes syntax
2026-01-10 08:35:49 -06:00
vicrodh a2d70ccd88 feat(home): use ML-based scoring for recommendations 2026-01-10 08:16:55 -06:00
vicrodh c75a19f98f feat(reco): train scores automatically after login 2026-01-10 08:16:09 -06:00
vicrodh f4e8d68538 feat(home): add recommendation store and data-driven home
Backend:
- Add reco_store module with SQLite-backed event storage
- Add reco_log_event, reco_get_home commands
- Add ML-lite scoring: reco_train_scores, reco_get_home_ml
- Score decay based on event age (configurable half-life)

Frontend:
- Add recoService.ts for event logging
- Log play/favorite/playlist_add events
- Add albumId/artistId to PlayingTrack for tracking
- Rework HomeView to fetch recommendations from reco_store
- Display recently played, continue listening, top artists, favorites

Integrated from home-reco and home-reco-ml branches
2026-01-10 08:10:34 -06:00
vicrodh 340fb2a72a feat(lyrics): smoother transitions and static lyrics at top
- Reduced transition durations from 300-400ms to 120-150ms
- Changed easing to ease-out for snappier feel
- Added will-change for GPU acceleration
- Non-synced lyrics now display at container top (no spacers)
- Added isSynced prop to all lyrics components
2026-01-10 07:37:04 -06:00
vicrodh b171a17b57 fix(lyrics): fix camelCase mismatch between Rust and TypeScript
Rust sends syncedLrc (camelCase) but TypeScript expected synced_lrc.
Updated TypeScript interface to match Rust serialization.
2026-01-10 07:29:32 -06:00
vicrodh ab705db9cd fix(lyrics): add User-Agent header and debug logging to LRCLIB requests
LRCLIB API may require User-Agent header. Added debug logging to
see raw response and parsing results.
2026-01-10 07:24:26 -06:00
vicrodh 6b2466a976 fix(lyrics): prefer synced lyrics from LRCLIB search
When /api/get returns results without synced lyrics, now also
tries /api/search to find a version with synced LRC timestamps
2026-01-10 07:18:59 -06:00
vicrodh 182479f6c2 feat(settings): add lyrics cache clear button
- Add Lyrics section to Settings with cache clear button
- Add explicit debug logging for lyrics fetch/parse
- Add track change detection logging to watcher
2026-01-10 07:15:21 -06:00
vicrodh baf8a57516 fix(lyrics): instant scroll sync when lyrics load late or user seeks
- Use instant scroll for initial sync when activeIndex > 0 (lyrics loaded after song started)
- Use instant scroll for jumps > 2 lines (user seek or catch-up)
- Use smooth scroll only for normal line-by-line progression
- Reset sync state when new lyrics load (track change)
2026-01-10 07:04:09 -06:00
vicrodh 4989802641 fix: make progressRef reactive in FocusMode 2026-01-10 07:03:15 -06:00
vicrodh 0676989c71 feat(lyrics): add auto-scroll, karaoke effects, and FocusMode integration
- LyricsLines: improved auto-scroll with prevActiveIndex tracking
- LyricsLines: added immersive mode for larger text in FocusMode
- LyricsLines: enhanced opacity fading and text-shadow for active line
- FocusMode: redesigned with blurred artwork background like Cider
- FocusMode: integrated lyrics panel on right side with proper styling
- FocusMode: added bottom bar with track info, controls, and progress
- +page.svelte: wire lyrics props to FocusMode component
- +page.svelte: start lyrics updates when either sidebar or FocusMode open
2026-01-10 07:02:22 -06:00
vicrodh c32f25ab5e fix: restore explicit height on .main-content to fix rendering 2026-01-10 06:55:32 -06:00
vicrodh 78522b99ac fix: improve lyrics display with theme colors and karaoke effect
- Use theme CSS variables instead of hardcoded Cider colors
- Add distance-based opacity fading for non-active lines
- Fix scroll to center active line with proper reactivity
- Add spacers to allow first/last lines to scroll to center
- Add karaoke progress gradient on active line
- Prefetch lyrics on track start instead of button click
- Remove provider badge (will add to About modal later)
- Add loading spinner animation
2026-01-10 06:43:15 -06:00
vicrodh 80ff8afa3a feat: integrate lyrics module with UI
- Add lyricsStore for frontend state management with LRC parsing
- Wire LyricsSidebar to main layout with toggle button in NowPlayingBar
- Fix Rust compile errors (add Clone to LrclibItem, remove unused import)
- Add lyrics active line tracking with binary search
- Auto-start/stop lyrics updates based on playback state
2026-01-10 06:31:12 -06:00
vicrodh a3a766ba34 feat(lyrics-ui): refine layouts and add mini view 2026-01-10 06:19:40 -06:00
vicrodh f0748910c2 feat(lyrics-ui): add isolated lyrics UI components 2026-01-10 06:19:36 -06:00
vicrodh 489d73496a feat(lyrics): add backend cache and provider chain 2026-01-10 06:19:31 -06:00
vicrodh 71156e9d0a feat: replace polling with Tauri events and add unit tests
- Backend now emits playback:state events every 250ms when state changes
- PlayerStore uses listen() instead of setInterval for real-time updates
- Added Vitest testing framework with mocked Tauri APIs
- Added 53 unit tests for playerStore and queueStore
2026-01-10 06:14:59 -06:00
vicrodh 6dfcc8adaa refactor: extract app bootstrap to $lib/app/bootstrap.ts
Create bootstrap module with:
- loadSavedTheme() - theme initialization
- restoreLastfmSession() - Last.fm session restore
- setupMouseNavigation() - mouse back/forward handlers
- bootstrapApp() - combined init with cleanup

+page.svelte: 1,229 → 1,194 lines (-35 lines)
2026-01-10 05:56:33 -06:00
vicrodh 7580948e8c refactor: remove unnecessary navigation wrappers
- Remove goBack(), goForward(), handlePlaylistSelect() wrappers
- Use navGoBack, navGoForward, selectPlaylist directly from store
- Keep navigateTo() wrapper (has debug logging)

+page.svelte: 1,241 → 1,229 lines (-12 lines)
2026-01-10 05:54:36 -06:00
vicrodh 58db1bedc1 refactor: consolidate playback handlers to use playTrack service
- Simplify handleTrackPlay: 55 → 20 lines
- Simplify handleAlbumTrackPlay: 82 → 36 lines
- Simplify playQueueTrack: 58 → 18 lines

All playback handlers now use the unified playTrack() service which
handles MPRIS, notifications, Last.fm, and favorites automatically.

+page.svelte: 1,361 → 1,241 lines (-120 lines, -9%)
2026-01-10 05:53:22 -06:00
vicrodh 5be437dd4e refactor: extract Qobuz adapters and unify DisplayTrack type
- Create $lib/adapters/qobuzAdapters.ts with:
  - formatDuration/formatDurationMinutes (removed duplicates)
  - getQobuzImage helper
  - formatQuality/formatAlbumQuality helpers
  - convertQobuzAlbum converter
  - convertQobuzArtist converter

- Add unified DisplayTrack type to $lib/types/index.ts

- Update +page.svelte:
  - Import adapters instead of inline functions
  - Remove duplicate converter functions (−57 lines)
  - Add handleDisplayTrackPlay for view components

- Fix TypeScript type narrowing in view closures
2026-01-10 05:51:48 -06:00
vicrodh 30a33cfc95 refactor: extract track actions to trackActions service
Centralize common track actions that components can import directly:
- Queue operations (queueTrackNext, queueTrackLater)
- Convenience queue functions for different track types
- Favorites handling
- Playlist modal integration
- Sharing (Qobuz link, Song.link)

Removes 100+ lines of duplicate wrapper functions from +page.svelte.
Reduces +page.svelte from 1525 to 1418 lines.
2026-01-10 05:16:32 -06:00
vicrodh ea066ded97 refactor: extract playback logic to playbackService
Move core playback operations to centralized service:
- playTrack() - unified track playback with all side effects
- MPRIS metadata updates
- System notifications
- Last.fm scrobbling and now playing
- Favorite status checking and toggling

Simplifies handlers: handlePlaylistTrackPlay, handleLocalTrackPlay, toggleFavorite.
Reduces +page.svelte from 1675 to 1525 lines.
2026-01-10 05:12:04 -06:00
vicrodh d3ea80c5d4 refactor: extract shared types to $lib/types/
Move type definitions to centralized location:
- Qobuz API types (QobuzTrack, QobuzAlbum, QobuzArtist)
- UI display types (Track, AlbumDetail, ArtistDetail, PlaylistTrack)
- Local library types (LocalLibraryTrack)
- External API types (SongLinkResponse)

Reduces +page.svelte from 1806 to 1675 lines.
2026-01-10 05:07:26 -06:00
vicrodh 3ea2bb937b fix: update playlist and local track play to use playerStore
handlePlaylistTrackPlay and handleLocalTrackPlay were still using
local state variables directly instead of playerStore functions,
causing the UI to not react to playback state changes.
2026-01-10 05:00:57 -06:00
vicrodh c60cfe0525 refactor: extract queue state into queueStore
Move queue management into dedicated store:
- Queue tracks, shuffle, repeat modes
- Local track ID tracking for library playback
- Queue operations: add, clear, sync, navigate
- Backend queue state synchronization
2026-01-10 04:53:00 -06:00
vicrodh 55ec44cdc2 refactor: extract player state into playerStore
Move playback state management into dedicated store:
- PlayingTrack interface
- isPlaying, currentTime, duration, volume, isFavorite
- Polling logic with setOnTrackEnded callback
- Playback controls (togglePlay, seek, setVolume)
2026-01-10 04:48:31 -06:00
vicrodh cef950b08b refactor: extract navigation state into navigationStore
- Create navigationStore.ts for view navigation and history
- Implement navigateTo, goBack, goForward actions
- Add selectPlaylist for playlist detail navigation
- Update +page.svelte to use store subscription and functions
- Simplify navigation wrapper functions
2026-01-10 04:32:44 -06:00