import 'package:riverpod_annotation/riverpod_annotation.dart'; import '../database/database.dart'; import '../state/settings.dart'; part 'sync_service.g.dart'; @Riverpod(keepAlive: true) class SyncService extends _$SyncService { @override DateTime build() { return DateTime.now(); } Future syncAll() async { final db = ref.read(databaseProvider); await db.transaction(() async { await Future.wait([ db.transaction(_syncAllArtists), db.transaction(_syncAllAlbums), db.transaction(_syncAllPlaylists), db.transaction(_syncAllSongs), ]); }); state = DateTime.now(); } Future _syncAllArtists() async { final source = ref.read(musicSourceProvider); final db = ref.read(databaseProvider); final ids = {}; await for (var artists in source.allArtists()) { ids.addAll(artists.map((e) => e.id.value)); await db.saveArtists(artists); } await db.deleteArtistsNotIn(source.id, ids); } Future _syncAllAlbums() async { final source = ref.read(musicSourceProvider); final db = ref.read(databaseProvider); final ids = {}; await for (var albums in source.allAlbums()) { ids.addAll(albums.map((e) => e.id.value)); await db.saveAlbums(albums); } await db.deleteAlbumsNotIn(source.id, ids); } Future _syncAllPlaylists() async { final source = ref.read(musicSourceProvider); final db = ref.read(databaseProvider); final ids = {}; await for (var playlists in source.allPlaylists()) { ids.addAll(playlists.map((e) => e.playist.id.value)); await db.savePlaylists(playlists); } await db.deletePlaylistsNotIn(source.id, ids); } Future _syncAllSongs() async { final source = ref.read(musicSourceProvider); final db = ref.read(databaseProvider); final ids = {}; await for (var songs in source.allSongs()) { ids.addAll(songs.map((e) => e.id.value)); await db.saveSongs(songs); } await db.deleteSongsNotIn(source.id, ids); } // Future syncArtist(String id) async { // final source = ref.read(musicSourceProvider); // final db = ref.read(databaseProvider); // final artist = await source.artist(id); // await saveArtist(db, artist); // } // Future syncAlbum(String id) async { // final source = ref.read(musicSourceProvider); // final db = ref.read(databaseProvider); // final album = await source.album(id); // await saveAlbum(db, album); // } // Future syncPlaylist(String id) async { // final source = ref.read(musicSourceProvider); // final db = ref.read(databaseProvider); // final playlist = await source.playlist(id); // await savePlaylist(db, playlist); // } }