import 'cloud_service.dart'; /// Bidirektionaler Favoriten-Sync (Sprint D, v2.52). /// /// Root-Cause des alten Bugs: `_syncAlles` las die Server-Favoriten und /// schrieb sie per `syncFavorites` UNVERÄNDERT zurück auf den Server — /// lokale ⭐-Toggles gingen verloren, `server_favorites` wurde nie genutzt. /// /// Neues Verhalten (Merge statt Server-Spiegel): /// 1. **Lokal → Server:** Alle cloud_ids lokaler ⭐-Favoriten werden /// zusammen mit den Server-Favoriten hochgeladen (Vereinigung). Lokale /// Toggles erreichen den Server damit garantiert. /// 2. **Server → Lokal:** Server-Favoriten werden lokal als ⭐ markiert, /// sobald der Song lokal existiert (cloud_id-Verknüpfung). /// 3. **Feuer-und-Vergessen beim Toggle:** `CloudService.setFavorite` /// (deterministisch, kein Toggle) direkt beim lokalen Umschalten; ein /// Fehlschlag wird durch den nächsten vollständigen Sync korrigiert. /// Vereinigt lokale und Server-Favoriten (cloud_ids) — keine Datenverluste /// in beide Richtungen. Sortiert für deterministische Tests. List favoritenMerge({ required Set lokal, required Set server, }) { final merged = {...lokal, ...server}.toList()..sort(); return merged; } /// Feuer-und-Vergessen-Push eines Favoriten-Toggles an den Server. /// Deterministisch via `set` (kein Doppel-Toggle-Risiko). Fehler werden /// still geschluckt — der nächste vollständige Sync korrigiert den Zustand /// (favoritenMerge-Vereinigung). Future pusheFavoritAnServer( CloudService cloud, String cloudId, bool favorit, ) async { await cloud.setFavorite(cloudId, favorit: favorit); }