CRIT: - Tag-Leiste: Toggle-Kopf 'Tags & Filter' eingebaut (war unerreichbar) + TagStats - Profil: Cloud-Count vor Dialog aufloesen (kein 'Instance of Future' mehr) HIGH: - CloudEinstellungen: toten Sync-Timer entfernt (echter Timer im ViewModel) - StatistikCard + RecentWidget jetzt eingebaut (gesamtMB/gesamtMin endlich genutzt) - CloudService als Singleton (konsistenter Token-Zustand in allen Services) MED/LOW: - Playlist-Erkennung nur noch via list= Parameter - Player: fehlende Quelle wird geloggt statt still - song_tile: null-ID-Guard vor Tag-Dialog - Scanner-Log mit Exception-Objekt - FavoritenService: anzahlFavoriten() fuer StatistikCard
46 lines
1.4 KiB
Dart
46 lines
1.4 KiB
Dart
import '../database/db_helper.dart';
|
|
import '../models/song.dart';
|
|
import '../models/playlist.dart';
|
|
|
|
class PlaylistService {
|
|
final DbHelper _db = DbHelper();
|
|
|
|
Future<List<Playlist>> allePlaylists() async {
|
|
final rows = await _db.allePlaylists();
|
|
final listen = <Playlist>[];
|
|
for (final r in rows) {
|
|
final id = r['id'] as int;
|
|
final songs = await _db.songsDerPlaylist(id);
|
|
listen.add(Playlist.fromMap(r, songCount: songs.length));
|
|
}
|
|
return listen;
|
|
}
|
|
|
|
Future<int> erstellen(String name) async {
|
|
return _db.playlistErstellen(name);
|
|
}
|
|
|
|
Future<List<Song>> songs(int playlistId) async {
|
|
return _db.songsDerPlaylist(playlistId);
|
|
}
|
|
|
|
Future<void> songHinzufuegen(int playlistId, int songId) async {
|
|
final songs = await _db.songsDerPlaylist(playlistId);
|
|
await _db.songZurPlaylist(playlistId, songId, songs.length);
|
|
}
|
|
|
|
Future<void> songEntfernen(int playlistId, int songId) async {
|
|
await _db.songAusPlaylistEntfernen(playlistId, songId);
|
|
}
|
|
|
|
Future<void> reihenfolgeSpeichern(int playlistId, List<Song> songs) async {
|
|
final songIds = songs.map((s) => s.id).whereType<int>().toList();
|
|
await _db.playlistReihenfolgeAktualisieren(playlistId, songIds);
|
|
}
|
|
|
|
Future<bool> istInPlaylist(int playlistId, int songId) async {
|
|
final songs = await _db.songsDerPlaylist(playlistId);
|
|
return songs.any((s) => s.id == songId);
|
|
}
|
|
}
|