perf(library): lazy-load collections and dispose queries

This commit is contained in:
zarzet
2026-07-15 21:32:43 +07:00
parent 7f1c3e60db
commit 17dbcc1338
11 changed files with 217 additions and 85 deletions
+27 -8
View File
@@ -263,16 +263,23 @@ class LibraryCollectionsDatabase {
_tableLoved,
orderBy: 'added_at DESC, rowid DESC',
);
final playlistRows = await db.query(
_tablePlaylists,
orderBy: 'created_at DESC, rowid DESC',
);
final playlistRows = await db.rawQuery('''
SELECT
p.*,
CASE WHEN p.cover_image_path IS NULL OR p.cover_image_path = '' THEN (
SELECT pt.track_json
FROM $_tablePlaylistTracks pt
WHERE pt.playlist_id = p.id
ORDER BY pt.added_at ASC, pt.rowid ASC
LIMIT 1
) END AS preview_track_json
FROM $_tablePlaylists p
ORDER BY p.created_at DESC, p.rowid DESC
''');
final playlistTrackRows = await db.query(
_tablePlaylistTracks,
// Playlists keep playlist order: batch imports insert rows in playlist
// order and later additions append, so insertion order IS the order
// (unlike wishlist/loved, which show newest first).
orderBy: 'playlist_id ASC, added_at ASC, rowid ASC',
columns: ['playlist_id', 'track_key'],
orderBy: 'playlist_id ASC, rowid ASC',
);
final favoriteArtistRows = await db.query(
_tableFavoriteArtists,
@@ -288,6 +295,18 @@ class LibraryCollectionsDatabase {
);
}
Future<List<Map<String, dynamic>>> loadPlaylistTracks(
String playlistId,
) async {
final db = await database;
return db.query(
_tablePlaylistTracks,
where: 'playlist_id = ?',
whereArgs: [playlistId],
orderBy: 'added_at ASC, rowid ASC',
);
}
Future<List<PlaylistPickerSummaryRow>> loadPlaylistPickerSummaries(
List<String> requestedTrackKeys,
) async {