Commit Graph
1152 Commits
Author SHA1 Message Date
vicrodh a1e0e7c606 feat(sidebar): group members by MBID, show roles in tooltip
- Deduplicate members that appear multiple times with different roles
- Combine roles and show in mouseover tooltip
- Apply to Members, Former Members, Member Of, Collaborators

cc
2026-01-25 20:18:31 -06:00
vicrodh 1cdf15ecf0 feat(settings): add MusicBrainz cache clear button in Storage section
cc
2026-01-25 20:17:14 -06:00
vicrodh 53dbff219e feat(sidebar): restructure relationships section
- Members: current band members
- Former Members: past members (with muted style)
- Member Of: groups artist belongs to
- Collaborators: collaboration relationships

cc
2026-01-25 20:06:46 -06:00
vicrodh e9039f9909 style(sidebar): homogenize item styles, more compact
- Add User icon to Similar Artists items
- Reduce padding and gap for denser layout
- Smaller font size (12px)

cc
2026-01-25 19:54:45 -06:00
vicrodh bcb6b88713 feat(artist): add Artist Network sidebar with sections
- Fixed position sidebar that slides in from right
- Labels section (placeholder)
- Similar Artists section (functional)
- MusicBrainz Relationships section (functional)

cc
2026-01-25 19:52:38 -06:00
vicrodh c4426d19ea feat(artist): add Artist Network toggle button next to Radio
cc
2026-01-25 19:45:47 -06:00
vicrodh 513b6ef210 wip: temporarily hide similar artists and MB relationships for sidebar experiments
cc
2026-01-25 19:26:32 -06:00
vicrodh 0a632d4c04 feat(artist): reduce bio preview from 3 to 2 lines
cc
2026-01-25 19:23:47 -06:00
Victor RH 009fa8d4c5 Merge branch 'feature/stream-first-feature-flag' into pre-release 2026-01-25 18:14:46 -06:00
vicrodh 008c5623cb feat(streaming): add seekbar progress and dynamic buffer sizing
- Pass track duration from frontend to streaming playback for seekbar
- Add StreamInfo struct with speed measurement during probe
- Implement StreamingConfig::from_speed_mbps() for adaptive buffer sizing
- Add play_streaming_dynamic() method using speed-based buffer config
- Enhanced download logging with progress %, speed (current/avg), and ETA
- Auto-cache streamed tracks for instant replay

The seekbar now shows playback progress during streaming by using
the track's known duration from metadata rather than detecting it
from incomplete audio data.
2026-01-25 18:06:41 -06:00
vicrodh 4b9d819a98 Fix genre prop propagation for album cards
- Add genre field to QobuzTrack.album type
- Add genre to compilation albums in qobuzAdapters
- Add getGenreLabel function to LabelView
- Add genre prop to AlbumDetailView artist albums
- Update +page.svelte artist albums mapping to include genre
2026-01-25 13:02:24 -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
vicrodh 6e82fc380d feat(ui): add stream first track toggle in settings
Add UI controls in SettingsView for streaming configuration:
- Toggle for enabling stream-first mode for uncached tracks
- Slider for initial buffer size (1-10 seconds)
- Settings load/save handlers connected to Tauri commands
- CSS styling for buffer slider

cpvsc
2026-01-25 12:23:22 -06:00
vicrodh 0b40b59e75 fix(search): add MainArtist filter and reserve clear button space 2026-01-25 12:07:17 -06:00
vicrodh 2136a2a0e7 feat(search): add search type filters for refined results
Backend:
- Add search_type parameter to search_albums, search_tracks, search_artists
- Pass optional type filter to Qobuz API (Performer, Composer, Label, ReleaseName)

Frontend:
- Add SearchFilterType to search state management
- Add filter radio buttons in SearchView (visible when results exist)
- Remove redundant counts from tabs
- Add Clear filter button independent from Clear search
- Filters reset automatically when starting new search or clearing

Filters allow finding performers, composers, and labels that default
search misses (e.g., searching "Nicko McBrain" with Performer filter
shows Iron Maiden tracks)
2026-01-25 12:04:49 -06:00
vicrodh 6467ca038e feat: add LabelView to browse albums by record label
- Add get_label API endpoint and Tauri command
- Create LabelView component with album grid, search, and infinite scroll
- Add clickable label links in AlbumDetailView, AlbumCreditsModal, and TrackInfoModal
- Add label_id to AlbumInfo and AlbumDetail types
- Add label to QobuzTrack album summary for track info display
2026-01-25 11:28:51 -06:00
Joel C 22f0aa5a0e Display genre on AlbumCard when mouse over it 2026-01-25 16:08:46 +01:00
vicrodh c97d62393d feat(musicbrainz): add artist page enrichment (Stage 3)
Display MusicBrainz artist relationships on artist detail page:
- Band Members section with role info (for groups)
- Past Members section (former members)
- Member Of section (groups this artist belongs to)

Features:
- Automatic MusicBrainz artist resolution on page load
- Click to navigate to related artist's Qobuz page
- Graceful degradation when data unavailable
- Respects MusicBrainz enabled setting

Uses Stage 1 MusicBrainz infrastructure for data fetching.

cc
2026-01-25 06:56:37 -06:00
vicrodh ba09024b17 feat(listenbrainz): integrate scrobbling with playback service
Add automatic ListenBrainz scrobbling when tracks play:
- Now-playing submission on track start
- Scrobble after 50% or 4min (whichever is shorter)
- MusicBrainz data enrichment for enhanced scrobbles
- Offline queue support (flush when back online)
- ISRC field added to PlayingTrack interface

Scrobbling uses Stage 1 MusicBrainz resolution to include:
- Recording MBID
- Release MBID
- Artist MBIDs

cc
2026-01-25 06:52:13 -06:00
vicrodh 23d208b3d0 feat: implement ListenBrainz integration (Stage 2)
Add ListenBrainz scrobbling support with:
- Client module for ListenBrainz API
- Token-based authentication (user provides token from listenbrainz.org)
- Now-playing submission support
- Scrobble submission with MusicBrainz enrichment
- SQLite-based offline queue with TTL
- Credential persistence across sessions
- Settings UI for connection management

API integration uses Stage 1 MusicBrainz data to enrich scrobbles with
recording MBID, release MBID, and artist MBIDs when available.

cc
2026-01-25 06:49:40 -06:00
vicrodh d264b4b994 feat(settings): add MusicBrainz enable/disable toggle
- Add toggle in Integrations section
- Load and save state via Tauri commands

cc
2026-01-25 06:37:33 -06:00
vicrodh 8602493331 refactor(quality-badge): simplify to only detect MP3 format
Simplified the lossy format detection since only MP3 is clearly lossy
among supported library formats (flac, m4a, wav, aiff, ape, mp3).
m4a can be either ALAC (lossless) or AAC (lossy) so it's not reliable.

- Removed LOSSY_FORMATS array, now only checks for 'mp3'
- Use /mp3.svg icon (text-only, more readable than mp3-cd.svg)
- Simplified tier to just 'mp3' instead of 'mp3-cd' and 'lossy'
2026-01-25 06:06:10 -06:00
vicrodh fa8af9b1d9 fix(quality-badge): distinguish lossy formats from CD quality
MP3 and other lossy formats (aac, m4a, ogg, opus, wma) at CD-like
sample rates (44.1-48kHz) were incorrectly shown as "CD" quality
because bitDepth check came before format check.

Changes:
- Add format prop to QualityBadge, NowPlayingBar, ExpandedPlayer
- Add format field to PlayingTrack interface
- Check for lossy formats BEFORE checking bitDepth/samplingRate
- New 'mp3-cd' tier for lossy formats at CD sample rates
- Uses /mp3-cd.svg icon for this tier
2026-01-25 05:45:01 -06:00
vicrodh 5e5f85a86f fix(sidebar): fix collapsed folder button behavior and styling
- Add folder popover for collapsed sidebar mode - clicking a folder
  button now shows a menu with the playlists inside instead of silently
  toggling the expansion state
- Fix folder button color to match other nav items (--text-muted)
- Fix folder button size to match nav items (32px height instead of 40px)
- Add overflow-x: hidden to playlists-scroll to prevent horizontal scroll
2026-01-25 05:32:30 -06:00
vicrodh e95f487721 feat(local-library): add filter auto-close and album sorting
Filter panel now auto-closes after 3 seconds of inactivity and when
clicking outside. Added album sorting with three options:
- Album Name (A-Z, Z-A)
- Release Year (ascending, descending)
- Artist Name (A-Z, Z-A)

Sort selection persists within the session and secondary sort by
title is applied when primary sort values match.
2026-01-25 05:24:19 -06:00
vicrodh 2ea00c70d3 fix(ui): increase modal z-index to appear above sidebar and player
Updated z-index from 1000 to 10000 in all modal components to ensure
they are always displayed on top of the sidebar and player bar.
2026-01-25 05:24:13 -06:00
vicrodh 0ca97ee68d fix(local-library): add ALAC/APE format filters and fix last row cutoff
- Add ALAC and APE to format filter options
- Add 100px bottom padding to virtualized list for player bar
2026-01-25 05:08:09 -06: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 75060305f3 Disable performer search links until MusicBrainz integration
Keep the onPerformerSearch infrastructure in TrackInfoModal and
AlbumCreditsModal but don't pass the prop. Performer names are
now plain text. Re-enable when MusicBrainz allows precise lookups.

Also fixes: sticky tabs in AlbumCreditsModal now work correctly.
2026-01-25 04:28:37 -06:00
vicrodh bb9d7d65ea Add clickable performer names to AlbumCreditsModal 2026-01-25 04:07:29 -06:00
vicrodh 3a898a3c3f Add clickable performer names and fix sticky tabs
Phase 7 quick wins (closes #17):
- Performer names in TrackInfoModal are now clickable
- Clicking a performer searches for their name in Qobuz
- SearchView auto-searches when opened with pre-filled query
- Credits/Review tabs in AlbumCreditsModal stay fixed when scrolling
2026-01-25 04:04:13 -06:00
vicrodh a3e8d47010 Revert album artwork size increase, keep at 200x200 2026-01-25 03:56:09 -06:00
vicrodh 01f75e098e Adjust AlbumCreditsModal layout and styling
- Increase modal width to 850px
- Increase album column to 260px (with larger artwork)
- Move tab switcher above track list/review content
- Reduce track row height by 2px (9px padding instead of 10px)
- Combine quality badges into single "24-Bit / 96 kHz" format
- Make scrollbar always visible and not overlay content
- Add padding to tracks list for scrollbar space
2026-01-25 03:56:01 -06:00
vicrodh 641ac30078 Add Credits button to tab switcher when review exists 2026-01-25 03:50:11 -06:00
vicrodh 25a49a1d68 Redesign AlbumCreditsModal with two-column layout
- Two columns: fixed album info (200px) + scrollable track list/review
- Remove track backgrounds, use thin divider lines between tracks
- Modal dimensions: 800px wide, reduced height by 5px
- Move tabs to bottom of album column (only show Review when available)
- Album info scroll area with overflow for long metadata
- Move album title and artist to modal header
- Remove "Credits" label since track list is always visible
2026-01-25 03:49:28 -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 f7161bafe1 feat(credits): redesign Single Track Modal per Figma specs (Phase 5)
- Glass effect modal (560px, blur(20px), rgba border)
- Header with track title + album subtitle
- 3-column metadata grid: Duration, Quality, ISRC
- 2-column credits grid grouped by role
- Role ordering: Composer/Lyricist first, MainArtist last
- CamelCase to UPPERCASE label conversion
- Multiple performers per role joined with comma
- Copyright section at bottom
- ESC key closes modal
- Animations: fade-in overlay, scale-up modal
2026-01-25 03:32:08 -06:00
vicrodh 9194164418 fix(credits): try alternate info icon (info-large.svg) 2026-01-25 03:19:48 -06:00
vicrodh 38427177f2 fix(credits): reduce info icon size to match heart glyph 2026-01-25 03:15:18 -06:00
vicrodh 6eff22632a feat(credits): complete Album Credits Modal with Review tab
- Use custom info SVG icon without circle outline
- All tracks collapsed by default (removed auto-expand)
- Add description field to Album model for editorial reviews
- Implement Review tab with album description content
- Tab switches between Credits (track list) and Review (description)
- Review tab disabled when no description available
2026-01-25 03:09:53 -06:00
vicrodh 3410774f32 feat(credits): add Album Credits Modal (Phase 4)
- Add get_album_credits Tauri command with TrackCredits, AlbumCredits,
  and AlbumInfo structs for consolidated album/track credits view
- Create AlbumCreditsModal component with two-column layout:
  album info (artwork, metadata, quality badges) and collapsible
  track list with performers and copyright
- Add Info button to AlbumDetailView header actions
- Integrate modal in +page.svelte with track play support
2026-01-25 02:53:46 -06:00
vicrodh 6601a3a5e6 feat(track-info): integrate TrackInfoModal with views
Phase 3 - Integration:
- Add onTrackShowInfo prop to TrackRow, AlbumDetailView,
  PlaylistDetailView, SearchView
- Add TrackInfoModal to +page.svelte with state management
- Pass showTrackInfo callback from main page to all views

cc
2026-01-25 02:28:52 -06:00
vicrodh e767809857 feat(track-info): add TrackInfoModal and context menu option
Phase 2 of track-info feature:
- Add performers, composer, copyright fields to Track model
- Add get_track_info command with parsed performers
- Create TrackInfoModal component to display track details and credits
- Add "Track info" option to TrackMenu context menu

cc
2026-01-25 02:23:42 -06:00
vicrodh dcbe7e802a feat(playlist): track copied playlists and add attribution
- Hide "Copy to My Library" button after playlist has been copied
- Persist copied playlist IDs in localStorage for subsequent visits
- Add attribution note to description: "Originally curated by X on Qobuz"
2026-01-25 01:39:32 -06:00
vicrodh ee31c3e445 feat(playlist): add ability to copy Qobuz playlists to user library
When viewing a playlist not owned by the current user, a new "Copy to
My Library" button appears between the favorite and context menu buttons.
Clicking it creates a copy of the playlist with all its tracks in the
user's library.

- Add get_current_user_id command to check playlist ownership
- Add subscribe_playlist command to copy playlist with all tracks
- Add ListPlus button in PlaylistDetailView for non-owned playlists
- Button only shows for playlists owned by others (e.g., Qobuz curated)
2026-01-25 01:34:43 -06:00
vicrodh a276a30ff2 fix(playlist): show correct track count when creating playlist with tracks
When creating a new playlist from a track, the sidebar was showing 0 tracks
because the Qobuz API returns the playlist with tracks_count: 0 at creation
time (eventual consistency). The tracks are added after, but the sidebar
refresh might get stale data.

- Update newPlaylist.tracks_count after adding tracks in PlaylistModal
- Have handlePlaylistCreated update the sidebar with correct count
- Handle both Qobuz and local track cases
2026-01-25 01:15:42 -06:00
vicrodh 0655888f46 refactor(modals): remove color subtitles and fix button alignment
- Remove "Solid Colors", "Gradients", "Custom Gradient" subtitles
- Remove h4 styles no longer used
- Fix footer buttons: Delete left, Cancel/Save right-aligned
- Fix button size consistency with transparent border
2026-01-25 01:09:56 -06:00
vicrodh d98f4aa9ee refactor(modals): reduce icon sizes and remove help texts
- Add headphones icon to presets (7 icons total)
- Reduce icon size from 24px to 17px (70%)
- Reduce icon button size to 42x42px
- Update grid to 7 columns with smaller gap
- Remove section description texts
- Adjust modal width to 480px for FolderEditModal
2026-01-25 01:08:12 -06:00
vicrodh 83cbfc51c2 feat(sidebar): add adaptive search to context menu folder list
- Show search input when 8+ folders exist
- Scrollable folder list with max-height
- Filter folders as user types
- "No folders match" message when search has no results
- Search resets when context menu closes
2026-01-25 00:54:10 -06:00