refactor: migrate persistence to SQLite, add strict provider mode, and optimize collection lookups

- Replace SharedPreferences with SQLite (AppStateDatabase, LibraryCollectionsDatabase) for download queue, library collections, and recent access history
- Add Set-based O(1) track containment checks for wishlist, loved, and playlist tracks
- Add batch addTracksToPlaylist with PlaylistAddBatchResult
- Go backend: strict mode locks download to selected provider when auto fallback is off
- Go backend: fix extension progress normalization (percent/100) and lifecycle tracking
- Go backend: case-insensitive provider ID matching throughout fallback chain
- Lyrics embedding now respects lyricsMode setting (embed/both/off)
- Debounced queue persistence to reduce write frequency
- Fix shouldUseFallback logic to not be gated by useExtensions
This commit is contained in:
zarzet
2026-02-19 16:40:03 +07:00
parent 8e794e1ef1
commit e39756fa3f
15 changed files with 1581 additions and 624 deletions
+3 -1
View File
@@ -18,7 +18,9 @@ Future<void> showAddTrackToPlaylistSheet(
context: context,
showDragHandle: true,
builder: (sheetContext) {
final playlists = ref.watch(libraryCollectionsProvider).playlists;
final playlists = ref.watch(
libraryCollectionsProvider.select((state) => state.playlists),
);
return SafeArea(
child: Column(
mainAxisSize: MainAxisSize.min,