55 lines
1.7 KiB
Dart
55 lines
1.7 KiB
Dart
import '../database/db_helper.dart';
|
|
import '../models/song.dart';
|
|
|
|
class FavoritenService {
|
|
static final FavoritenService _instanz = FavoritenService._();
|
|
factory FavoritenService() => _instanz;
|
|
FavoritenService._();
|
|
|
|
final DbHelper _db = DbHelper();
|
|
int? _favoritenPlaylistId;
|
|
|
|
int? get favoritenId => _favoritenPlaylistId;
|
|
|
|
Future<void> init() async {
|
|
final playlists = await _db.allePlaylists();
|
|
final vorhanden = playlists.where((p) => p['name'] == '⭐ Favoriten').toList();
|
|
if (vorhanden.isNotEmpty) {
|
|
_favoritenPlaylistId = vorhanden.first['id'] as int;
|
|
} else {
|
|
_favoritenPlaylistId = await _db.playlistErstellen('⭐ Favoriten');
|
|
}
|
|
}
|
|
|
|
Future<bool> istFavorit(int songId) async {
|
|
if (_favoritenPlaylistId == null) return false;
|
|
final songs = await _db.songsDerPlaylist(_favoritenPlaylistId!);
|
|
return songs.any((s) => s.id == songId);
|
|
}
|
|
|
|
Future<void> umschalten(int songId) async {
|
|
if (_favoritenPlaylistId == null) return;
|
|
if (await istFavorit(songId)) {
|
|
await _db.songAusPlaylistEntfernen(_favoritenPlaylistId!, songId);
|
|
} else {
|
|
final songs = await _db.songsDerPlaylist(_favoritenPlaylistId!);
|
|
await _db.songZurPlaylist(_favoritenPlaylistId!, songId, songs.length);
|
|
}
|
|
}
|
|
|
|
Future<List<Song>> alleFavoriten() async {
|
|
if (_favoritenPlaylistId == null) return [];
|
|
return _db.songsDerPlaylist(_favoritenPlaylistId!);
|
|
}
|
|
|
|
Future<Set<int>> favoritenIds() async {
|
|
if (_favoritenPlaylistId == null) return {};
|
|
final d = await _db.db;
|
|
final rows = await d.rawQuery(
|
|
'SELECT song_id FROM playlist_songs WHERE playlist_id = ?',
|
|
[_favoritenPlaylistId],
|
|
);
|
|
return rows.map((r) => r['song_id'] as int).toSet();
|
|
}
|
|
}
|