Commit Graph
60 Commits
Author SHA1 Message Date
vicrodh a63bc1cbcd merge: integrate pre-release blacklist feature with i18n fixes 2026-02-02 16:34:52 -06:00
vicrodh 55d383c431 fix(i18n): correct svelte-i18n interpolation format
svelte-i18n requires { values: { key: value } } format for variable
interpolation, not { key: value } directly. Fixed across all toast
and greeting calls.
2026-02-02 16:24:52 -06:00
vicrodh 2dc9989d22 i18n: Add greeting and toast translations
- Add time-based greeting translations (goodMorning, goodAfternoon,
  goodEvening, goodNight) to homeSettings section
- Update homeSettingsStore to export getGreetingInfo for i18n support
- Update HomeView.svelte to use translated greetings
- Add comprehensive toast translations (~60 keys) for all user-facing
  notifications including queue, playback, offline, favorites, etc.
- Update +page.svelte to use $t() for all showToast calls
- Complete Spanish translations for all new keys
2026-02-02 15:45:35 -06:00
vicrodh 8480ad13da fix(blacklist): correct import path for artistBlacklistStore 2026-02-02 14:20:54 -06:00
vicrodh 6ff6269f74 feat(blacklist): add grayout styling for blacklisted artist tracks
- TrackRow: Add isBlacklisted prop with grayout styling and ban icon
- VirtualizedTrackList: Check blacklist status for each track
- PlaylistDetailView: Gray out and restrict actions for blacklisted tracks
- AlbumDetailView: Apply album-level blacklist check to all tracks
- HomeView: Gray out blacklisted tracks in Continue Listening section
- ArtistDetailView: Banner shown when viewing blacklisted artist page

Blacklisted tracks show reduced opacity, ban icon instead of track
number, and restricted menu actions (navigation only, no playback).
2026-02-02 14:17:01 -06:00
vicrodh 589e6071c4 feat(genre): show parent genres by default with sub-genre toggle
- Default view shows only parent genres (less cluttered like Qobuz)
- When selecting a parent, filtering includes all its sub-genres
- Added "Show all sub-genres" toggle for granular control
- Store now tracks parent/child relationships for proper filtering
- getFilterGenreNames() returns selected + children for filtering
2026-02-02 10:26:21 -06:00
vicrodh 8dc1efec5d feat(genre): support multi-select genre filter
- Allow multiple genre selection (checkbox behavior)
- Add getSelectedGenreNames() for multiple name retrieval
- Merge results from multiple API calls for featured albums
- Clear button now closes the popup
- Button shows "N genres" when multiple selected
2026-02-02 09:37:43 -06:00
vicrodh 22ba76a8d1 feat(home): filter user sections by genre
- Add getSelectedGenreName() to genre filter store
- Add filterAlbumsByGenre() helper in HomeView
- Apply genre filter to Recently Played and Favorite Albums
- Fetch 3x more items when filtering to ensure enough results
2026-02-02 09:29:55 -06:00
vicrodh 8428fafaa5 feat(home): integrate genre filter into HomeView
- Add GenreFilterButton to home header
- Pass genre_id to fetchFeaturedAlbums API calls
- Reload home content when genre filter changes
- Featured sections now filter by selected genre
2026-02-02 08:53:13 -06:00
vicrodh 655aaf4c88 fix(home): properly show offline cache status in Continue Listening
- Add getTrackOfflineCacheStatus prop to HomeView
- Pass downloadStatus and downloadProgress to TrackRow
- Use reactive cache status function that depends on downloadStateVersion

Tracks in Continue Listening now correctly show their cached state.
2026-01-27 19:24:23 -06:00
vicrodh 79a667fb50 fix(home): reactively update offline cache state in Continue Listening
Include downloadStateVersion in the each loop key to force re-render
when offline cache state changes, fixing tracks showing gray icons
even when cached.
2026-01-27 19:15:57 -06:00
vicrodh e9c7e4672c Add release date display to AlbumCard overlay
- Add releaseDate prop to AlbumCard component
- Display release date below genre in overlay (format: "Jan 25, 2026")
- Update all AlbumCard usages across views to pass releaseDate:
  - ArtistDetailView (all album sections)
  - HomeView (all featured album sections)
  - SearchView (search results)
  - FavoritesView (favorite albums)
  - LabelView (label albums)
  - AlbumDetailView ("By the same artist" section)
- Add releaseDate to types and adapters
- Skip local library view (VirtualizedAlbumList)
2026-01-25 23:47:33 -06:00
vicrodh 2a89b025a6 Merge PR #22: Add genre display on album hover
Resolved merge conflicts with size="large" changes from pre-release.
Both genre and size="large" props now included in AlbumCard components.
2026-01-25 12:35:27 -06:00
Joel C 22f0aa5a0e Display genre on AlbumCard when mouse over it 2026-01-25 16:08:46 +01:00
vicrodh f9115aa620 fix(ui): reduce left padding from 24px to 18px in all views 2026-01-25 05:06:01 -06:00
vicrodh 1407516b34 fix(ui): standardize AlbumCard size and grid layout across all views
- Use size="large" (180px) for all AlbumCard instances
- Change album grids from CSS grid with 1fr to flexbox
- Fix LocalLibrary gap issue by using consistent spacing
- Align VirtualizedAlbumList, ArtistDetailView, SearchView,
  FavoritesView, HomeView, and AlbumDetailView
2026-01-25 04:51:29 -06:00
vicrodh 1de77ec132 feat(credits): enable track info for all Qobuz tracks + add artist link
- Add onTrackShowInfo to HomeView (Continue Listening tracks)
- Add onShowInfo to VirtualizedTrackList (for FavoritesView)
- Add onTrackShowInfo to FavoritesView and wire to VirtualizedTrackList
- Pass showTrackInfo to HomeView and FavoritesView in +page.svelte
- Add clickable artist name to TrackInfoModal header
- Artist link navigates to artist page and closes modal
2026-01-25 03:38:35 -06:00
vicrodh 921639041c fix(ui): make HomeView loading overlay respect sidebar state
Pass sidebarExpanded prop to HomeView to dynamically position the
loading overlay based on sidebar width (280px expanded, 64px collapsed).
Added smooth transition for left position.
2026-01-23 16:10:43 -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 1fdd4d9711 Merge PR #18: add album to playlist 2026-01-22 23:12:19 -06:00
Joel C 23ce992372 Use add to playlist on AlbumCards on HomeView 2026-01-22 22:56:51 +01:00
vicrodh 73cc935d99 fix: remove open-folder action from download menus
cx
2026-01-22 11:14:51 -06:00
vicrodh ebca7c0546 Add Download functionality to all Qobuz track context menus
- Created open_track_folder Rust command to open folder containing downloaded track
- Added frontend wrappers: openTrackFolder and reDownloadTrack in downloadState.ts
- Updated all Qobuz views to support Download submenu:
  - HomeView: Added track download props and handlers
  - AlbumDetailView: Added onTrackOpenFolder and onTrackReDownload
  - SearchView: Added track download actions to both TrackMenu usages
  - FavoritesView: Added download submenu to both track list variants
- Downloaded tracks now show submenu with 'Open containing folder' and 'Re-download' options
- Completes Phase 2 Task 2.1: Context Menu Homogenization (Download)
2026-01-19 21:15:06 -06:00
vicrodh c7fdc52741 Expand HomeView context menu from 1 to 8 actions
HomeView 'Continue Listening' tracks now have complete context menu:
- onPlayNow ✓
- onPlayNext ✓ (NEW)
- onPlayLater ✓ (NEW)
- onAddToPlaylist ✓ (NEW)
- onShareQobuz ✓ (NEW)
- onShareSonglink ✓ (NEW)
- onGoToAlbum ✓ (NEW)
- onGoToArtist ✓ (NEW)

This matches the complete context menu available in AlbumDetailView,
FavoritesView, and other Qobuz track displays.

Files modified:
- src/lib/components/views/HomeView.svelte - Added track action props
- src/routes/+page.svelte - Passed track action handlers to HomeView
2026-01-19 20:52:07 -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 1fae9b7d9f fix(ui): wire active state in lists
cx
2026-01-19 13:02:43 -06:00
vicrodh c59ab226b9 fix(playback): honor autoplay and seed queues
cx
2026-01-19 12:46:28 -06:00
vicrodh 640cf5db41 feat(phase35): implement context in HomeView
Context creation:
- Creates 'home_list' context for Continue Listening section
- Uses 'continue_listening' as ID and 'Continue Listening' as label
- Tracks user's listening history in a context
- Stack icon will show "Playing from: Continue Listening"

Home view now fully integrated with context system.

cp
2026-01-18 03:34:50 -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 9443708aad fix(ui): ensure album download state updates reactively in Home and Search views
Added downloadStatusTick counter to force Svelte 5 reactivity when albumDownloadStatuses Map changes.

cp
2026-01-15 07:28:20 -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 7952bbb7d6 feat(downloads): add album download status to grid overlays (partial)
- Add backend command to check if album is fully downloaded
- Add frontend functions to check album download status
- Pass download handlers to HomeView
- Update HomeView AlbumCards with download status props

cp
2026-01-15 00:23:58 -06:00
vicrodh 3cfe3c1333 feat(i18n): add translations to main UI components
- Sidebar: navigation labels, playlist section, sort options
- SearchView: search placeholder, tabs, results messages
- HomeView: section titles, loading states, empty states
- QueuePanel: headers, search, empty state, actions
- NowPlayingBar: player controls, tooltips, cast buttons
- FocusMode: close button, lyrics loading
- HomeSettingsModal: all settings labels and descriptions

Added new translation keys to en.json and es.json locales.
2026-01-14 10:12:38 -06:00
vicrodh d9698d2a77 fix(ui): remove hover lift on top artists 2026-01-14 01:17:57 -06:00
vicrodh fc6a6cefe3 fix(ui): adjust album overlay layout and home limits 2026-01-14 01:15:29 -06:00
vicrodh 2d5ababba4 feat(ui): add album card actions and fixed-speed tickers 2026-01-14 01:03:14 -06:00
vicrodh b57889a910 feat(library): link local artists to Qobuz 2026-01-14 00:11:42 -06:00
vicrodh 86c237ab02 feat(ui): make track artist and album clickable 2026-01-14 00:04:25 -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 29ded155d1 feat(ui): add compact mode to TrackRow for Continue Listening
- Add compact prop to TrackRow: smaller height (44px), artist as column
- Apply compact mode to Continue Listening section in Home
- Reduces vertical space and improves scannability
2026-01-11 02:21:26 -06:00
vicrodh e864e3272e fix(home): use fixed positioning for loading overlay to prevent scroll displacement 2026-01-11 02:08:56 -06:00
vicrodh 1b90a45212 refactor(favorites): centralize track favorites in favoritesStore
- Create favoritesStore.ts for centralized favorites state management
- Refactor TrackRow to be self-sufficient with internal favorites handling
- TrackRow now subscribes to store and toggles favorites internally
- Remove redundant favoriteTrackIds state from AlbumDetailView and PlaylistDetailView
- Remove manual onAddFavorite prop drilling from all views
- Add trackId prop to TrackRow for store lookup (optional for local tracks)
- Add hideFavorite prop for local tracks that don't have Qobuz IDs
- Load favorites once on app init in +page.svelte
2026-01-11 02:08:14 -06:00
vicrodh 48a010c597 fix(home): improve loading overlay + favorite button in Continue Listening
Loading overlay:
- Wait for ALL visible sections to finish loading before hiding overlay
- Count total visible sections and track when each finishes
- Content renders behind overlay, then overlay fades out smoothly

Continue Listening:
- Add menuActions with onAddFavorite to TrackRow
- Import handleAddToFavorites from trackActions service
- Favorite button now works in Continue Listening section
2026-01-11 02:00:58 -06:00
vicrodh c529a28c6e fix(ux): favorite button click + home loading overlay
TrackRow:
- Convert favorite indicator div to interactive button
- Add stopPropagation to prevent row click (play) when clicking favorite
- Add hover state and proper button styling

HomeView:
- Add loading overlay that waits for at least 2 sections to load
- Overlay fades out smoothly when content is ready
- Prevents jarring "sections appearing and reordering" effect
2026-01-11 01:55:09 -06:00
vicrodh 8cbb65aaee feat: add Qobuzissimes and Editor's Picks sections
- Add qobuzissimes and editorPicks sections (disabled by default)
- Conditional loading to save API calls when sections are hidden
- Note: These API types may not be confirmed working
2026-01-11 01:07:26 -06:00
vicrodh 721dc2996c feat: add Popular Albums section with conditional loading
- Add mostStreamed section using album/getFeatured most-streamed
- Optimize API calls by only fetching visible sections
- Default to hidden (enable via Home settings)
2026-01-11 01:04:39 -06:00
vicrodh 99c157d100 fix: resolve infinite loop in home settings subscription
- Remove immediate listener call in subscribe() to prevent effect loop
- Use onMount instead of $effect for subscriptions to avoid reactive tracking
- Combine onMount callbacks in HomeView
2026-01-11 00:49:38 -06:00