fix: jump to track going to wrong track

This commit is contained in:
Kingkor Roy Tirtho 2023-08-25 20:03:49 +06:00
parent d239d641ff
commit 190df17adc
4 changed files with 11 additions and 7 deletions

View File

@ -86,13 +86,14 @@ mixin NextFetcher on StateNotifier<ProxyPlaylist> {
} else if (track is LocalTrack) { } else if (track is LocalTrack) {
return track.path; return track.path;
} else { } else {
return "https://youtube.com/unplayable.m4a?id=${track.id}&title=${track.name?.replaceAll( return trackToUnplayableSource(track);
RegExp(r'\s+', caseSensitive: false),
'-',
)}";
} }
} }
String trackToUnplayableSource(Track track) {
return "https://youtube.com/unplayable.m4a?id=${track.id}&title=${Uri.encodeComponent(track.name!)}";
}
List<Track> mapSourcesToTracks(List<String> sources) { List<Track> mapSourcesToTracks(List<String> sources) {
return sources return sources
.map((source) { .map((source) {

View File

@ -336,15 +336,18 @@ class ProxyPlaylistNotifier extends PersistedStateNotifier<ProxyPlaylist>
Future<void> jumpTo(int index) async { Future<void> jumpTo(int index) async {
final oldTrack = final oldTrack =
mapSourcesToTracks([audioPlayer.currentSource!]).firstOrNull; mapSourcesToTracks([audioPlayer.currentSource!]).firstOrNull;
state = state.copyWith(active: index); state = state.copyWith(active: index);
await audioPlayer.pause(); await audioPlayer.pause();
final track = await ensureSourcePlayable(audioPlayer.sources[index]); final track = await ensureSourcePlayable(audioPlayer.sources[index]);
if (track != null) { if (track != null) {
state = state.copyWith( state = state.copyWith(
tracks: mergeTracks([track], state.tracks), tracks: mergeTracks([track], state.tracks),
active: index, active: index,
); );
} }
await audioPlayer.jumpTo(index); await audioPlayer.jumpTo(index);
if (oldTrack != null || track != null) { if (oldTrack != null || track != null) {

View File

@ -159,7 +159,7 @@ class MkPlayerWithState extends Player {
@override @override
Future<void> next() async { Future<void> next() async {
if (_playlist == null || _playlist!.index + 1 >= _playlist!.medias.length) { if (_playlist == null) {
return; return;
} }
@ -190,7 +190,7 @@ class MkPlayerWithState extends Player {
@override @override
Future<void> jump(int index) async { Future<void> jump(int index) async {
if (_playlist == null || index < 0 || index >= _playlist!.medias.length) { if (_playlist == null || index < 0 || index >= _playlist!.medias.length) {
return null; return;
} }
playlist = _playlist!.copyWith(index: index); playlist = _playlist!.copyWith(index: index);

View File

@ -67,7 +67,7 @@ abstract class TypeConversionUtils {
if (onRouteChange != null) { if (onRouteChange != null) {
onRouteChange("/artist/${artist.value.id}"); onRouteChange("/artist/${artist.value.id}");
} else { } else {
ServiceUtils.navigate( ServiceUtils.push(
context, context,
"/artist/${artist.value.id}", "/artist/${artist.value.id}",
); );