subtracks/lib/database/dao/library_dao.dart
austinried 6609671ae2 cover art color scheme extraction (in background)
refactor text styles to use theme
port over part of album screen
2025-12-03 13:22:14 +09:00

68 lines
1.7 KiB
Dart

import 'package:drift/drift.dart';
import '../../sources/models.dart' as models;
import '../database.dart';
part 'library_dao.g.dart';
typedef AristListItem = ({models.Artist artist, int? albumCount});
@DriftAccessor(include: {'../tables.drift'})
class LibraryDao extends DatabaseAccessor<SubtracksDatabase>
with _$LibraryDaoMixin {
LibraryDao(super.db);
Future<List<models.Album>> listAlbums({
required int sourceId,
required int limit,
required int offset,
}) {
final query = albums.select()
..where(
(f) => f.sourceId.equals(sourceId),
)
..limit(limit, offset: offset);
return query.get();
}
Future<List<AristListItem>> listArtists({
required int sourceId,
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.equals(sourceId) &
albums.sourceId.equals(sourceId),
)
..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();
}
Selectable<models.Album> getAlbum(int sourceId, String id) {
return db.managers.albums.filter(
(f) => f.sourceId.equals(sourceId) & f.id.equals(id),
);
}
}