docs: changelog 1.2 + CLAUDE.md notes (web router, album_artist derivation)
CHANGELOG: 1.2 entry for the post-1.1 work — web forward/back navigation, album detail album-artist, metadata autofill "&" normalization, Android Erkunden back re-assert + directional tab transitions, and the backend mixed-artist / album_artist download fixes. CLAUDE.md: album/artist download album_artist comes from iTunes collectionArtistName (not the request/lead-single artist); client-side History router applies nsIdx on popstate for both directions and must never pushState in the back path. README left unchanged — the post-1.1 changes are fixes/polish, not new features. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
b1a32f5130
commit
f21174bd2c
2 files changed
+28
No files matched your search
@@ -55,6 +55,26 @@ Versioning: two-part `MAJOR.MINOR` — each release bumps the minor (features an
|
||||
|
||||
---
|
||||
|
||||
## [1.2] — 2026-07-25
|
||||
|
||||
Follow-up to 1.1: web history navigation, correct download tagging for mixed-artist albums, and UI polish.
|
||||
|
||||
### Added
|
||||
- **Android** — Directional bottom-nav tab transitions: the slide follows the tapped tab's position (a tab to the right slides in from the right, one to the left from the left) instead of a fixed, sometimes-random-feeling direction. Applied across all four enter/exit/pop transitions; detail-screen push/pop is unchanged
|
||||
|
||||
### Fixed
|
||||
- **Web** — Browser / mouse **Forward** navigation now works (previously only Back did): `popstate` applies the target history entry (`nsIdx`) for both directions, and the back handler no longer `pushState()`s over the browser's forward stack. In-app back buttons route through `history.back()` so the browser and app stacks stay in sync
|
||||
- **Web** — Album detail header showed the **first track's** artist (e.g. "TWICE" on a soundtrack) instead of the album artist; it now reads the album's own album-artist fields from `getAlbum` (matches the Android app)
|
||||
- **Web** — Metadata autofill (iTunes / MusicBrainz) normalizes the trailing `" & "` in a multi-artist credit ("A, B & C" → "A; B; C"), but only when the value is already a list, so band names like "Simon & Garfunkel" stay intact
|
||||
- **Android** — Erkunden (Apple) overlay back no longer *sometimes* jumped to Home: the root-level back callback is re-asserted on every navigation, so it can't lose back-priority to the NavHost after an album drill-down or tab switch
|
||||
- **Backend (download)** — Mixed-artist albums search **per track**: the YTM/YouTube query and channel filter use each track's own performer, so soundtrack tracks by other artists (TWICE's "Strategy", MeloMance's "Love, Maybe") are found instead of failing with "Nicht eindeutig gefunden"
|
||||
- **Backend (download)** — `album_artist` is derived from iTunes' album-level `collectionArtistName` (identical across the album) instead of the request's artist — which could be the lead single's performer, so a whole KPop soundtrack was tagged `album_artist = TWICE`. Applies to album and artist downloads; each track still gets its own per-track artist tag
|
||||
|
||||
### Changed
|
||||
- **Web** — NowPlaying favorite star is vertically centered with the whole title / album / artist block instead of pinned to the title line
|
||||
|
||||
---
|
||||
|
||||
## [1.1] — 2026-07-19
|
||||
|
||||
Polish release: Android navigation and offline resilience, download accuracy for artists with stylised names, and a fix for the lyrics outage caused by lrclib rate-limiting.
|
||||
|
||||
@@ -21,6 +21,10 @@ plus a **Node.js/Express backend** that downloads tracks via yt-dlp and proxies
|
||||
|
||||
- `src/` — web PWA (vanilla ES modules). State in `src/state.js` (the `S` object);
|
||||
Subsonic/iTunes API in `src/api.js`; views in `src/views/`, UI in `src/ui/`.
|
||||
- **Client-side router** (`src/views/navigation.js`, History API): `navigate()` pushStates `{nsIdx}`
|
||||
only on genuine new navigation; `popstate` applies the target entry's `nsIdx` for **both** back and
|
||||
forward. Never `pushState` inside the `popstate`/back path — it wipes the browser's forward stack
|
||||
(that was the "forward doesn't work" bug). In-app back buttons call `history.back()` (one path).
|
||||
- `backend/novasonic-server.js` — Express API (downloads, metadata edit/delete, events/ABS proxy).
|
||||
- `backend/lib/` — `ytdlp.js` (download + cascade + ffmpeg tagging), `downloader.js`,
|
||||
`metadata.js` (iTunes lookup, file resolution helpers), `config.js`, `jobs.js`, `romaji.js`.
|
||||
@@ -68,6 +72,10 @@ Backend runs in Docker (see `docker-compose.yml`); on the deploy host it lives a
|
||||
so without this every track on a soundtrack searched the album-artist blob + its channel filter and
|
||||
matched nothing (e.g. "Strategy" = TWICE, "Love, Maybe" = MeloMance failed). The `album_artist` tag
|
||||
still uses `albumArtist`, so album grouping is unaffected.
|
||||
- **Album/artist download `album_artist`** comes from the iTunes tracks' `collectionArtistName`
|
||||
(album-level, identical across the album), derived in `novasonic-server.js` — **not** the request's
|
||||
`artist`, which can be the lead single's performer (a KPop soundtrack got tagged `album_artist=TWICE`
|
||||
from track 1 "TAKEDOWN"). Falls back to the request artist only when iTunes omits it.
|
||||
- **Always write an `album` tag.** `ytdlp.js` defaults it to `Singles` when no album is known.
|
||||
Previously no tag was written at all, so Navidrome showed its own "Singles" fallback while the
|
||||
metadata editor showed "[Unknown Album]" — the two never matched and file resolution failed.
|
||||
|
||||
Reference in new issue
Block a user