Suche trennt nach Titel, Kuenstler, Kategorien und Wiedergabelisten
Der Suchen-Tab war 59 Zeilen: ein Textfeld ueber einer flachen
Liederliste, nur ueber Titel/Kuenstler/Album. Wer "Nightcore" eingab,
fand alle Titel dieses Kuenstlers untereinander, aber weder den
Kuenstler selbst noch eine gleichnamige Kategorie oder Liste.
- Vier Abschnitte mit Ueberschrift und Trefferzahl. Alben stecken in
"Kategorien" — der Album-Name ist in Melo die erste Kategorie eines
Titels, ein eigener Abschnitt waere dieselbe Liste zweimal.
- Treffer am Wortanfang zuerst, dann alphabetisch.
- Entprellt (250 ms); vorher baute jeder Tastendruck alles neu auf.
- Letzte acht Suchen, gemerkt beim Abschicken, mit Loeschen-Knopf.
- Der Tab folgt jetzt dem Aufbau der uebrigen Tabs (war ein Scaffold
mit eigener AppBar innerhalb eines Tabs).
- Bewusst rein lokal, ohne Server-Abfrage.
Herausgeloest, weil es sonst eine dritte Kopie gegeben haette:
TitelListenScreen ("Ueberschrift + Liederliste", stand zweimal wortgleich
im Baum) und SongZeile (die Suche setzt einzelne Zeilen in ihre
Abschnitte; eine ganze SongList waere dort verschachteltes Scrollen).
Aus dem Code-Review nachgebessert: Suche und Zuordnung benutzen dieselbe
Normalform, sonst zeigte ein Treffer "0 Titel" und oeffnete eine leere
Liste; Kategorien ohne lebende Titel fallen weg; alle Abschnitte sind
gedeckelt; die Drift-Stroeme werden nicht mehr je Rebuild neu abonniert;
das Loeschkreuz erscheint sofort statt nach 250 ms.
Tot geworden und entfernt: MeloDb.searchSongs samt Test.
396 Tests gruen (vorher 360), 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:
co-authored by
Claude Opus 5
parent
d15867d962
commit
ca28264c0e
+85
-22
@@ -5,6 +5,91 @@ Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### 🔎 Die Suche trennt jetzt nach Titel, Künstler, Kategorien und Listen (2026-08-23)
|
||||
|
||||
Der Suchen-Tab war bisher **59 Zeilen**: ein Textfeld über einer flachen
|
||||
Liederliste. Wer „Nightcore“ eingab, bekam alle Titel dieses Künstlers
|
||||
untereinander — den Künstler selbst, seine Kategorie oder eine gleichnamige
|
||||
Wiedergabeliste fand er nicht.
|
||||
|
||||
- 🗂️ **Vier Abschnitte statt einer Liste.** Titel · Künstler · Kategorien ·
|
||||
Wiedergabelisten, jeder mit Überschrift und Trefferzahl. Alben stecken in
|
||||
„Kategorien“ — der Album-Name *ist* in Melo die erste Kategorie eines
|
||||
Titels, ein eigener Alben-Abschnitt wäre dieselbe Liste zweimal.
|
||||
- ⬆️ **Treffer am Wortanfang stehen oben.** Wer „roses“ tippt, meint eher
|
||||
„Roses“ als „Wild Roses“. Innerhalb dieser beiden Ränge alphabetisch.
|
||||
- ⏱️ **Entprellt (250 ms).** Vorher baute jeder einzelne Tastendruck die
|
||||
komplette Trefferliste neu auf.
|
||||
- 🕘 **Letzte acht Suchen.** Sie stehen da, solange das Feld leer ist; Antippen
|
||||
übernimmt den Begriff. Gemerkt wird ein Begriff erst beim Abschicken —
|
||||
halbe Wörter aus dem Tippen sind keine Suche, die man wiederholen möchte.
|
||||
- 🧹 **Der Tab sieht aus wie die anderen.** Er war ein `Scaffold` mit eigener
|
||||
`AppBar` *innerhalb* eines Tabs, während „Meine Musik“ und „Favoriten“ eine
|
||||
Kopfzeile im Inhalt haben. Jetzt einheitlich, mit demselben runden Suchfeld
|
||||
wie auf der Startseite.
|
||||
- ♻️ **Aufgeräumt, weil es sonst eine dritte Kopie gegeben hätte:** Die
|
||||
Ansicht „Überschrift + Liederliste“ stand zweimal wortgleich im Baum
|
||||
(hinter einem Künstler und hinter einer Kategorie). Sie ist jetzt eine
|
||||
Klasse, die auch die Suche benutzt. Ebenso ist die einzelne Songzeile aus
|
||||
der Liederliste herausgelöst — die Suche setzt einzelne Zeilen in ihre
|
||||
Abschnitte, eine ganze Liste wäre dort eine verschachtelte Scrollfläche.
|
||||
- 🐛 **Beim Bauen selbst gefunden und behoben:** Der Verlauf wurde zuerst
|
||||
beim Aufbau der Trefferliste geschrieben. Das hätte eine Endlosschleife
|
||||
ergeben — schreiben löst ein Neuzeichnen aus, das wieder schreibt.
|
||||
- 📴 **Kein Server-Teil.** Bewusst so entschieden: die Suche läuft rein
|
||||
lokal, damit sie sofort antwortet und ohne Netz funktioniert.
|
||||
- 🔍 **Aus dem Code-Review nachgebessert (die wichtigsten drei):**
|
||||
**(1)** Die Suche fasste „Neoni", „NEONI" und „Neoni " zu einem Treffer
|
||||
zusammen — die Titel dazu wurden aber unter der rohen Schreibweise gesucht.
|
||||
Ergebnis: „0 Titel" und ein leerer Bildschirm beim Antippen. Beide Seiten
|
||||
benutzen jetzt dieselbe Normalform, und verschiedene Schreibweisen
|
||||
desselben Künstlers fallen dabei zusammen statt sich gegenseitig zu
|
||||
verstecken. Dasselbe galt für Kategorien.
|
||||
**(2)** Eine Kategorie, an der nur noch gelöschte Titel hängen, erschien
|
||||
als Treffer und führte ins Leere. Solche Treffer fallen jetzt weg.
|
||||
**(3)** Alle Abschnitte sind auf fünf Einträge gedeckelt, nicht nur die
|
||||
Titel. Eine Eingabe wie „a" hätte sonst hunderte Künstlerzeilen bei jedem
|
||||
Neuzeichnen gebaut. Die Gesamtzahl steht ohnehin in der Überschrift.
|
||||
Dazu kleinere Sachen: die beiden Datenbank-Ströme werden nicht mehr bei
|
||||
jedem Neuzeichnen neu abonniert, der Fehlerfall der Wiedergabelisten wird
|
||||
behandelt, und das Löschkreuz im Suchfeld erscheint sofort statt nach
|
||||
250 ms — vorher sprang das Textfeld dabei um eine Knopfbreite enger.
|
||||
|
||||
- 🗑️ **Verlauf lässt sich löschen.** Ein „Löschen" neben der Überschrift.
|
||||
(Ohne das hätte es keine Möglichkeit gegeben, gespeicherte Suchbegriffe
|
||||
wieder loszuwerden.)
|
||||
|
||||
- ♻️ **Tot geworden und entfernt:** `MeloDb.searchSongs` samt Test — die
|
||||
alte LIKE-Abfrage hat nach dem Umbau keinen Aufrufer mehr.
|
||||
|
||||
- ✅ **Getestet:** 396 Tests grün (vorher 360), `flutter analyze` ohne Befund,
|
||||
Release-APK gebaut. Neu: 25 Tests für die Suchregeln und die Bündelung
|
||||
nach Schreibweise, 7 für den Verlauf, 7 Widget-Tests für die Abschnitte
|
||||
(inklusive einem, der prüft, dass wirklich entprellt wird).
|
||||
|
||||
|
||||
### 🔁 Positions-Timer überlebt jetzt das Wegwischen (2026-08-23)
|
||||
|
||||
- ⏱️ **Behoben: nach dem Wegwischen der Benachrichtigung merkte sich die App
|
||||
keine Hörposition mehr.** `stop()` brach dabei den Timer ab, der alle fünf
|
||||
Sekunden die Wiedergabeposition sichert — und der entsteht nur **einmal**
|
||||
beim App-Start. Einmal abgebrochen, kam er nie zurück: „Fortsetzen an alter
|
||||
Stelle" hörte still auf zu funktionieren, und zum Server wurde nicht mehr
|
||||
gemeldet, was gehört wurde. Erst ein Neustart half. Der Timer läuft jetzt
|
||||
durch; er kostet nichts, weil er von selbst aussteigt, solange nichts
|
||||
spielt. Abgebrochen wird er nur noch beim endgültigen Aufräumen.
|
||||
|
||||
- 📄 **Korrektur am eigenen Review-Bericht (K4).** Dort stand, die
|
||||
Alben-Ansicht sei „verlorengegangen". Das war falsch: der Alben-Reiter wurde
|
||||
**bewusst** durch „Kategorie" ersetzt — der Album-Name eines Liedes *ist* in
|
||||
Melo seine erste Kategorie (`category_list.dart:12`, `kategorienAusTags`).
|
||||
Was wirklich fehlt, ist die Album-**Detailansicht** (großes Cover,
|
||||
Künstler, Gesamtdauer) und die Sortierung nach Tracknummer — letztere
|
||||
braucht zuerst eine Schema-Erweiterung, weil die Tracknummer bisher
|
||||
überhaupt nicht eingelesen wird. Im Bericht ist der Punkt richtiggestellt.
|
||||
|
||||
- ✅ **Getestet:** 360 Tests grün, `flutter analyze` ohne Befund.
|
||||
|
||||
### 🚑 Fünf P0-Fehler behoben: Benachrichtigung, Offline, Cover, Warteschlange (2026-08-23)
|
||||
|
||||
Ergebnis einer vollständigen Durchsicht der App gegen den Maßstab „Apple
|
||||
@@ -92,28 +177,6 @@ die die App gab und der Code nicht hielt**.
|
||||
mehr — vorbestehend), und die Server-Cover haben nur einen Zwischenspeicher
|
||||
im Arbeitsspeicher, keinen auf der Platte.
|
||||
|
||||
### 🔁 Positions-Timer überlebt jetzt das Wegwischen (2026-08-23)
|
||||
|
||||
- ⏱️ **Behoben: nach dem Wegwischen der Benachrichtigung merkte sich die App
|
||||
keine Hörposition mehr.** `stop()` brach dabei den Timer ab, der alle fünf
|
||||
Sekunden die Wiedergabeposition sichert — und der entsteht nur **einmal**
|
||||
beim App-Start. Einmal abgebrochen, kam er nie zurück: „Fortsetzen an alter
|
||||
Stelle" hörte still auf zu funktionieren, und zum Server wurde nicht mehr
|
||||
gemeldet, was gehört wurde. Erst ein Neustart half. Der Timer läuft jetzt
|
||||
durch; er kostet nichts, weil er von selbst aussteigt, solange nichts
|
||||
spielt. Abgebrochen wird er nur noch beim endgültigen Aufräumen.
|
||||
|
||||
- 📄 **Korrektur am eigenen Review-Bericht (K4).** Dort stand, die
|
||||
Alben-Ansicht sei „verlorengegangen". Das war falsch: der Alben-Reiter wurde
|
||||
**bewusst** durch „Kategorie" ersetzt — der Album-Name eines Liedes *ist* in
|
||||
Melo seine erste Kategorie (`category_list.dart:12`, `kategorienAusTags`).
|
||||
Was wirklich fehlt, ist die Album-**Detailansicht** (großes Cover,
|
||||
Künstler, Gesamtdauer) und die Sortierung nach Tracknummer — letztere
|
||||
braucht zuerst eine Schema-Erweiterung, weil die Tracknummer bisher
|
||||
überhaupt nicht eingelesen wird. Im Bericht ist der Punkt richtiggestellt.
|
||||
|
||||
- ✅ **Getestet:** 360 Tests grün, `flutter analyze` ohne Befund.
|
||||
|
||||
### 🏷️ Der zweite Tab heißt wieder „Download" (2026-08-21)
|
||||
|
||||
- 📥 **Aus „Online" wird „Download".** Der Bereich behält seinen Inhalt
|
||||
|
||||
Reference in New Issue
Block a user