chore: fix alternative track sources not showing up

This commit is contained in:
Kingkor Roy Tirtho 2024-06-24 21:43:09 +06:00
parent 75173e5096
commit a621a45f0b
3 changed files with 44 additions and 29 deletions

View File

@ -11,6 +11,7 @@ import 'package:spotube/extensions/context.dart';
import 'package:spotube/extensions/duration.dart';
import 'package:spotube/modules/player/use_progress.dart';
import 'package:spotube/models/logger.dart';
import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/provider/audio_player/querying_track_info.dart';
import 'package:spotube/services/audio_player/audio_player.dart';
@ -232,32 +233,38 @@ class PlayerControls extends HookConsumerWidget {
onPressed:
isFetchingActiveTrack ? null : audioPlayer.skipToNext,
),
StreamBuilder<PlaylistMode>(
stream: audioPlayer.loopModeStream,
builder: (context, snapshot) {
final loopMode = snapshot.data ?? PlaylistMode.none;
return IconButton(
tooltip: loopMode == PlaylistMode.single
? context.l10n.loop_track
: loopMode == PlaylistMode.loop
? context.l10n.repeat_playlist
: null,
icon: Icon(
loopMode == PlaylistMode.single
? SpotubeIcons.repeatOne
: SpotubeIcons.repeat,
),
style: loopMode == PlaylistMode.single ||
loopMode == PlaylistMode.loop
? activeButtonStyle
: buttonStyle,
onPressed: isFetchingActiveTrack
? null
: () async {
await audioPlayer.setLoopMode(loopMode);
Consumer(builder: (context, ref, _) {
final loopMode = ref
.watch(audioPlayerProvider.select((s) => s.loopMode));
return IconButton(
tooltip: loopMode == PlaylistMode.single
? context.l10n.loop_track
: loopMode == PlaylistMode.loop
? context.l10n.repeat_playlist
: null,
icon: Icon(
loopMode == PlaylistMode.single
? SpotubeIcons.repeatOne
: SpotubeIcons.repeat,
),
style: loopMode == PlaylistMode.single ||
loopMode == PlaylistMode.loop
? activeButtonStyle
: buttonStyle,
onPressed: isFetchingActiveTrack
? null
: () async {
await audioPlayer.setLoopMode(
switch (loopMode) {
PlaylistMode.loop => PlaylistMode.single,
PlaylistMode.single => PlaylistMode.none,
PlaylistMode.none => PlaylistMode.loop,
},
);
}),
);
},
);
}),
],
),
const SizedBox(height: 5)

View File

@ -131,13 +131,13 @@ class SiblingTracksSheet extends HookConsumerWidget {
]);
final siblings = useMemoized(
() => isFetchingActiveTrack
() => !isFetchingActiveTrack
? [
(activeTrack as SourcedTrack).sourceInfo,
...activeTrack.siblings,
]
: <SourceInfo>[],
[activeTrack],
[activeTrack, isFetchingActiveTrack],
);
final borderRadius = floating

View File

@ -1,12 +1,20 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/provider/server/sourced_track.dart';
import 'package:spotube/services/audio_player/audio_player.dart';
final queryingTrackInfoProvider = Provider<bool>((ref) {
final media = audioPlayer.playlist.index == -1
? null
: audioPlayer.playlist.medias.elementAtOrNull(audioPlayer.playlist.index);
final audioPlayerActiveTrack =
media == null ? null : SpotubeMedia.fromMedia(media).track;
final activeTrack =
ref.watch(audioPlayerProvider.select((s) => s.activeTrack));
ref.watch(audioPlayerProvider.select((s) => s.activeTrack)) ??
audioPlayerActiveTrack;
if (activeTrack == null) return false;
return ref.read(sourcedTrackProvider(activeTrack)).isLoading;
return ref.watch(sourcedTrackProvider(activeTrack)).isLoading;
});