-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Milestone
Description
Description
Full release detail screen with track list and integrated audio preview player, including background playback support.
Prerequisites: #79 (iOS audio session) and #80 (proxy validation spike) must be complete before building playback features to ensure the audio proxy works on iOS.
Release detail view (navigated from feed tap):
- Large artwork at top
- Artist, title, label, release date, source URL ("Open in Browser")
- Notes field β editable (inline editing with auto-save on blur)
- Tags display β assignable (tap to open tag picker, changes apply immediately)
- Track list with position, name, duration, play button
Preview playback:
- Tap track β resolve stream URL (reuse
fetch_preview_streamcommand) - Stream caching: Audio bytes are cached locally in
discovery_stream_cache(same as desktop). On playback, always check local cache first β only fetch from external URL if no cached data exists or the cache entry has expired. This enables full offline/airplane mode playback of previously listened tracks. - Mini-player bar appears at the bottom of the main view (above safe area): artwork, track name, play/pause, progress
- Mini-player persists across drawer open/close and navigation
- Swipe up mini-player β expanded player: large artwork, scrubber, prev/next track
- Reuse
previewPlayer.tsservice (HTML5 Audio in WebView) from$shared/services/ - Reuse
playerStorepreview playback state from$shared/stores/
Background playback:
- Audio continues when app is backgrounded or screen is lock (enabled by οΈπ - iOS audio session and background playbackΒ #79)
- Lock screen shows Now Playing controls with track info and artwork
- Previous/next track navigation works from lock screen
Stream proxy: Reuse proxy.rs on mobile (axum runs in Tauri mobile β validated by #80)
Key files:
apps/mobile/src/lib/components/discovery/ReleaseDetail.svelteβ newapps/mobile/src/lib/components/player/MiniPlayer.svelteβ newapps/mobile/src/lib/components/player/ExpandedPlayer.svelteβ newshared/services/previewPlayer.tsβ reuseshared/stores/player.tsβ reuse
Dependencies: #53 (discovery feed), #79 (iOS audio session), #80 (proxy validation spike)
Open questions
- Should the expanded player use a swipe-up gesture or a tap-to-expand pattern?
- Should the mini-player show a progress bar or just the current track info?
- How should the tag picker modal look on mobile? Full-screen bottom sheet with category sections?
Acceptance criteria
- Release detail displays all metadata and track list
- Notes are editable inline with auto-save
- Tags are assignable via a tag picker modal
- Tapping a track starts preview playback
- Cached streams are served from local DB without network requests
- Streams are only fetched externally when no valid cache entry exists
- Previously played tracks are playable in airplane mode
- Mini-player shows during playback, persists across navigation
- Expanded player accessible via swipe-up or tap
- Previous/next track navigation within release
- Audio continues playing when app is backgrounded
- Lock screen shows Now Playing info with playback controls
- Stream resolution and proxy caching work on iOS
Tasks
TBD
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels