Positions-Timer ueberlebt stop(); K4 im Review-Bericht richtiggestellt

stop() brach _positionRecordTimer ab. Der Timer entsteht nur einmal im
Konstruktor, war also fuer den Rest der Sitzung weg. Da auch das System
stop() aufruft (Benachrichtigung wegwischen), merkte sich die App danach
keine Hoerposition mehr und scrobbelte nicht — bis zum Neustart und ohne
Hinweis. Der Timer steigt ohnehin selbst aus, solange nichts laeuft;
abgebrochen wird er jetzt nur noch in dispose().

Dazu eine Korrektur am eigenen Review: K4 behauptete, die Alben-Achse sei
verlorengegangen. Sie wurde bewusst durch "Kategorie" ersetzt — der
Album-Name ist in Melo die erste Kategorie eines Titels
(category_list.dart:12, kategorienAusTags). Was wirklich fehlt, ist die
Album-Detailansicht und die Tracknummer, die gar nicht eingelesen wird.

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 18:51:18 +02:00
co-authored by Claude Opus 5
parent e6d5f1c9ee
commit d15867d962
3 changed files with 64 additions and 16 deletions
+9 -1
View File
@@ -405,10 +405,18 @@ class MeloAudioHandler extends BaseAudioHandler with QueueHandler, SeekHandler {
@override
Future<void> pause() => _player.pause();
/// Der Positions-Timer wird hier bewusst **nicht** abgebrochen.
///
/// Er ist ein `Timer.periodic` und entsteht nur einmal im Konstruktor —
/// einmal abgebrochen, käme er für den Rest der App-Sitzung nicht zurück.
/// [stop] löst aber nicht nur der Nutzer aus: das System ruft es beim
/// Wegwischen der Benachrichtigung auf. Danach merkte sich die App keine
/// Hörposition mehr und scrobbelte nicht mehr — bis zum Neustart und ohne
/// jeden Hinweis. Er kostet nichts: seine erste Zeile steigt aus, solange
/// nichts läuft. Abgebrochen wird er allein in [dispose].
@override
Future<void> stop() async {
sleepTimer.cancel();
_positionRecordTimer.cancel();
await _player.stop();
await super.stop();
}