diff --git a/CHANGELOG.md b/CHANGELOG.md index 31f4d11..e10a133 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,10 +30,9 @@ Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/). stillschweigend „keine Favoriten". - ☁️ **Neu: „Auf den Server laden".** Im Auswahl-Modus von „Meine Musik" (langes Drücken) lassen sich einzelne Titel markieren und gezielt - hochladen — mit Fortschritt und **Abbrechen**. Titel, die schon oben sind, - werden übersprungen; einzelne Fehlschläge stoppen den Rest nicht. Die - Aktion erscheint bewusst nur dort und nicht bei Favoriten, - Wiedergabelisten oder Titellisten. + hochladen. Titel, die schon oben sind, werden übersprungen; einzelne + Fehlschläge stoppen den Rest nicht. Die Aktion erscheint bewusst nur dort + und nicht bei Favoriten, Wiedergabelisten oder Titellisten. - ⬇️ **Neu: einzelne Server-Titel offline nehmen.** In der Album- und Künstler-Ansicht hat jede Zeile jetzt einen Knopf — bisher ging nur „ganzes Album". Schon geladene Titel lassen sich dort auch wieder entfernen. diff --git a/lib/library/database.dart b/lib/library/database.dart index 766d16a..dc50242 100644 --- a/lib/library/database.dart +++ b/lib/library/database.dart @@ -546,9 +546,13 @@ class MeloDb extends _$MeloDb { .write(SongsCompanion(cloudId: Value(cloudId))); } - Future songByCloudId(String cloudId) => - (select(songs)..where((s) => s.cloudId.equals(cloudId))) - .getSingleOrNull(); + Future songByCloudId(String cloudId) async { + final treffer = await (select(songs) + ..where((s) => s.cloudId.equals(cloudId)) + ..limit(1)) + .get(); + return treffer.isEmpty ? null : treffer.single; + } /// Titel, die am Server gelöscht wurden, auch auf dem Gerät als gelöscht /// markieren. Grabstein statt echtem Löschen — sonst legt der nächste Scan diff --git a/lib/main.dart b/lib/main.dart index f98b10e..c70dbb4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -89,9 +89,6 @@ Future main() async { _db, cloud: MeloCloudService(auth: _bakaAuth), ); - // Nur auf einem Gerät ohne eigene Playlisten: nach Neuinstallation oder - // Zurücksetzen holt das die gesicherten Listen zurück. - unawaited(_playlists.stelleWiederHer()); final navidrome = NavidromeService(); await navidrome.ladeGespeicherteZugangsdaten(); _downloads = DownloadService(db: _db, navidrome: navidrome); @@ -219,7 +216,14 @@ class _HomeShellState extends State with WidgetsBindingObserver { /// Gleicht ab und zeigt danach höchstens einmal den „Was ist neu"-Bericht. Future _gleicheAbUndZeigeBericht() async { 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()); if (!mounted) return; final bericht = sync.bericht; if (bericht == null) return;