import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'navidrome_service.dart'; /// Merkt sich, welche Alben auf dem Musikserver schon bekannt waren, und /// meldet, was seitdem dazugekommen ist. class ServerNeuheiten extends ChangeNotifier { ServerNeuheiten({required this.holeAlben}); static const _key = 'server_bekannte_alben'; /// Holt die neuesten Alben vom Server. final Future> Function() holeAlben; List _neue = const []; /// Alben, die seit dem letzten Nachsehen dazugekommen sind. List get neue => _neue; Future pruefe() async { final List alben; try { alben = await holeAlben(); } catch (e) { debugPrint('Server-Neuheiten konnten nicht geladen werden: $e'); return; } final prefs = await SharedPreferences.getInstance(); final bekannt = prefs.getStringList(_key); // Beim allerersten Mal ist noch nichts bekannt. Alles als neu zu melden // wäre unbrauchbar — also erst einmal nur den Stand festhalten. if (bekannt == null) { await prefs.setStringList(_key, alben.map((a) => a.id).toList()); return; } final gesehen = bekannt.toSet(); _neue = alben.where((a) => !gesehen.contains(a.id)).toList(); notifyListeners(); } /// Nimmt die gemeldeten Alben zur Kenntnis — sie tauchen nicht wieder auf. Future alsGesehenMarkieren() async { if (_neue.isEmpty) return; final prefs = await SharedPreferences.getInstance(); final bekannt = (prefs.getStringList(_key) ?? const []).toSet() ..addAll(_neue.map((a) => a.id)); await prefs.setStringList(_key, bekannt.toList()); _neue = const []; notifyListeners(); } }