import 'package:fast_immutable_collections/fast_immutable_collections.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import '../database/database.dart'; import '../models/music.dart'; import '../models/query.dart'; import '../models/support.dart'; import 'settings.dart'; part 'music.g.dart'; @riverpod Stream artist(ArtistRef ref, String id) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.artistById(sourceId, id).watchSingle(); } @riverpod Stream album(AlbumRef ref, String id) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.albumById(sourceId, id).watchSingle(); } @riverpod Stream albumDownloadStatus( AlbumDownloadStatusRef ref, String id, ) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.albumDownloadStatus(sourceId, id).watchSingle(); } @riverpod Stream playlistDownloadStatus( PlaylistDownloadStatusRef ref, String id, ) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.playlistDownloadStatus(sourceId, id).watchSingle(); } @riverpod Stream song(SongRef ref, String id) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.songById(sourceId, id).watchSingle(); } @riverpod Future> albumSongsList( AlbumSongsListRef ref, String id, ListQuery opt, ) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.albumSongsList(SourceId(sourceId: sourceId, id: id), opt).get(); } @riverpod Future> songsByAlbumList( SongsByAlbumListRef ref, ListQuery opt, ) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.songsByAlbumList(sourceId, opt).get(); } @riverpod Stream playlist(PlaylistRef ref, String id) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.playlistById(sourceId, id).watchSingle(); } @riverpod Future> playlistSongsList( PlaylistSongsListRef ref, String id, ListQuery opt, ) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.playlistSongsList(SourceId(sourceId: sourceId, id: id), opt).get(); } @riverpod Future> albumsInIds(AlbumsInIdsRef ref, IList ids) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.albumsInIds(sourceId, ids.toList()).get(); } @riverpod Stream> albumsByArtistId(AlbumsByArtistIdRef ref, String id) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db .albumsByArtistId(sourceId, id) .watch() .map((event) => event.toIList()); } @riverpod Stream> albumGenres(AlbumGenresRef ref, Pagination page) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db .albumGenres(sourceId, page.limit, page.offset) .watch() .map((event) => event.withNullsRemoved().toIList()); } @riverpod Stream> albumsByGenre( AlbumsByGenreRef ref, String genre, Pagination page, ) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db .albumsByGenre(sourceId, genre, page.limit, page.offset) .watch() .map((event) => event.toIList()); } @riverpod Stream songsByGenreCount(SongsByGenreCountRef ref, String genre) { final db = ref.watch(databaseProvider); final sourceId = ref.watch(sourceIdProvider); return db.songsByGenreCount(sourceId, genre).watchSingle(); }