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
+40
View File
@@ -4,6 +4,7 @@ import 'package:spotiflac_android/models/download_item.dart';
import 'package:spotiflac_android/models/settings.dart';
import 'package:spotiflac_android/models/theme_settings.dart';
import 'package:spotiflac_android/models/track.dart';
import 'package:spotiflac_android/providers/library_collections_provider.dart';
import 'package:spotiflac_android/services/app_remote_config_service.dart';
import 'package:spotiflac_android/services/download_request_payload.dart';
import 'package:spotiflac_android/utils/artist_utils.dart';
@@ -13,6 +14,45 @@ import 'package:spotiflac_android/utils/path_match_keys.dart';
import 'package:spotiflac_android/utils/string_utils.dart';
void main() {
group('Library collections', () {
test('keeps playlist membership without eagerly loading track JSON', () {
final playlist = UserPlaylistCollection(
id: 'playlist-1',
name: 'Playlist',
createdAt: DateTime.utc(2026),
updatedAt: DateTime.utc(2026),
tracks: const [],
previewCover: 'https://example.test/cover.jpg',
tracksLoaded: false,
trackKeys: {'track:a', 'track:b'},
);
expect(playlist.tracks, isEmpty);
expect(playlist.tracksLoaded, isFalse);
expect(playlist.trackCount, 2);
expect(playlist.containsTrackKey('track:a'), isTrue);
expect(playlist.previewCover, 'https://example.test/cover.jpg');
final loaded = playlist.copyWith(
tracks: [
CollectionTrackEntry(
key: 'track:a',
track: const Track(
id: 'a',
name: 'A',
artistName: 'Artist',
albumName: 'Album',
duration: 1000,
),
addedAt: DateTime.utc(2026),
),
],
);
expect(loaded.tracksLoaded, isTrue);
expect(loaded.trackCount, 1);
});
});
group('Track', () {
test('exposes collection, source, and quality flags', () {
const album = Track(