Commit Graph
109 Commits
Author SHA1 Message Date
vicrodh 1185d307f5 style: opaque nav bars with subtle shadow
- Remove transparency from all sticky nav bars (fully opaque)
- Remove backdrop-filter blur (not needed with opaque bg)
- Add subtle box-shadow (4px) for content-fades-beneath effect
- Applied to Artist, Favorites, LocalLibrary, Settings views
2026-01-23 18:23:30 -06:00
vicrodh 75aeb9592f fix: remove main-content padding-left for edge-to-edge nav bars
- Removed padding-left: 20px from main-content
- Toggle button and jump-nav don't collide (different vertical positions)
- Updated all view nav bars with corrected margin/width calculations
- Nav bars now truly flush with sidebar edge
2026-01-23 18:21:49 -06:00
vicrodh 7c14a6835e fix: extend sticky nav bars edge-to-edge with sidebar
- ArtistDetailView: jump-nav now flush with sidebar (margin -44px left)
- FavoritesView: favorites-nav flush with sidebar
- LocalLibraryView: jump-nav flush with sidebar
- SettingsView: settings-nav flush with sidebar
- All navs compensate for both main-content and view padding
- Radio animation: faster floating messages (1.2s), infinite loop
2026-01-23 18:17:34 -06:00
vicrodh 87e4b7c356 style(artist): add floating text animation to radio loading
Step 2 of radio button animation:
- Add wrapper for positioning context
- Floating messages appear above button and fade upward
- Uses Svelte #key directive to re-trigger animation on message change
- Absolute positioning ensures no layout shift
2026-01-23 18:13:00 -06:00
vicrodh a1d5f8a137 style(artist): add rotating arcs animation to radio button
- Replace expanding button with rotating concentric arcs
- Outer arc: rotates clockwise at 1.2s
- Inner arc: rotates counter-clockwise at 1.8s
- Animation uses absolute positioning, doesn't affect layout
- Button maintains size during loading state
2026-01-23 18:11:56 -06:00
vicrodh 65716c9e07 style(artist): restructure header per design specs
- Move action buttons below Similar Artists section
- Remove images from Similar Artists (text-only with bullet separators)
- Remove solid background from biography
- Add thin font weight (300) to bio area
- Update Similar Artists to uppercase title with letter-spacing
2026-01-23 18:11:07 -06:00
vicrodh 008ef6e443 fix(artist): add data-track-id attribute for scroll-to-track
The scrollToTrack function queries for [data-track-id] but the
attribute was missing on track rows, preventing track focus from
context.
2026-01-23 17:20:23 -06:00
vicrodh cc6d14e24b fix(artist): jump-nav full width and consistent section headers
- Fix jump-nav to span 100% of content width with proper margins
- Make Popular Tracks section header consistent with other sections
- Add track count badge to Popular Tracks
- Remove unused section-header-row CSS
2026-01-23 17:14:54 -06:00
vicrodh 77e4619e7b fix(artist): add missing onAddAlbumToPlaylist to Others section
The Others section was missing the onAddAlbumToPlaylist prop that
other album sections have, making the context menu inconsistent.
2026-01-23 17:10:14 -06:00
vicrodh 89a9f2e130 style(artist): consistent section-header-left wrapper for all sections
Apply section-header-left wrapper to all remaining album sections
for consistent structure (EPs & Singles, Live Albums, Compilations,
Tributes & Covers, Others, Playlists).
2026-01-23 17:09:46 -06:00
vicrodh 1aeb3642c6 fix(artist): move sort dropdown to discography header
- Move album sort dropdown from jump-nav to Discography section header
- Align sort dropdown to right of section title
- Revert similar artists styling to original
- Sort now only applies to album sections below it
2026-01-23 17:06:18 -06:00
vicrodh d371711e59 style(artist): improve artist view visual design
- Add album counts to section headers (Discography, EPs & Singles, etc.)
- Add glass effect to sticky jump navigation bar
- Wrap discography sections in cards with rounded corners
- Improve similar artists section with chip-style buttons
- Add card styling to biography section
- Improve top tracks section with card background
- Better visual separation with gradient dividers
- Consistent spacing and typography updates
2026-01-23 16:54:43 -06:00
vicrodh 4aa76a0ed4 feat(artist): add album sorting in artist view
Add sort dropdown in artist detail view jump navigation with options:
- Default (API order)
- Newest First (by release year)
- Oldest First (by release year)
- Title (A-Z / Z-A)

Sorting applies to all album sections: albums, EPs/singles, live albums,
compilations, tributes, and others.
2026-01-23 16:45:24 -06:00
vicrodh 5eb1b392e8 fix(queue): add album_id and artist_id to all view queue builders
Complete propagation in all view components:
- HomeView: buildContinueQueueTracks
- FavoritesView: buildFavoritesQueueTracks
- SearchView: buildSearchQueueTracks
- LocalLibraryView: setQueueForLocalTracks (local=true, null IDs)
- ArtistDetailView: buildTopTracksQueue
2026-01-23 03:57:36 -06:00
vicrodh 619f8cca6d refactor(artist): move action buttons below photo, remove album count
Restructure artist header layout:
- Move favorite and radio buttons below the artist photo
- Remove album count line from header
- Artist name now left-aligned in its own row
- Create artist-image-column for photo + actions grouping
2026-01-23 03:19:49 -06:00
vicrodh 1cd05384fb fix(artist): align header content to top instead of center
Change artist info section to align content to top of the image
instead of vertically centering. This positions the artist name
closer to the photo. Also move margin from h1 to the row container
to fix alignment between name and action buttons.
2026-01-23 03:15:20 -06:00
vicrodh aabbe8ea67 fix(radio): pass album_id and artist_id for track navigation
Add album_id and artist_id fields to QueueTrack struct so that
radio tracks have proper navigation metadata. This enables
clicking artist/album in the main player to navigate correctly
when playing tracks from artist or track radio.

Changes:
- Add album_id/artist_id to Rust QueueTrack struct
- Update track_to_queue_track to extract IDs from Qobuz Track
- Add fields to frontend BackendQueueTrack interface
- Pass IDs in ArtistDetailView radio playback
- Pass IDs in playQueueTrack to playTrack service
2026-01-23 03:14:42 -06:00
Joel C 6415991792 Use add to playlist on AlbumCards on ArtistDetailView 2026-01-22 23:11:15 +01:00
vicrodh 95647e288f fix: Sync playback context after creating radio
Call getPlaybackContext() to sync radio context from backend to frontend
This ensures the Radio icon appears in NowPlayingBar
2026-01-20 20:47:44 -06:00
vicrodh 4fc8c04bc1 fix: Use playQueueIndex for complete track data and add animated loading states
- Use playQueueIndex(0) instead of reading from queue store to get full track data
- Fixes missing artwork, duration, and seekbar for first track
- Add animated pill button with loading messages during radio creation
- Add glowing blue effect on radio icon after successful creation
- Loading messages: preparing, fetching artists, experimental notice
2026-01-20 20:45:54 -06:00
vicrodh 6c3ff71cdd fix: Sync queue state before reading in radio creation
Call syncQueueState() to fetch queue from backend before attempting playback
2026-01-20 20:34:12 -06:00
vicrodh 240c5e013a fix: Improve radio playback and session handling
- Fix radio playback initiation using onTrackPlay callback
- Fix sampling rate display for Qobuz tracks (already in kHz)
- Disable session restore to prevent local/Qobuz ID conflicts
2026-01-20 20:16:42 -06:00
vicrodh 76d1ddd007 fix: Start playback automatically when creating radio
- Import playQueueIndex from queueStore
- Call playQueueIndex(0) after radio creation to start playing
- Applies to both artist radio and track radio
2026-01-20 18:22:00 -06:00
vicrodh e1818faa90 feat: Wire up Track Radio callback in ArtistDetailView 2026-01-20 17:44:16 -06:00
vicrodh 1cf23f0e86 feat: Add Artist Radio button and Track Radio function to ArtistDetailView 2026-01-20 17:43:09 -06:00
vicrodh 2a8087ecb2 fix: Pause button now only appears on hover for playing tracks
- Replace Lucide Pause icon with solid SVG pause icon
- Pause button only shows when hovering over currently playing track
- Playing indicator (animated bars) shows when track is playing
- Play button shows for all non-playing tracks on hover
- Fixes issue where pause appeared on all tracks on hover
2026-01-20 17:33:19 -06:00
vicrodh ed7984a029 fix(context): fix playback context tracking bugs
Multiple critical fixes for context tracking:

1. Add 'local_library' to backend context type parser
   - Was rejecting 'local_library' causing "Invalid context type" error
   - Now properly recognized in set_playback_context command

2. Fix shuffle to not always start with first track
   - Removed logic that moved current track to front of shuffle
   - Now finds current track position in shuffled order instead
   - Shuffle is truly random, not biased to original order

3. Add missing await to all setPlaybackContext calls
   - PlaylistDetailView: await context creation
   - FavoritesView: make setFavoritesContext async + await calls
   - ArtistDetailView: await context creation
   - HomeView: await context creation
   - SearchView: await + use home_list type (search type doesn't exist)

   This fixes intermittent context tracking (race condition)

Fixes: shuffle starting with first song, Local Library context error,
intermittent playlist/favorites/artist/home/search context tracking

cc
2026-01-19 18:31:18 -06:00
vicrodh c59ab226b9 fix(playback): honor autoplay and seed queues
cx
2026-01-19 12:46:28 -06:00
vicrodh 318e3d795a feat(context): scroll to active track on context navigation
cx
2026-01-19 11:19:52 -06:00
vicrodh d39180bd6c feat(ui): show playing status in search and artist tracks
cx
2026-01-18 05:46:57 -06:00
vicrodh 0bd60bbc8f feat(phase35): implement context in ArtistDetailView
Context creation:
- Creates 'artist_top' context when playing from Top Tracks
- Uses artist ID and name
- Passes track index from UI loop
- Stack icon will show "Playing from: Artist · {name}"

Artist view now fully integrated with context system.

cp
2026-01-18 03:30:47 -06:00
vicrodh 99aba9a76a feat(artist): add search navigation with prev/next buttons
- Add navigation to search results with smooth scrolling
- Show result counter (X/Y) with prev/next chevron buttons
- Support keyboard navigation (Enter, Shift+Enter, Escape)
- Add searchId prop to AlbumCard for DOM targeting
- Style search toggle button without background
- Remove focus outline from search input
2026-01-15 18:20:32 -06:00
vicrodh 98f1209e37 feat(artist): add page search and improve bio truncation
Page search:
- Add search button in sticky jump-nav bar
- Slide-in animation from right when opened
- Filter albums, EPs, live, compilations, tributes, others, playlists
- Show result count or "No results" message
- Press Escape to close

Bio improvements:
- Reduce truncation to 530 chars (was 800, now 2/3)
- Only show "Read more" if text actually needs truncation

Live detection - additional languages:
- German: Konzert, liveopname
- Japanese: ライブ (raibu)
- Korean: 라이브 (laibeu), 콘서트 (konseuteu)
- Dutch: liveopname
2026-01-15 18:06:01 -06:00
vicrodh 74483f2b10 feat(artist): add Tributes section and improve album categorization
Major improvements to album categorization logic:

Detection improvements:
- Broadcasts: detect plural forms, "Radio Broadcasts", "The Beast Radio"
- Live albums: detect "Alive", city+year patterns (Seattle 1989, Tokyo 1986)
- Podcasts: detect "Report Episode X", single-track 20+ min releases
- Singles: 1-4 tracks (classic 45rpm), explicit markers in title

New Tributes section:
- Albums by different artists now go to "Tributes & Covers"
- Separates tribute/cover albums from legitimate artist content
- Keeps Others clean for compilations, B-sides, unofficial releases

Categorization priority:
1. Different artist -> Tributes
2. Broadcasts/bootlegs/podcasts -> Others
3. Compilations (greatest hits, B-sides) -> Others
4. Live albums -> Live
5. Studio albums (7+ tracks, 25+ min, deluxe) -> Discography
6. EPs/Singles (1-4 tracks, <15 min) -> EPs & Singles
2026-01-15 17:25:16 -06:00
vicrodh 42349f14dd fix(api): respect user locale for artist biography
- Add locale field to QobuzClient for API language preference
- Pass lang parameter to Qobuz artist detail endpoints
- Create set_api_locale command to update client locale
- Sync API locale with UI i18n settings automatically
- Render artist biography HTML tags properly using @html
- Fix syntax error in FavoritesView (missing comma)

cp
2026-01-15 08:57:13 -06:00
vicrodh e281932340 feat(artist): increase album and track limits
- Increase initial artist albums fetch from 500 to 1000
- Increase load more albums batch from 50 to 200
- Increase top tracks display from 5 to 20
- Prefer full biography content over summary
- Increase bio truncate threshold from 500 to 800 characters

cp
2026-01-15 08:25:03 -06:00
vicrodh bf4050a592 feat(ux): increase artist album limits and add Others section
- Increase artist detail album fetch from 100 to 500
- Increase bio truncation from 300 to 500 chars
- Add Others category for greatest hits/anthologies
- Add configurable limits for Home sections
- Update HomeSettingsModal with limits grid UI

cp
2026-01-15 08:00:16 -06:00
vicrodh a1df7095fb fix(downloads): ensure album download status is reactive in grid overlays
Add downloadStateVersion prop to AlbumCard component to make download
status reactive in all grid views. This fixes the issue where the
download menu submenu would not appear in Home, Search, and Artist
Detail views even when albums were fully downloaded.

cp
2026-01-15 01:00:55 -06:00
vicrodh f15316533f fix: album download menu not updating in grid views
- Force Map reactivity by re-assigning after .set()
- Add missing downloadStateVersion effect in SearchView
- Ensures download menu updates across all grid views

cp
2026-01-15 00:51:43 -06:00
vicrodh 6cc625c0f1 fix: reload download states in HomeView and ArtistDetailView when download state changes
cp
2026-01-15 00:45:25 -06:00
vicrodh 87f8980323 fix(ui): load album download status on grid view load
Load download status for all albums when they are first loaded
in grid views (Home, Search, Artist Detail, Favorites) so the
'Download Album' menu shows correct state immediately.

cp
2026-01-15 00:39:10 -06:00
vicrodh a1e9ced027 feat(downloads): complete album download status in grid overlays
- Update SearchView, ArtistDetailView, and FavoritesView
- Add download status tracking to all views with AlbumCards
- Display Open Folder and Re-download options when album is fully downloaded
- All grid overlays now show download status consistently

cp
2026-01-15 00:28:14 -06:00
vicrodh 2d5ababba4 feat(ui): add album card actions and fixed-speed tickers 2026-01-14 01:03:14 -06:00
vicrodh 86c237ab02 feat(ui): make track artist and album clickable 2026-01-14 00:04:25 -06:00
vicrodh c2c9e8f867 style(ui): cap headings to playlist title size 2026-01-13 11:00:58 -06:00
vicrodh dbc004eed7 perf: add lazy loading and reduce memory footprint
- Add loading="lazy" decoding="async" to images in AlbumCard, ArtistDetailView
- Convert AlbumCard hover from JS state to CSS :hover (fewer re-renders)
- Reduce IntersectionObserver thresholds from 4 to 1 in ArtistDetailView
- Reduce default audio cache from 500MB to 200MB
2026-01-12 20:42:34 -06:00
vicrodh 9fda678b61 feat(artist): add live albums section 2026-01-12 10:52:00 -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