From e82dec7e014bcc6dbba7516cc35d9bf2705a1078 Mon Sep 17 00:00:00 2001 From: Honey Date: Mon, 17 Aug 2026 11:45:28 +0200 Subject: [PATCH] =?UTF-8?q?docs(changelog):=202.1=20=E2=80=94=20Musik-Matc?= =?UTF-8?q?h,=20Android=20artist=20pin,=20pin/search/similar=20fixes,=20pl?= =?UTF-8?q?ayer=20+=20swipe=20polish?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6d78c9..cb6e942 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -64,6 +64,49 @@ Versioning: two-part `MAJOR.MINOR` — each release bumps the minor (features an --- +## [2.1] — 2026-08-14 + +Builds on the 2.0 listening archive with a **head-to-head "Musik-Match"**, brings the **artist pin** +to Android at parity with web, and fixes a batch of same-name-artist and player rough edges. + +### Added +- **Musik-Match (Head-to-Head) — Web + Android** — compare two users' listening taste from the + shared play-log. New scrobble routes `GET /scrobble/users` (partner picker) and + `GET /scrobble/compare?with=` — the match score is the **cosine of the two users' artist-play + vectors** (0–100). Shows shared artists (mirrored bars), shared tracks, and each side's unique top + artists. Opened from Settings ("🎧 Musik-Match"). Only aggregates are exposed, never one user's raw + history. +- **Artist pin on Android (parity with web)** — read AND write the shared server-side pins + (`/api/artist-overrides`) that fix same-name-artist collisions. A "⚙ Falscher Künstler?/Gepinnt" + pill on the artist hero opens a picker (Deezer search + a **paste-a-Deezer-link/id** route, the + reliable way when `/search/artist` can't surface a low-profile same-name artist); when pinned, the + page enriches straight from the pinned Deezer id (albums / top tracks / fans / image). Pins set on + either platform apply on both. +- **Swipe between Erkunden sub-tabs (Android)** — a left/right swipe switches Bibliothek ↔ Global, + two-way synced with the tab bar (HorizontalPager). +- **Similar Artists with profile pictures (Web)** — the artist page's "Ähnliche Künstler" now render + as avatar chips, matching the Android app (previously plain text). + +### Fixed +- **Artist pin — search & similar artists (Web + Android)** — a pinned artist now shows the correct + Deezer photo in library search (not the wrong same-name person's), and its "Similar Artists" use + Deezer's **related** for the pinned artist instead of Last.fm's list (which was keyed to the + merged/wrong Navidrome artist and went "weird"). +- **Android player — seek broke after seamless track transitions** — skipping through + already-buffered tracks left `durationMs` stuck at 0 (the player stayed READY, so `syncState()` + wasn't re-called and `ctrl.duration` was still `TIME_UNSET`), so the seek bar snapped playback to + the start (or to a stale offset). `durationMs` now self-heals via the ticker + a fallback to the + song's known duration. No app restart needed. +- **Erkunden swipe polish (Android)** — pre-compose the neighbour page so the first swipe doesn't + hitch, drive the tab indicator off the pager so it moves with the swipe, and keep the Top-Alben + charts anchored to the top (were vertically centered). +- **Web** — the pin picker crashed (`esc()` on a numeric Deezer id) and the pin button moved to the + banner's top-right; pinning by a pasted Deezer link/id was added. +- **Android** — Settings spacing: the gap now sits below "Musik-Match", grouping it with "Meine + Statistiken". + +--- + ## [2.0] — 2026-08-07 Big change: **NovaSonic gets its own self-hosted, multi-user listening archive.** Navidrome only stores a play *count* and the *last* play date — no timestamped history — so per-day/month/year stats and a yearly "Wrapped" were impossible. Koito and Spindle (the off-the-shelf options) are effectively single-user. Since NovaSonic *is* the player, it now records every counted play into an **isolated scrobble service** with its own database, and shows the results in a **statistics view on web and Android**. This runs **in addition to** the existing Navidrome/Last.fm scrobble — it never replaces it.