mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 16:05:18 +00:00
fix: switching to different source on playback endpoint error not working
This commit is contained in:
parent
a8d2210d52
commit
d9ca11b996
@ -52,10 +52,11 @@ class ServerPlaybackRoutes {
|
||||
),
|
||||
)
|
||||
.catchError((e, stack) async {
|
||||
final sourcedTrack = await ref.read(
|
||||
sourcedTrackProvider(SpotubeMedia(track, extras: {"switch": true}))
|
||||
.future,
|
||||
);
|
||||
final sourcedTrack = await ref
|
||||
.read(sourcedTrackProvider(SpotubeMedia(track)).notifier)
|
||||
.switchToAlternativeSources();
|
||||
|
||||
ref.read(activeSourcedTrackProvider.notifier).update(sourcedTrack);
|
||||
|
||||
return await dio.get(
|
||||
sourcedTrack!.url,
|
||||
|
@ -5,25 +5,44 @@ import 'package:spotube/provider/audio_player/audio_player.dart';
|
||||
import 'package:spotube/services/audio_player/audio_player.dart';
|
||||
import 'package:spotube/services/sourced_track/sourced_track.dart';
|
||||
|
||||
final sourcedTrackProvider =
|
||||
FutureProvider.family<SourcedTrack?, SpotubeMedia?>((ref, media) async {
|
||||
final track = media?.track;
|
||||
if (track == null || track is LocalTrack) {
|
||||
return null;
|
||||
class SourcedTrackNotifier
|
||||
extends FamilyAsyncNotifier<SourcedTrack?, SpotubeMedia?> {
|
||||
@override
|
||||
build(media) async {
|
||||
final track = media?.track;
|
||||
if (track == null || track is LocalTrack) {
|
||||
return null;
|
||||
}
|
||||
|
||||
ref.listen(
|
||||
audioPlayerProvider.select((value) => value.tracks),
|
||||
(old, next) {
|
||||
if (next.isEmpty || next.none((element) => element.id == track.id)) {
|
||||
ref.invalidateSelf();
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
final sourcedTrack =
|
||||
await SourcedTrack.fetchFromTrack(track: track, ref: ref);
|
||||
|
||||
return sourcedTrack;
|
||||
}
|
||||
|
||||
ref.listen(
|
||||
audioPlayerProvider.select((value) => value.tracks),
|
||||
(old, next) {
|
||||
if (next.isEmpty || next.none((element) => element.id == track.id)) {
|
||||
ref.invalidateSelf();
|
||||
}
|
||||
},
|
||||
);
|
||||
Future<SourcedTrack?> switchToAlternativeSources() async {
|
||||
if (arg == null) {
|
||||
return null;
|
||||
}
|
||||
return await update((prev) async {
|
||||
return await SourcedTrack.fetchFromTrackAltSource(
|
||||
track: arg!.track,
|
||||
ref: ref,
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
final sourcedTrack = media?.extras?["switch"] == true
|
||||
? await SourcedTrack.fetchFromTrackAltSource(track: track, ref: ref)
|
||||
: await SourcedTrack.fetchFromTrack(track: track, ref: ref);
|
||||
|
||||
return sourcedTrack;
|
||||
});
|
||||
final sourcedTrackProvider = AsyncNotifierProviderFamily<SourcedTrackNotifier,
|
||||
SourcedTrack?, SpotubeMedia?>(
|
||||
() => SourcedTrackNotifier(),
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user