import 'package:flutter/foundation.dart'; import '../services/navidrome_service.dart'; import 'database.dart'; /// Koordiniert Playlisten- und Favoriten-Operationen; benachrichtigt Listener /// nach jeder Mutation (für Feedback wie SnackBars — die Listen selbst /// beobachten UIs direkt über die watch()-Streams von [MeloDb]). class PlaylistService extends ChangeNotifier { PlaylistService(this.db, {NavidromeService? navidrome}) : _navidrome = navidrome ?? NavidromeService(); final MeloDb db; final NavidromeService _navidrome; Future createPlaylist(String name, {String? description}) async { final id = await db.createPlaylist(name, description: description); notifyListeners(); return id; } Future deletePlaylist(String id) async { await db.deletePlaylist(id); notifyListeners(); } Future addSongToPlaylist(String playlistId, String songId, int position) async { await db.addSongToPlaylist(playlistId, songId, position); notifyListeners(); } Future removeSongFromPlaylist(String playlistId, String songId) async { await db.removeSongFromPlaylist(playlistId, songId); notifyListeners(); } Future reorderSong(String playlistId, String songId, int newPosition) async { await db.reorderPlaylistSong(playlistId, songId, newPosition); notifyListeners(); } Future reorderAll(String playlistId, List orderedSongIds) async { await db.reorderAllPlaylistSongs(playlistId, orderedSongIds); notifyListeners(); } Future toggleFavorite(String songId) async { await db.toggleFavorite(songId); notifyListeners(); } /// Lädt alle Favoriten vom Navidrome-Server und importiert sie lokal. /// Gibt die Anzahl geladen Favoriten zurück oder 0 wenn nicht verbunden. Future syncFavoritesFromServer() async { await _navidrome.ladeGespeicherteZugangsdaten(); if (!_navidrome.istVerbunden) return 0; try { final serverFavorites = await _navidrome.getFavorites(); for (final song in serverFavorites) { // Prüfe ob Song lokal existiert, dann markiere als Favorit final exists = await db.songExists(song.id); if (exists) { await db.setFavorite(song.id, true); } } notifyListeners(); return serverFavorites.length; } catch (e) { debugPrint('Fehler beim Laden von Server-Favoriten: $e'); return 0; } } }