import 'dart:async'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotube/models/playback/track_sources.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; import 'package:spotube/services/sourced_track/sourced_track.dart'; class TrackSourcesNotifier extends FamilyAsyncNotifier { @override FutureOr build(query) { ref.watch(userPreferencesProvider.select((p) => p.audioQuality)); ref.watch(userPreferencesProvider.select((p) => p.audioSource)); ref.watch(userPreferencesProvider.select((p) => p.streamMusicCodec)); ref.watch(userPreferencesProvider.select((p) => p.downloadMusicCodec)); return SourcedTrack.fetchFromQuery(query: query, ref: ref); } Future refreshStreamingUrl() async { return await update((prev) async { return await prev.refreshStream(); }); } Future copyWithSibling() async { return await update((prev) async { return prev.copyWithSibling(); }); } Future swapWithSibling(TrackSourceInfo sibling) async { return await update((prev) async { return await prev.swapWithSibling(sibling) ?? prev; }); } } final trackSourcesProvider = AsyncNotifierProviderFamily( () => TrackSourcesNotifier(), );