From 5528947a93c43671e64d1f47542d38275f12f30a Mon Sep 17 00:00:00 2001 From: Honey Date: Fri, 31 Jul 2026 16:31:55 +0200 Subject: [PATCH] feat: fans on local Navidrome artists (android) + harmonize web fan layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Android local artist page (ArtistDetailScreen/ArtistViewModel) now resolves the Deezer artist (fan-sorted, so same-name collisions pick the popular one) and shows " Fans" under the name — parity with the web local artist page. - Also migrated ArtistViewModel's preview to the app-level PreviewController: the local artist page had its OWN uncontrollable MediaPlayer preview, which had the same "keeps playing after navigating away" bug. Now every preview uses the global bar. - Web: the artist-hero fan line was laid out in a row next to the name (flex without column direction) and used an odd tinted color — now stacked cleanly under the name in a muted white. SW ns-v54. - CHANGELOG: documented the above + added a Known Bug (Android synced-lyrics auto-scroll still doesn't follow playback). Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 7 ++- .../app/ui/screen/ArtistDetailScreen.kt | 23 +++++--- .../app/viewmodel/ArtistViewModel.kt | 55 ++++++------------- public/sw.js | 2 +- styles.css | 6 +- 5 files changed, 42 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e603e0e..713180f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,12 +74,12 @@ Big change: **the entire metadata/search stack moved from Apple's iTunes to Deez - **Backend** — Removed the dead iTunes `/search` proxy and the Apple charts RSS proxy; the Deezer proxy (`/api/deezer/*`) now also serves charts and the editor lookup ### Added -- **Web + Android** — **Same-name artist disambiguation**: Deezer's artist search isn't ranked by popularity, so a name collision (5 artists named "Joji") returned a niche one first — the artist page then loaded the wrong discography and owned songs didn't show as downloaded. Artists are now sorted by Deezer fan count, and on a local artist page with a real collision the pick is tie-broken by **song overlap** with your library (each artist has different songs). The **fan count is shown** on search artist cards and the artist page -- **Android** — **Global 30s-preview control bar**: a preview started on an album/artist/Explore screen used to keep playing with no way to stop it once you navigated away. The preview now lives at the app level with a bar (above the mini player, on every screen) to pause/resume/stop it; starting real playback cancels the preview +- **Web + Android** — **Same-name artist disambiguation**: Deezer's artist search isn't ranked by popularity, so a name collision (5 artists named "Joji") returned a niche one first — the artist page then loaded the wrong discography and owned songs didn't show as downloaded. Artists are now sorted by Deezer fan count, and on a local artist page (web) with a real collision the pick is tie-broken by **song overlap** with your library (each artist has different songs). The **fan count is shown** on search artist cards and on both the Deezer *and* local Navidrome artist pages (web + Android) +- **Android** — **Global 30s-preview control bar**: a preview started on an album/artist/Explore screen used to keep playing with no way to stop it once you navigated away (the local artist page had its *own* uncontrollable preview too). All previews now run through one app-level player with a bar (above the mini player, on every screen) to pause/resume/stop it; starting real playback cancels the preview - **Backend** — Unit tests for the Deezer mapping/matching logic (`backend/test/deezer.test.js`, run with `npm test`), incl. per-track numbering, mixed-artist album-artist stability, explicit flags and the Japanese-title match guard. A live smoke test runs with `RUN_LIVE=1` ### Notes -- Deploy: `git pull`, then rebuild the frontend (`docker compose up -d --build novasonic-frontend`) and restart the backend (`docker compose restart novasonic-backend`). Service worker bumped to `ns-v53` +- Deploy: `git pull`, then rebuild the frontend (`docker compose up -d --build novasonic-frontend`) and restart the backend (`docker compose restart novasonic-backend`). Service worker bumped to `ns-v54` - Titles a user picked stay as chosen; only derived fields (album, album-artist, genre, year, artwork) follow Deezer --- @@ -412,6 +412,7 @@ Primary causes identified: - **Web + Android** — yt-dlp backend update / maintenance ### Known Bugs +- **Android (lyrics)** — Synced-lyrics **auto-scroll still does not follow playback**: the current line is highlighted but the list doesn't scroll to keep it centered, so you have to scroll by hand. Web autoscroll works. Not yet fixed. - **Web (PWA, desktop)** — The Windows media tile (SMTC) briefly closes and reopens when skipping tracks. Swapping the `