Commit Graph
1359 Commits
Author SHA1 Message Date
vicrodh b5698fbf88 fix: resolve 500 error from invalid JSX and wrong import
- Remove invalid React/JSX component (CopyableCommand) from SettingsView
- Replace JSX usage with proper Svelte 5 markup
- Fix import: use openUrl instead of open from plugin-opener
2026-01-26 19:40:25 -06:00
vicrodh 328fb77464 fix(TagEditor): remove stray indentation from style tag
The style tag was indented with 2 spaces, causing PostCSS to fail
parsing (it saw JavaScript as CSS). Svelte requires the style tag
to be at root level with no indentation.
2026-01-26 19:29:41 -06:00
vicrodh dddb4d4fd1 fix: resolve type mismatches and add Phase 6 polish
- Fix RemoteTrackMetadata field types (disc_number, track_number as u8)
- Fix RemoteAlbumMetadata fields (genres, tracks as Vec, disc_count as u8)
- Fix cache method calls (async, proper signatures)
- Fix error variant construction (ProviderUnavailable, InvalidProviderId)
- Add track count mismatch warning in UI
- Add rate limit error message handling
- Add 'Open in browser' button for selected result
2026-01-26 18:55:05 -06:00
vicrodh 9dd63e106b feat(TagEditor): add remote metadata lookup UI
Phase 5 of service integration:
- Add MusicBrainz/Discogs provider selector
- Add search functionality with results display
- Add apply-to-form button to populate fields
- Include track-level metadata application
- Collapsible panel to keep UI clean
2026-01-26 18:48:46 -06:00
vicrodh 6d20baf914 feat: add remote metadata service and Tauri commands
Phase 4 of service integration:
- Add provider adapters (MusicBrainz, Discogs to unified DTOs)
- Add RemoteMetadataState with search_albums and get_album_metadata
- Create remote_metadata commands module with Tauri handlers
- Wire up state and commands in lib.rs

Available commands:
- remote_metadata_search: Search albums on MusicBrainz or Discogs
- remote_metadata_get_album: Get full album metadata with tracks
- remote_metadata_cache_stats: Get cache statistics
- remote_metadata_clear_cache: Clear the in-memory cache
2026-01-26 18:46:29 -06:00
vicrodh 25e877181a discogs: add search_releases and get_release_metadata methods
Phase 3 of service integration:
- Add DiscogsReleaseMetadata struct with full album info
- Add DiscogsArtist, DiscogsLabel, DiscogsTrack structs
- Add DiscogsSearchResultExtended for detailed search results
- Add search_releases() for release search with extended metadata
- Add get_release_metadata() for full release with tracklist
2026-01-26 18:42:41 -06:00
vicrodh b8340ad6c7 musicbrainz: add get_release_with_tracks with media/tracks support
- Add ReleaseFullResponse model with media, tracks, and tags
- Add Medium, MediumTrack, TrackRecording, Tag models
- Add get_release_with_tracks() for fetching full release details
- Add search_releases_extended() with configurable limit and catalog number
- Export new types from module
2026-01-26 18:39:47 -06:00
vicrodh 70df504af3 library: add remote_metadata module structure and unified DTOs
- Add RemoteProvider enum (MusicBrainz, Discogs)
- Add RemoteAlbumSearchResult for lightweight search results
- Add RemoteAlbumMetadata for full metadata with tracks
- Add RemoteTrackMetadata for track info
- Add RemoteMetadataCache with TTL-based expiration
- Add adapter functions for MusicBrainz and Discogs
- Add Discogs position/duration parsing utilities
2026-01-26 18:37:45 -06:00
vicrodh 50d765509d fix(TagEditor): remove Tracklist label, tone down album path display 2026-01-26 18:27:25 -06:00
vicrodh d3e046d8ef fix(LocalLibrary): restore scroll in album detail view
The virtualized-active class was being applied even when viewing album
detail, causing overflow:hidden to block scrolling. Added !selectedAlbum
check to only apply virtualized mode for list views.
2026-01-26 18:24:31 -06:00
vicrodh 79ebd66856 refactor(PlaylistDetailView): use danger CSS variables for clear artwork button 2026-01-26 18:20:48 -06:00
vicrodh 590fea538c refactor: replace hardcoded colors with CSS variables
- FocusMode: replace #000, white with theme variables
- miniplayer: replace #6366f1, #fff, #818cf8 with accent/text variables
- AlbumDetailView: replace #666666 with --text-muted
- LoginView: use --danger and --warning variables for error/timeout boxes
- PlaylistModal: use .icon-inline utility class

Add to app.css:
- Warning color variables (--warning, --warning-bg, --warning-border)
- .icon-inline and .badge-warning utility classes
2026-01-26 18:20:06 -06:00
vicrodh 8ae4f62401 refactor(ExpandedPlayer): replace hardcoded colors with CSS variables 2026-01-26 18:16:23 -06:00
vicrodh fcda0ddf36 refactor: centralize button styles in app.css
- Add global .btn, .btn-primary, .btn-secondary, .btn-danger, .btn-ghost classes
- Add --danger color CSS variables for multi-theme support
- Add .btn-sm and .btn-lg size modifiers
- Refactor all modals and views to use global button classes
- Remove 260+ lines of duplicated button CSS across components

Files updated:
- FavoritesEditModal, FolderEditModal, FolderSettingsModal
- LocalLibraryTagEditorModal, MigrationModal, PlaylistImportModal
- PlaylistModal, Sidebar, LocalLibraryView, PlaylistManagerView
2026-01-26 18:02:58 -06:00
vicrodh 1751a83499 fix(ui): align metadata footer buttons with app style
cx
2026-01-26 17:45:08 -06:00
vicrodh c09a4233db fix(ui): align metadata editor footer buttons and spacing
cx
2026-01-26 17:42:34 -06:00
vicrodh 138f4388b7 fix(ui): ensure 5-row tracklist scroll and footer alignment
cx
2026-01-26 17:34:52 -06:00
vicrodh 6b107a8c57 fix(ui): stabilize metadata editor table and footer
cx
2026-01-26 17:19:51 -06:00
vicrodh be605dacf4 refactor(ui): polish metadata editor table and footer
cx
2026-01-26 17:05:51 -06:00
vicrodh 9889303a13 fix(ui): improve tracklist table and footer controls
cx
2026-01-26 16:55:01 -06:00
vicrodh 333c53002e fix(ui): tabular tracklist with vertical snap
cx
2026-01-26 16:49:13 -06:00
vicrodh 3ca9fe48af fix(ui): compute total discs without const tag
cx
2026-01-26 16:43:08 -06:00
vicrodh c63290b483 refactor(ui): update local metadata editor layout
cx
2026-01-26 16:40:32 -06:00
vicrodh cf41862c50 fix(ui): size local tag editor modal inputs
cx
2026-01-26 16:31:10 -06:00
vicrodh 13ee849604 fix(ui): ensure modals overlay sidebar and player
cx
2026-01-26 15:44:33 -06:00
vicrodh 4bc4bb0132 fix(ui): hide Discogs panel until fetch
cx
2026-01-26 15:36:39 -06:00
vicrodh 885b5f73b5 refactor(ui): align album artwork labels and grid
cx
2026-01-26 15:31:09 -06:00
vicrodh db45369b0a fix(ui): match Discogs cover size to preview
cx
2026-01-26 15:14:44 -06:00
vicrodh 8c99794fbf fix(ui): update album artwork button copy
cx
2026-01-26 15:13:26 -06:00
vicrodh 3ed0b19d16 fix(ui): adjust album settings modal artwork
cx
2026-01-26 15:12:56 -06:00
vicrodh 90d2bd94ae revert: album settings artwork panel polish
cx
2026-01-26 15:09:28 -06:00
vicrodh d0a0562885 fix(ui): polish album settings artwork panel
cx
2026-01-26 15:07:56 -06:00
vicrodh 4d139f78a0 refactor(ui): move Discogs results into artwork panel
cx
2026-01-26 14:47:55 -06:00
vicrodh 9dc0a87740 fix(ui): restore LocalLibrary album header layout
cx
2026-01-26 14:39:41 -06:00
vicrodh 6517cfc791 refactor(ui): align album settings actions layout
cx
2026-01-26 14:31:51 -06:00
vicrodh 249d49ab4f refactor(ui): adjust album settings header layout
cx
2026-01-26 13:45:54 -06:00
vicrodh 130f94ee43 refactor(ui): tighten album settings layout
cx
2026-01-26 13:35:56 -06:00
vicrodh 11efbd5a59 fix(ui): use alert for metadata errors
cx
2026-01-26 13:27:58 -06:00
vicrodh b8cc181974 fix(ui): refine album settings metadata entry
cx
2026-01-26 13:27:26 -06:00
vicrodh 92d601a35b feat(ui): add LocalLibrary metadata editor modal
cx
2026-01-26 13:25:00 -06:00
vicrodh 5d812f4966 feat(library): add LocalLibrary tag editor backend
cx
2026-01-26 13:24:51 -06:00
Victor RH 302fd200ae Merge branch 'fix/chromecast-parity' into pre-release 2026-01-26 11:37:02 -06:00
Victor RH 19aa5ca4a1 Adds Flatpak sandbox instructions
Provides instructions and a UI section to guide users on granting filesystem access and network sharing permissions to the Flatpak version of the app.

Removes redundant home directory permission in tauri config.
2026-01-26 11:34:32 -06:00
vicrodh 2f4b79f1bf fix(cast): cleanup Chromecast connection on app exit 2026-01-26 11:01:14 -06:00
vicrodh 1384a1d276 feat(cast): add position tracking and auto-advance for Chromecast
- Add cast_get_position command for Chromecast media position
- Add CastPositionInfo struct with position, duration, player_state, idle_reason
- Extend position polling to work with both DLNA and Chromecast
- Detect track end on Chromecast via IDLE state with FINISHED reason
- Unify polling logic for both protocols

cpvsc
2026-01-26 10:41:35 -06:00
vicrodh 5a2eba97d9 fix(cast): reset player state on cast disconnect
- Add onCastDisconnected callback to castStore
- Reset isPlaying state when cast disconnects
- Ensures play indicator stops in UI when DLNA disconnects

cpvsc
2026-01-26 10:20:32 -06:00
vicrodh 7ee12ea1b2 feat(cast): show cast badge and DLNA/Cast icon in AudioOutputBadges
- Add cast-aware badge that shows protocol name (DLNA/CAST/AIR)
- Show protocol-specific SVG icons in tooltip (dlna.svg, cast_audio.svg)
- Hide DAC passthrough and exclusive mode badges when casting
- Stop hardware polling when casting to avoid misleading info
- Add purple theme styling for cast badge consistent with cast UI

cpvsc
2026-01-26 10:16:39 -06:00
vicrodh 71ae2f92c1 feat(dlna): add position tracking and seekbar support
DLNA POSITION TRACKING:
- Added GetPositionInfo SOAP action to query current playback position
- Added GetTransportInfo SOAP action to get transport state (PLAYING/PAUSED/STOPPED)
- New dlna_get_position command returns position, duration, and transport state
- Added parse_time_string() helper for HH:MM:SS format

FRONTEND INTEGRATION:
- castStore: Added position polling (1s interval) when connected to DLNA
- castStore: New getCastPosition() for UI components
- castStore: Automatic polling start/stop on track play/disconnect
- playerStore: Subscribes to castStore for position updates
- playerStore: Updates currentTime from cast position when casting

This enables the seekbar to display accurate position during DLNA playback.
Seek functionality was already implemented (dlna_seek command).

Files modified:
- src-tauri/src/cast/dlna/device.rs
- src-tauri/src/cast/dlna/commands.rs
- src-tauri/src/cast/dlna/mod.rs
- src-tauri/src/lib.rs
- src/lib/stores/castStore.ts
- src/lib/stores/playerStore.ts
2026-01-26 09:41:11 -06:00
vicrodh 003468a28e fix(dlna): use fixed port 9876 and add extensive logging
CHANGES:
- MediaServer now uses fixed port 9876 (falls back to random if busy)
  This improves firewall compatibility for DLNA casting
- Added timeout (10s) for SOAP actions to prevent deadlocks
- Added extensive logging throughout DLNA flow:
  - Command entry point logging
  - MediaServer lifecycle (start, thread, requests)
  - SOAP action responses
  - Content-type and DIDL metadata details

VERIFIED WORKING:
- DLNA device discovery ✓
- Connection to gmediarender ✓
- SetAVTransportURI SOAP action ✓
- Play SOAP action ✓
- MediaServer serving audio to DLNA renderer ✓

Files modified:
- src-tauri/src/cast/dlna/device.rs
- src-tauri/src/cast/dlna/commands.rs
- src-tauri/src/cast/media_server.rs
2026-01-26 09:30:00 -06:00
vicrodh 892341b773 fix(dlna): use dynamic protocolInfo and add debug logging
PROBLEM:
- DLNA device detection and connection worked
- Audio playback on DLNA devices did not work

ROOT CAUSE:
- DIDL-Lite metadata had hardcoded protocolInfo='audio/flac'
- Many DLNA devices silently reject content when protocolInfo
  doesn't match the actual MIME type
- No debug logging to diagnose SOAP action failures

FIX:
- Pass actual content_type from Qobuz stream to DIDL builder
- Generate protocolInfo dynamically based on real MIME type
- Add extensive debug logging for:
  - MediaServer URL generated
  - Content-Type from Qobuz
  - Complete DIDL-Lite metadata
  - SOAP action responses (SetAVTransportURI, Play)
  - Error details when actions fail

Files modified:
- src-tauri/src/cast/dlna/device.rs
- src-tauri/src/cast/dlna/commands.rs
2026-01-26 07:56:08 -06:00