feat(android): offline downloads — albums, playlists, detail screen & playback
Download albums/playlists to private device storage (Room + WorkManager, HttpURLConnection streaming). New Offline tab lists groups with progress; tapping a group opens a detail screen (cover-art rows, play/shuffle, per-song delete from device). Downloaded tracks play from disk on every screen. Album/playlist cards show a downloaded badge; download button resumes missing songs. Song storage is dedup'd by ID and reference-counted on delete. Fixes: Android 15 download crash (dropped banned DATA_SYNC foreground service); offline detail flash-back (initial empty state no longer mistaken for deleted). Docs: CHANGELOG 0.10 + parity matrix; condensed README Features. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
5a2ab54bbb
commit
73fcfae30f
29 files changed
+1326
-134
No files matched your search
@@ -7,70 +7,17 @@ Built with Vite + vanilla ES modules (web) and Jetpack Compose + Media3/ExoPlaye
|
||||
|
||||
## Features
|
||||
|
||||
### Music Library
|
||||
- Stream music from your Navidrome / Subsonic library
|
||||
- Browse artists, albums, playlists, starred tracks, genres, and random picks
|
||||
- Search across songs, albums, and artists
|
||||
- Star and context menu on every song row
|
||||
- Play count display (optional)
|
||||
- **Library** — Stream from Navidrome / Subsonic; browse artists, albums, playlists, genres, starred, and random; search; star + context menu on every row.
|
||||
- **Playback** — Queue with shuffle, repeat, and radio mode (endless similar songs); gapless-style preload; lock-screen / notification controls; Navidrome scrobbling.
|
||||
- **Lyrics** — Synced and plain lyrics via lrclib.net, auto-fetched and cached per session.
|
||||
- **Artist pages** — Hero card, Last.fm bio / similar / top songs, Ticketmaster events, and iTunes cross-reference showing owned vs. missing tracks.
|
||||
- **Playlists** — Create, rename, delete, add/remove tracks, and upload a cover (Web + Android).
|
||||
- **Importer & downloads** — Paste a Spotify / YouTube / YouTube Music / SoundCloud link to download via yt-dlp, with iTunes metadata enrichment and duplicate detection.
|
||||
- **Metadata editor** (web) — Edit tags + cover art; files are renamed/moved and Navidrome is rescanned on save.
|
||||
- **Offline** (Android) — Download albums/playlists to private storage; an Offline tab to play and manage them; downloaded tracks play from disk on every screen.
|
||||
- **Audiobookshelf** — Browse and stream audiobooks with chapter navigation, speed control, sleep timer, and progress sync.
|
||||
|
||||
### Lyrics
|
||||
- Synced and plain lyrics via lrclib.net, auto-fetched per track
|
||||
- Fallback chain: exact match → no-duration match → fuzzy artist+title search → title-only search
|
||||
- In-memory cache per session
|
||||
|
||||
### Artist Pages
|
||||
- Hero card with artist photo and blurred background
|
||||
- Bio, similar artists, top songs from Last.fm
|
||||
- Concert events via Ticketmaster
|
||||
- Albums cross-referenced against iTunes catalog — shows downloaded vs. missing tracks
|
||||
- Artist cards with images in search results
|
||||
|
||||
### Playback
|
||||
- Queue with shuffle, repeat (all / one), and radio mode (endless similar songs)
|
||||
- Now Playing overlay with synced lyrics, queue view, star, and multi-artist links
|
||||
- Gapless-style playback — next track pre-buffered before current track ends
|
||||
- Lock screen / notification media controls
|
||||
- Scrobbling to Navidrome (configurable delay)
|
||||
|
||||
### Discovery
|
||||
- iTunes / Last.fm — charts, global search, 30-second previews, similar artists
|
||||
- Song Importer — paste a Spotify, YouTube, YouTube Music, or SoundCloud link to download
|
||||
|
||||
### Downloads
|
||||
- Download tracks, albums, or entire artists from YouTube Music / SoundCloud / Spotify via yt-dlp
|
||||
- iTunes metadata enrichment — album art, year, track number, genre
|
||||
- Duplicate detection, standard folder/filename structure
|
||||
|
||||
### Metadata Editor
|
||||
- Edit tags (title, artist, album, genre, year, track, disc, cover art)
|
||||
- File renamed and moved automatically; Navidrome rescan triggered on save
|
||||
|
||||
### Playlists
|
||||
- Create, rename, and delete playlists
|
||||
- Add tracks via "Add to Playlist" context menu
|
||||
- Remove tracks from a playlist (edit mode on Android; inline on Web)
|
||||
- Cover image upload (Web + Android)
|
||||
|
||||
### Audiobookshelf Integration
|
||||
- Browse libraries and audiobooks on both Web and Android
|
||||
- Stream audiobooks with chapter-by-chapter navigation
|
||||
- Playback speed control (0.5× – 2.0×)
|
||||
- Sleep timer
|
||||
- Progress sync — current position saved back to ABS server every 30 s
|
||||
- Chapter track mode — progress bar shows current chapter length instead of full book (toggle in Settings)
|
||||
- Tab/section hidden until ABS is configured in Settings
|
||||
|
||||
### App — Web PWA
|
||||
- Installable on Android / iOS / desktop
|
||||
- Multiple color themes, German UI
|
||||
|
||||
### App — Android (native Jetpack Compose)
|
||||
- Media3 / ExoPlayer backend
|
||||
- OS notification with playback controls
|
||||
- ABS audiobook notification: chapter name shown as title, book title as artist; extra buttons — Kapitel zurück | 30s zurück | Play/Pause | 30s vor | Kapitel vor (compact + expanded)
|
||||
- Last played song shown in mini player bar on restart; tap to resume
|
||||
- Full playlist management: create, rename (with description), delete, remove tracks, cover upload
|
||||
Web is an installable PWA (themes, German UI); Android is native Jetpack Compose + Media3/ExoPlayer with a mini player, media/ABS notifications, and Android Auto. See [CHANGELOG.md](CHANGELOG.md) for the full web/Android parity matrix.
|
||||
|
||||
---
|
||||
|
||||
@@ -119,6 +66,7 @@ NovaSonic/
|
||||
│ └── app/src/main/kotlin/com/novasonic/app/
|
||||
│ ├── api/ # SubsonicClient, AbsClient, LrcLibClient, ItunesClient
|
||||
│ ├── data/ # PrefsStore (DataStore), MusicRepository
|
||||
│ ├── offline/ # Room DB, DAO, OfflineRepository, DownloadWorker (offline downloads)
|
||||
│ ├── player/ # PlayerController, MusicService (Media3)
|
||||
│ ├── ui/
|
||||
│ │ ├── screen/ # HomeScreen, NowPlayingScreen, AbsScreen, SettingsScreen, …
|
||||
|
||||
Reference in new issue
Block a user