Initial commit
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user