songs list tab

This commit is contained in:
austinried
2025-12-06 09:42:53 +09:00
parent 16a79c81cb
commit a4e4c6fa57
6 changed files with 113 additions and 32 deletions

View File

@@ -6,7 +6,15 @@ import '../query.dart';
part 'library_dao.g.dart';
typedef AristListItem = ({models.Artist artist, int? albumCount});
typedef AristListItem = ({
models.Artist artist,
int? albumCount,
});
typedef SongListItem = ({
models.Song song,
String? albumCoverArt,
});
extension on SortDirection {
OrderingMode toMode() => switch (this) {
@@ -111,7 +119,7 @@ class LibraryDao extends DatabaseAccessor<SubtracksDatabase>
.get();
}
Future<List<models.Song>> listSongs(SongsQuery q) {
Future<List<SongListItem>> listSongs(SongsQuery q) {
var joinPlaylistSongs = false;
var filter = songs.sourceId.equals(q.sourceId);
@@ -127,6 +135,11 @@ class LibraryDao extends DatabaseAccessor<SubtracksDatabase>
final query =
songs.select().join([
leftOuterJoin(
albums,
albums.id.equalsExp(songs.albumId) &
albums.sourceId.equals(q.sourceId),
),
if (joinPlaylistSongs)
leftOuterJoin(
playlistSongs,
@@ -134,6 +147,9 @@ class LibraryDao extends DatabaseAccessor<SubtracksDatabase>
playlistSongs.songId.equalsExp(songs.id),
),
])
..addColumns([
albums.coverArt,
])
..where(filter)
..orderBy(
q.sort
@@ -144,6 +160,9 @@ class LibraryDao extends DatabaseAccessor<SubtracksDatabase>
SongsColumn.starred => songs.starred,
SongsColumn.disc => songs.disc,
SongsColumn.track => songs.track,
SongsColumn.album => songs.album,
SongsColumn.artist => songs.artist,
SongsColumn.albumArtist => albums.albumArtist,
},
mode: sort.dir.toMode(),
),
@@ -153,7 +172,14 @@ class LibraryDao extends DatabaseAccessor<SubtracksDatabase>
_limitQuery(query: query, limit: q.limit, offset: q.offset);
return query.map((row) => (row.readTable(songs))).get();
return query
.map(
(row) => (
song: row.readTable(songs),
albumCoverArt: row.read(albums.coverArt),
),
)
.get();
}
Selectable<models.Album> getAlbum(int sourceId, String id) {