From 8126a165201cbcacdec9a3e6e75e1a81efb87121 Mon Sep 17 00:00:00 2001 From: "Hermes (Server)" Date: Thu, 27 Aug 2026 14:11:36 +0200 Subject: [PATCH] Race behoben: Playlist-Wiederherstellung nur nach abgeschlossenem Sync-Lauf --- lib/main.dart | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index c70dbb4..d66b618 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -218,12 +218,17 @@ class _HomeShellState extends State with WidgetsBindingObserver { final sync = context.read(); final playlists = context.read(); await sync.automatisch(); - // Nur auf einem Gerät ohne eigene Playlisten: nach dem ersten Abgleich - // (der Songs erst cloudIds zuweist) holt das die gesicherten Listen - // zurück. Vor dem Sync liefe jede songByCloudId-Suche ins Leere und - // legte leere Playlisten an, die der countPlaylists()-Riegel dann für - // immer blockierte. - unawaited(playlists.stelleWiederHer()); + // Nur auf einem Gerät ohne eigene Playlisten, und nur nach einem + // tatsächlich abgeschlossenen Sync-Lauf: läuft parallel schon ein + // echter Sync (z. B. weil ein Berechtigungsdialog während des + // Erststarts einen App-Resume auslöst und diese Methode ein zweites + // Mal anstößt), kehrt automatisch() oben wegen des _laeuft-Guards + // sofort zurück — dann liefe jede songByCloudId-Suche noch ins Leere, + // legte leere Playlisten an, und der countPlaylists()-Riegel würde + // jeden weiteren Versuch für immer blockieren. + if (!sync.laeuft) { + unawaited(playlists.stelleWiederHer()); + } if (!mounted) return; final bericht = sync.bericht; if (bericht == null) return;