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 {
|
.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,
|
||||||
|
@ -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/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?> {
|
||||||
final track = media?.track;
|
@override
|
||||||
if (track == null || track is LocalTrack) {
|
build(media) async {
|
||||||
return null;
|
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(
|
Future<SourcedTrack?> switchToAlternativeSources() async {
|
||||||
audioPlayerProvider.select((value) => value.tracks),
|
if (arg == null) {
|
||||||
(old, next) {
|
return null;
|
||||||
if (next.isEmpty || next.none((element) => element.id == track.id)) {
|
}
|
||||||
ref.invalidateSelf();
|
return await update((prev) async {
|
||||||
}
|
return await SourcedTrack.fetchFromTrackAltSource(
|
||||||
},
|
track: arg!.track,
|
||||||
);
|
ref: ref,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final sourcedTrack = media?.extras?["switch"] == true
|
final sourcedTrackProvider = AsyncNotifierProviderFamily<SourcedTrackNotifier,
|
||||||
? await SourcedTrack.fetchFromTrackAltSource(track: track, ref: ref)
|
SourcedTrack?, SpotubeMedia?>(
|
||||||
: await SourcedTrack.fetchFromTrack(track: track, ref: ref);
|
() => SourcedTrackNotifier(),
|
||||||
|
);
|
||||||
return sourcedTrack;
|
|
||||||
});
|
|
||||||
|
Loading…
Reference in New Issue
Block a user