From de9bc98044f6f55cb3dd95c6091f433516d897d5 Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Thu, 20 Nov 2025 22:04:07 +0900 Subject: [PATCH] active source/id from db watch --- lib/app/lists/albums_grid.dart | 2 +- lib/app/lists/artists_list.dart | 2 +- lib/app/screens/preload_screen.dart | 2 +- lib/app/state/database.dart | 1 + lib/app/state/services.dart | 1 - lib/app/state/settings.dart | 4 --- lib/app/state/source.dart | 53 ++++++++++++++++------------- 7 files changed, 33 insertions(+), 32 deletions(-) diff --git a/lib/app/lists/albums_grid.dart b/lib/app/lists/albums_grid.dart index 20bf604..49781b6 100644 --- a/lib/app/lists/albums_grid.dart +++ b/lib/app/lists/albums_grid.dart @@ -7,7 +7,7 @@ import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; import '../../sources/models.dart'; import '../hooks/use_paging_controller.dart'; import '../state/database.dart'; -import '../state/settings.dart'; +import '../state/source.dart'; import 'list_items.dart'; const kPageSize = 60; diff --git a/lib/app/lists/artists_list.dart b/lib/app/lists/artists_list.dart index a5a5385..7379997 100644 --- a/lib/app/lists/artists_list.dart +++ b/lib/app/lists/artists_list.dart @@ -7,7 +7,7 @@ import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; import '../../sources/models.dart'; import '../hooks/use_paging_controller.dart'; import '../state/database.dart'; -import '../state/settings.dart'; +import '../state/source.dart'; import 'list_items.dart'; const kPageSize = 30; diff --git a/lib/app/screens/preload_screen.dart b/lib/app/screens/preload_screen.dart index 2169e09..35e7c95 100644 --- a/lib/app/screens/preload_screen.dart +++ b/lib/app/screens/preload_screen.dart @@ -13,7 +13,7 @@ class PreloadScreen extends HookConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final initializers = [ ref.watch(databaseInitializer), - ref.watch(sourceInitializer), + ref.watch(activeSourceInitializer), ref.watch(packageInfoInitializer), ]; diff --git a/lib/app/state/database.dart b/lib/app/state/database.dart index e55bb92..e63a467 100644 --- a/lib/app/state/database.dart +++ b/lib/app/state/database.dart @@ -12,6 +12,7 @@ final databaseInitializer = FutureProvider((ref) async { SourcesCompanion.insert( id: Value(1), name: 'test navidrome', + isActive: Value(true), ), ); await db diff --git a/lib/app/state/services.dart b/lib/app/state/services.dart index b628e2a..08e0e08 100644 --- a/lib/app/state/services.dart +++ b/lib/app/state/services.dart @@ -2,7 +2,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import '../../services/sync_service.dart'; import 'database.dart'; -import 'settings.dart'; import 'source.dart'; final syncServiceProvider = Provider((ref) { diff --git a/lib/app/state/settings.dart b/lib/app/state/settings.dart index 3ae2c4c..9aabd09 100644 --- a/lib/app/state/settings.dart +++ b/lib/app/state/settings.dart @@ -1,10 +1,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:package_info_plus/package_info_plus.dart'; -final sourceIdProvider = Provider((ref) { - return 1; -}); - final packageInfoInitializer = FutureProvider((ref) { return PackageInfo.fromPlatform(); }); diff --git a/lib/app/state/source.dart b/lib/app/state/source.dart index 83f5bd8..5cf55f4 100644 --- a/lib/app/state/source.dart +++ b/lib/app/state/source.dart @@ -1,38 +1,43 @@ -import 'package:drift/drift.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import '../../sources/music_source.dart'; import '../../sources/subsonic/client.dart'; import '../../sources/subsonic/source.dart'; import '../../util/http.dart'; import 'database.dart'; -import 'settings.dart'; -final sourceInitializer = FutureProvider((ref) async { +final activeSourceInitializer = StreamProvider<(int, SubsonicSource)>(( + ref, +) async* { final db = ref.watch(databaseProvider); - final sourceId = ref.watch(sourceIdProvider); - final query = db.sources.select().join([ - leftOuterJoin( - db.subsonicSettings, - db.subsonicSettings.sourceId.equalsExp(db.sources.id), - ), - ])..where(db.sources.id.equals(sourceId)); + final activeSource = db.managers.sources + .filter((f) => f.isActive.equals(true)) + .watchSingle(); - final result = await query.getSingle(); - final subsonicSettings = result.readTable(db.subsonicSettings); + await for (final source in activeSource) { + final subsonicSettings = await db.managers.subsonicSettings + .filter((f) => f.sourceId.equals(source.id)) + .getSingle(); - return SubsonicSource( - SubsonicClient( - http: SubtracksHttpClient(), - address: subsonicSettings.address, - username: subsonicSettings.username, - password: subsonicSettings.password, - useTokenAuth: subsonicSettings.useTokenAuth, - ), - ); + yield ( + source.id, + SubsonicSource( + SubsonicClient( + http: SubtracksHttpClient(), + address: subsonicSettings.address, + username: subsonicSettings.username, + password: subsonicSettings.password, + useTokenAuth: subsonicSettings.useTokenAuth, + ), + ), + ); + } }); -final sourceProvider = Provider((ref) { - return ref.watch(sourceInitializer).value!; +final sourceProvider = Provider((ref) { + return ref.watch(activeSourceInitializer).value!.$2; +}); + +final sourceIdProvider = Provider((ref) { + return ref.watch(activeSourceInitializer).value!.$1; });