mirror of
https://github.com/austinried/subtracks.git
synced 2026-02-10 23:02:43 +01:00
active source switching and reactivity
This commit is contained in:
63
lib/database/dao/library_dao.dart
Normal file
63
lib/database/dao/library_dao.dart
Normal file
@@ -0,0 +1,63 @@
|
||||
import 'package:drift/drift.dart';
|
||||
|
||||
import '../../sources/models.dart' as models;
|
||||
import '../database.dart';
|
||||
|
||||
part 'library_dao.g.dart';
|
||||
|
||||
@DriftAccessor(include: {'../tables.drift'})
|
||||
class LibraryDao extends DatabaseAccessor<SubtracksDatabase>
|
||||
with _$LibraryDaoMixin {
|
||||
LibraryDao(super.db);
|
||||
|
||||
Future<List<models.Album>> listAlbums({
|
||||
required int limit,
|
||||
required int offset,
|
||||
}) {
|
||||
final query = albums.select()
|
||||
..where(
|
||||
(f) => f.sourceId.equalsExp(
|
||||
subqueryExpression(db.sourcesDao.activeSourceId()),
|
||||
),
|
||||
)
|
||||
..limit(limit, offset: offset);
|
||||
|
||||
return query.get();
|
||||
}
|
||||
|
||||
Future<List<({models.Artist artist, int albumCount})>> listArtists({
|
||||
required int limit,
|
||||
required int offset,
|
||||
}) async {
|
||||
final albumCount = albums.id.count();
|
||||
|
||||
final query =
|
||||
artists.select().join([
|
||||
leftOuterJoin(
|
||||
albums,
|
||||
albums.artistId.equalsExp(artists.id),
|
||||
),
|
||||
])
|
||||
..addColumns([albumCount])
|
||||
..where(
|
||||
artists.sourceId.equalsExp(
|
||||
subqueryExpression(db.sourcesDao.activeSourceId()),
|
||||
) &
|
||||
albums.sourceId.equalsExp(
|
||||
subqueryExpression(db.sourcesDao.activeSourceId()),
|
||||
),
|
||||
)
|
||||
..groupBy([artists.sourceId, artists.id])
|
||||
..orderBy([OrderingTerm.asc(artists.name)])
|
||||
..limit(limit, offset: offset);
|
||||
|
||||
return (await query.get())
|
||||
.map(
|
||||
(row) => (
|
||||
artist: row.readTable(artists),
|
||||
albumCount: row.read(albumCount) ?? 0,
|
||||
),
|
||||
)
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user