mirror of
https://github.com/austinried/subtracks.git
synced 2025-12-27 00:59:28 +01:00
44 lines
1.2 KiB
Dart
44 lines
1.2 KiB
Dart
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
|
|
import '../../sources/subsonic/client.dart';
|
|
import '../../sources/subsonic/source.dart';
|
|
import '../../util/http.dart';
|
|
import 'database.dart';
|
|
|
|
final activeSourceInitializer = StreamProvider<(int, SubsonicSource)>((
|
|
ref,
|
|
) async* {
|
|
final db = ref.watch(databaseProvider);
|
|
|
|
final activeSource = db.sourcesDao.activeSourceId().watchSingle();
|
|
|
|
await for (final source in activeSource) {
|
|
final sourceId = source.read(db.sources.id)!;
|
|
|
|
final subsonicSettings = await db.managers.subsonicSettings
|
|
.filter((f) => f.sourceId.equals(sourceId))
|
|
.getSingle();
|
|
|
|
yield (
|
|
sourceId,
|
|
SubsonicSource(
|
|
SubsonicClient(
|
|
http: SubtracksHttpClient(),
|
|
address: subsonicSettings.address,
|
|
username: subsonicSettings.username,
|
|
password: subsonicSettings.password,
|
|
useTokenAuth: subsonicSettings.useTokenAuth,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
});
|
|
|
|
final sourceProvider = Provider<SubsonicSource>((ref) {
|
|
return ref.watch(activeSourceInitializer).value!.$2;
|
|
});
|
|
|
|
final sourceIdProvider = Provider<int>((ref) {
|
|
return ref.watch(activeSourceInitializer).value!.$1;
|
|
});
|