diff --git a/lib/app/lists/albums_grid.dart b/lib/app/lists/albums_grid.dart index b508b5e..1526287 100644 --- a/lib/app/lists/albums_grid.dart +++ b/lib/app/lists/albums_grid.dart @@ -7,6 +7,7 @@ import '../../sources/models.dart'; import '../hooks/use_on_source.dart'; import '../hooks/use_paging_controller.dart'; import '../state/database.dart'; +import '../state/source.dart'; import 'list_items.dart'; const kPageSize = 60; @@ -21,6 +22,7 @@ class AlbumsGrid extends HookConsumerWidget { getNextPageKey: (state) => state.lastPageIsEmpty ? null : state.nextIntPageKey, fetchPage: (pageKey) => db.libraryDao.listAlbums( + sourceId: ref.read(sourceIdProvider), limit: kPageSize, offset: (pageKey - 1) * kPageSize, ), diff --git a/lib/app/lists/artists_list.dart b/lib/app/lists/artists_list.dart index 6e027b8..793cc22 100644 --- a/lib/app/lists/artists_list.dart +++ b/lib/app/lists/artists_list.dart @@ -7,6 +7,7 @@ import '../../database/dao/library_dao.dart'; import '../hooks/use_on_source.dart'; import '../hooks/use_paging_controller.dart'; import '../state/database.dart'; +import '../state/source.dart'; import 'list_items.dart'; const kPageSize = 30; @@ -21,6 +22,7 @@ class ArtistsList extends HookConsumerWidget { getNextPageKey: (state) => state.lastPageIsEmpty ? null : state.nextIntPageKey, fetchPage: (pageKey) => db.libraryDao.listArtists( + sourceId: ref.read(sourceIdProvider), limit: kPageSize, offset: (pageKey - 1) * kPageSize, ), diff --git a/lib/app/state/source.dart b/lib/app/state/source.dart index 60b9532..6736468 100644 --- a/lib/app/state/source.dart +++ b/lib/app/state/source.dart @@ -12,15 +12,13 @@ final activeSourceInitializer = StreamProvider<(int, SubsonicSource)>(( final activeSource = db.sourcesDao.activeSourceId().watchSingle(); - await for (final source in activeSource) { - final sourceId = source.read(db.sources.id)!; - + await for (final sourceId in activeSource) { final subsonicSettings = await db.managers.subsonicSettings .filter((f) => f.sourceId.equals(sourceId)) .getSingle(); yield ( - sourceId, + sourceId!, SubsonicSource( SubsonicClient( http: SubtracksHttpClient(), diff --git a/lib/database/dao/library_dao.dart b/lib/database/dao/library_dao.dart index e2e8773..38dfe94 100644 --- a/lib/database/dao/library_dao.dart +++ b/lib/database/dao/library_dao.dart @@ -13,14 +13,13 @@ class LibraryDao extends DatabaseAccessor LibraryDao(super.db); Future> listAlbums({ + required int sourceId, required int limit, required int offset, }) { final query = albums.select() ..where( - (f) => f.sourceId.equalsExp( - subqueryExpression(db.sourcesDao.activeSourceId()), - ), + (f) => f.sourceId.equals(sourceId), ) ..limit(limit, offset: offset); @@ -28,6 +27,7 @@ class LibraryDao extends DatabaseAccessor } Future> listArtists({ + required int sourceId, required int limit, required int offset, }) async { @@ -42,12 +42,8 @@ class LibraryDao extends DatabaseAccessor ]) ..addColumns([albumCount]) ..where( - artists.sourceId.equalsExp( - subqueryExpression(db.sourcesDao.activeSourceId()), - ) & - albums.sourceId.equalsExp( - subqueryExpression(db.sourcesDao.activeSourceId()), - ), + artists.sourceId.equals(sourceId) & + albums.sourceId.equals(sourceId), ) ..groupBy([artists.sourceId, artists.id]) ..orderBy([OrderingTerm.asc(artists.name)]) diff --git a/lib/database/dao/sources_dao.dart b/lib/database/dao/sources_dao.dart index dd9fbd2..1c36a05 100644 --- a/lib/database/dao/sources_dao.dart +++ b/lib/database/dao/sources_dao.dart @@ -9,10 +9,11 @@ class SourcesDao extends DatabaseAccessor with _$SourcesDaoMixin { SourcesDao(super.db); - JoinedSelectStatement activeSourceId() { - return selectOnly(sources) - ..addColumns([sources.id]) - ..where(sources.isActive.equals(true)); + Selectable activeSourceId() { + return (selectOnly(sources) + ..addColumns([sources.id]) + ..where(sources.isActive.equals(true))) + .map((row) => row.read(sources.id)); } Stream> listSources() {