subtracks/lib/app/state/source.dart
2025-11-22 11:33:40 +09:00

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;
});