docs(changelog): 2.1 — Musik-Match, Android artist pin, pin/search/similar fixes, player + swipe polish
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
6f455b565f
commit
e82dec7e01
1 file changed
+43
@@ -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
|
## [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.
|
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.
|
||||||
|
|||||||
Reference in new issue
Block a user