Album-Ansicht, mitlaufender Songtext, Cover-Cache, Server-Favoriten

Die letzten vier Punkte aus dem Review-Bericht.

G2 — Server-Bereich: Ein Tipp auf ein Album spielte sofort alles ab;
hineinsehen ging nicht. Jetzt Album- und Kuenstler-Ansicht mit Cover,
Kuenstler, Titelzahl, Gesamtdauer, "Abspielen"/"Zufaellig" und der
Titelliste; Antippen startet an dieser Stelle. Dazu "Mehr Alben laden" —
die Liste hoerte bei 50 auf, ohne dass etwas darauf hinwies.
NICHT umgesetzt: den Server-Bereich aus dem Download-Tab loesen (das
widerspricht Commit 34d6d8e, "Auf Wunsch von Dustin") und eine
Server-Suche (die Suche bleibt ausdruecklich rein lokal).

G8 — Songtext: Traegt der Text Zeitmarken, laeuft er mit; die aktive Zeile
ist hervorgehoben, Antippen springt an die Stelle. Ohne Zeitmarken bleibt
es eine Textwand — die App schaut nach, statt zu raten.

G10 — Cover bleiben liegen. Eigener Ordner, einmal geholt. Der Schluessel
haengt an der Album-Kennung, nicht an der Adresse: die traegt bei jedem
App-Start ein neues Token, und der Ordner waere sonst gewachsen, ohne je
einen Treffer zu liefern. Keine neue Abhaengigkeit.

G3 — Das Herz ist bei Server-Titeln nicht mehr ausgegraut, sondern
favorisiert am Server (star/unstar) — dort, wo der Favoriten-Abgleich sie
auch wieder abholt. Offen bleibt der schwere Teil: Wiedergabezaehler,
Historie und Kategorien braeuchten fuer Server-Titel eine Zeile in der
Bibliothek.

Aus dem Code-Review nachgebessert (sieben Punkte): das Herz behielt beim
Titelwechsel seinen Zustand; recycelte Listenzeilen zeigten kurz das Cover
der vorherigen; der neue Songtext bekam bei Server-Titeln die
Abspiel-Adresse statt der Server-Kennung und fand deshalb nie einen Text;
ein einmal fehlgeschlagenes Cover blieb die ganze Sitzung grau; "Server
nicht erreichbar" sah aus wie "Album hat keine Titel", womit der
Wiederholen-Knopf unerreichbar war; die Kuenstler-Ansicht waere immer leer
geblieben, weil getArtist die Titel gar nicht mitliefert; und zwei
gleichzeitige Cover-Abrufe konnten ein zerschnittenes Bild hinterlassen.

Selbst gefunden: das Haekchen "schon geladen" fragte pro Zeile die Platte
ab, bei jedem Positionswechsel neu. Jetzt einmal je Bildschirm.

457 Tests gruen (vorher 433), flutter analyze ohne Befund, Release-APK
gebaut.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013xAHJTJM6UUqmjUgk1PUEd
This commit is contained in:
Hermes (Server)
2026-08-23 21:53:31 +02:00
co-authored by Claude Opus 5
parent b42e045e67
commit 0d76d8cc58
16 changed files with 1194 additions and 142 deletions
+88
View File
@@ -5,6 +5,94 @@ Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/).
## [Unreleased]
### 🧩 Die letzten vier Punkte aus dem Review (2026-08-23)
**G2 — Server-Bereich.** Ein Tipp auf ein Album spielte sofort das ganze
Album ab; hineinsehen ging nicht.
- 💿 **Album- und Künstler-Ansicht.** Großes Cover, Künstler, Titelzahl,
Gesamtdauer, „Abspielen" und „Zufällig" — darunter die Titelliste mit
Nummer und Dauer. Antippen startet **an dieser Stelle**, nicht am Anfang.
Der laufende Titel ist auch hier markiert, und schon geladene Titel tragen
ein Häkchen.
- 📄 **Mehr als 50 Alben.** Die Liste hörte bei 50 auf, ohne dass etwas
darauf hinwies. Jetzt gibt es „Mehr Alben laden", und wenn der Server
weniger als eine volle Seite liefert, verschwindet der Knopf von selbst.
- 🚫 **Nicht umgesetzt:** „Server-Bereich aus dem Download-Tab lösen" stand
auch im Befund — das widerspricht aber Commit `34d6d8e` („Auf Wunsch von
Dustin"), mit dem der Tab bewusst wieder „Download" heißt. Die
Tab-Struktur bleibt unangetastet. Ebenso weggelassen: eine Suche über den
Server, weil die Suche ausdrücklich rein lokal bleiben soll.
**G8 — Songtext läuft mit.** Bisher eine Textwand ohne Bezug zur Wiedergabe.
- 🎤 Trägt der Text Zeitmarken (LRC), läuft er jetzt **mit**: die aktuelle
Zeile ist hell und größer, der Rest gedämpft, und die Ansicht schiebt sie
in die Mitte. **Antippen springt an die Stelle im Lied.**
- 📃 Ein Text ohne Zeitmarken bleibt eine Textwand — beides kommt vor, je
nach Tag und Server, und die App schaut nach, statt zu raten.
**G10 — Cover bleiben jetzt da.** `Image.network` merkt sich Bilder nur im
Arbeitsspeicher; nach jedem Neustart fragte jede Zeile ihr Cover erneut beim
Server an, und ohne Netz gab es gar keins.
- 🖼️ Cover landen in einem eigenen Ordner und werden nur einmal geholt. Der
Schlüssel hängt an der Album-Kennung, **nicht** an der Adresse — die trägt
bei jedem App-Start ein neues Token, und der Ordner wäre sonst gewachsen,
ohne je einen Treffer zu liefern.
- 🧹 Bewusst im Cache-Ordner: ein Cover ist ersetzbar. Räumt Android auf,
lädt es sich beim nächsten Mal neu — anders als die Musik-Downloads.
- ⚠️ Nur echte Bilder werden abgelegt: Subsonic meldet Fehler mit HTTP 200
und JSON, und das läge sonst dauerhaft als „Cover" im Ordner.
**Aus dem Code-Review nachgebessert — sieben Punkte:**
- 🤍 **Das Herz behielt beim Titelwechsel seinen Zustand.** Einen Server-Titel
favorisieren, der Player geht zum nächsten — und der zeigte sich als
Favorit, obwohl er nie einer war. Der nächste Tipp hätte ihn dann
„entfavorisiert".
- 🖼️ **Beim Scrollen zeigten Zeilen kurz das Cover der vorherigen.** Listen
verwenden ihre Zeilen wieder; ohne Schlüssel behielt die Bildabfrage das
alte Ergebnis, bis das neue da war — bei ungecachten Covern sekundenlang.
Ein Rückschritt gegenüber dem vorherigen Stand, deshalb hier mitbehoben.
- 🎤 **Der neue mitlaufende Songtext funktionierte für Server-Titel gar
nicht.** Ihm wurde die Abspiel-Adresse statt der Server-Kennung
übergeben; die App fragte den Server nach einem Titel namens „https://…"
und bekam nie einen Text.
- 🎨 **Ein Cover, das einmal nicht lud, blieb die ganze Sitzung grau.** Startet
die App ohne Netz, waren alle Cover bis zum Neustart weg — auch wenn die
Verbindung längst wieder stand. Fehlschläge werden nicht mehr gemerkt.
- 🚨 **„Server nicht erreichbar" sah aus wie „Album hat keine Titel".** Beide
Abfragen verschluckten ihre Fehler und lieferten eine leere Liste; der
Wiederholen-Knopf, den ich gebaut hatte, war damit unerreichbar.
- 🎸 **Die Künstler-Ansicht wäre immer leer geblieben.** Die App las die Titel
aus `getArtist`, wo die Subsonic-Schnittstelle sie gar nicht mitliefert —
Alben kommen dort ohne ihre Titel. Jetzt wird je Album nachgefragt.
(Vorbestehend, aber ich habe einen ganzen Bildschirm darauf gebaut.)
- 🧩 Dazu ein seltener, aber dauerhafter Fall: zwei gleichzeitige Abrufe
desselben Covers schrieben in dieselbe Zwischendatei und konnten ein
zerschnittenes Bild hinterlassen, das nie wieder verschwindet.
- 🧹 **Selbst gefunden:** Das Häkchen „schon geladen" fragte pro Zeile die
Platte ab — und die Zeile zeichnet sich bei jedem Positionswechsel neu.
Das wäre eine Dateiprüfung pro Sekunde und Titel gewesen. Jetzt einmal je
Bildschirm aus der Datenbank.
-**Getestet:** 457 Tests grün (vorher 433), `flutter analyze` ohne Befund,
Release-APK gebaut. Neu: 16 Tests für den LRC-Parser, 5 für den
Cover-Schlüssel und 3 für die Album-Daten.
**G3 — Server-Titel nicht länger zweiter Klasse.**
- 🤍 Das Herz ist bei Server-Titeln nicht mehr ausgegraut, sondern
favorisiert **am Server** (`star`/`unstar`) — genau dort, wo der
Favoriten-Abgleich in den Einstellungen sie auch wieder abholt. Ein Titel
der Bibliothek wird weiterhin lokal favorisiert.
- ️ Weiterhin offen: Wiedergabezähler, Historie und Kategorien gibt es für
reine Server-Titel nicht — dafür bräuchten sie eine Zeile in der
Bibliothek, und das wäre ein eigener Umbau.
### 📥 Alben und Künstler offline mitnehmen — und der Zwischenspeicher hat endlich eine Grenze (2026-08-23)
Bisher landete Musik nur zufällig auf dem Gerät: was man abspielte, blieb