Skip to content

οΈπŸ›  - Mobile release detail view and preview playbackΒ #54

@maxwellmattryan

Description

@maxwellmattryan

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_stream command)
  • 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.ts service (HTML5 Audio in WebView) from $shared/services/
  • Reuse playerStore preview playback state from $shared/stores/

Background playback:

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 β€” new
  • apps/mobile/src/lib/components/player/MiniPlayer.svelte β€” new
  • apps/mobile/src/lib/components/player/ExpandedPlayer.svelte β€” new
  • shared/services/previewPlayer.ts β€” reuse
  • shared/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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions