fix: switching to different source on playback endpoint error not working

This commit is contained in:
Kingkor Roy Tirtho 2024-10-16 21:39:00 +06:00
parent a8d2210d52
commit d9ca11b996
2 changed files with 43 additions and 23 deletions

View File

@ -52,10 +52,11 @@ class ServerPlaybackRoutes {
), ),
) )
.catchError((e, stack) async { .catchError((e, stack) async {
final sourcedTrack = await ref.read( final sourcedTrack = await ref
sourcedTrackProvider(SpotubeMedia(track, extras: {"switch": true})) .read(sourcedTrackProvider(SpotubeMedia(track)).notifier)
.future, .switchToAlternativeSources();
);
ref.read(activeSourcedTrackProvider.notifier).update(sourcedTrack);
return await dio.get( return await dio.get(
sourcedTrack!.url, sourcedTrack!.url,

View File

@ -5,8 +5,10 @@ import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/services/audio_player/audio_player.dart'; import 'package:spotube/services/audio_player/audio_player.dart';
import 'package:spotube/services/sourced_track/sourced_track.dart'; import 'package:spotube/services/sourced_track/sourced_track.dart';
final sourcedTrackProvider = class SourcedTrackNotifier
FutureProvider.family<SourcedTrack?, SpotubeMedia?>((ref, media) async { extends FamilyAsyncNotifier<SourcedTrack?, SpotubeMedia?> {
@override
build(media) async {
final track = media?.track; final track = media?.track;
if (track == null || track is LocalTrack) { if (track == null || track is LocalTrack) {
return null; return null;
@ -21,9 +23,26 @@ final sourcedTrackProvider =
}, },
); );
final sourcedTrack = media?.extras?["switch"] == true final sourcedTrack =
? await SourcedTrack.fetchFromTrackAltSource(track: track, ref: ref) await SourcedTrack.fetchFromTrack(track: track, ref: ref);
: await SourcedTrack.fetchFromTrack(track: track, ref: ref);
return sourcedTrack; return sourcedTrack;
}); }
Future<SourcedTrack?> switchToAlternativeSources() async {
if (arg == null) {
return null;
}
return await update((prev) async {
return await SourcedTrack.fetchFromTrackAltSource(
track: arg!.track,
ref: ref,
);
});
}
}
final sourcedTrackProvider = AsyncNotifierProviderFamily<SourcedTrackNotifier,
SourcedTrack?, SpotubeMedia?>(
() => SourcedTrackNotifier(),
);