mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 16:05:18 +00:00
feat: pause track when seeking forward/back and keep audio session alive when paused/interrupted
This commit is contained in:
parent
3ed8b0fda2
commit
bc8a04e544
@ -202,6 +202,7 @@ class Playback extends PersistedChangeNotifier {
|
|||||||
if (index < 0 || index > playlist.tracks.length - 1) return;
|
if (index < 0 || index > playlist.tracks.length - 1) return;
|
||||||
if (isPlaying || status == PlaybackStatus.playing) await stop();
|
if (isPlaying || status == PlaybackStatus.playing) await stop();
|
||||||
this.playlist = playlist;
|
this.playlist = playlist;
|
||||||
|
mobileAudioService?.session?.setActive(true);
|
||||||
final played = this.playlist!.tracks[index];
|
final played = this.playlist!.tracks[index];
|
||||||
status = PlaybackStatus.loading;
|
status = PlaybackStatus.loading;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
@ -320,6 +321,7 @@ class Playback extends PersistedChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> stop() async {
|
Future<void> stop() async {
|
||||||
|
mobileAudioService?.session?.setActive(false);
|
||||||
await player.stop();
|
await player.stop();
|
||||||
await player.release();
|
await player.release();
|
||||||
isPlaying = false;
|
isPlaying = false;
|
||||||
@ -634,6 +636,7 @@ class Playback extends PersistedChangeNotifier {
|
|||||||
(playlist!.trackIds.indexOf(track!.id!) + 1).toInt();
|
(playlist!.trackIds.indexOf(track!.id!) + 1).toInt();
|
||||||
// checking if there's any track available forward
|
// checking if there's any track available forward
|
||||||
if (nextTrackIndex > (playlist?.tracks.length ?? 0) - 1) return;
|
if (nextTrackIndex > (playlist?.tracks.length ?? 0) - 1) return;
|
||||||
|
await pause();
|
||||||
await play(playlist!.tracks.elementAt(nextTrackIndex)).then((_) {
|
await play(playlist!.tracks.elementAt(nextTrackIndex)).then((_) {
|
||||||
playlist!.tracks[nextTrackIndex] = track!;
|
playlist!.tracks[nextTrackIndex] = track!;
|
||||||
});
|
});
|
||||||
@ -645,6 +648,7 @@ class Playback extends PersistedChangeNotifier {
|
|||||||
(playlist!.trackIds.indexOf(track!.id!) - 1).toInt();
|
(playlist!.trackIds.indexOf(track!.id!) - 1).toInt();
|
||||||
// checking if there's any track available behind
|
// checking if there's any track available behind
|
||||||
if (prevTrackIndex < 0) return;
|
if (prevTrackIndex < 0) return;
|
||||||
|
await pause();
|
||||||
await play(playlist!.tracks.elementAt(prevTrackIndex)).then((_) {
|
await play(playlist!.tracks.elementAt(prevTrackIndex)).then((_) {
|
||||||
playlist!.tracks[prevTrackIndex] = track!;
|
playlist!.tracks[prevTrackIndex] = track!;
|
||||||
});
|
});
|
||||||
|
@ -18,18 +18,18 @@ class MobileAudioService extends BaseAudioHandler {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
final _player = playback.player;
|
final player = playback.player;
|
||||||
_player.onPlayerStateChanged.listen((state) async {
|
player.onPlayerStateChanged.listen((state) async {
|
||||||
if (state != PlayerState.completed) {
|
if (state != PlayerState.completed) {
|
||||||
playbackState.add(await _transformEvent());
|
playbackState.add(await _transformEvent());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
_player.onPositionChanged.listen((pos) async {
|
player.onPositionChanged.listen((pos) async {
|
||||||
playbackState.add(await _transformEvent());
|
playbackState.add(await _transformEvent());
|
||||||
});
|
});
|
||||||
|
|
||||||
_player.onPlayerComplete.listen((_) {
|
player.onPlayerComplete.listen((_) {
|
||||||
if (playback.playlist == null && playback.track == null) {
|
if (playback.playlist == null && playback.track == null) {
|
||||||
playbackState.add(
|
playbackState.add(
|
||||||
PlaybackState(
|
PlaybackState(
|
||||||
@ -56,7 +56,6 @@ class MobileAudioService extends BaseAudioHandler {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> stop() async {
|
Future<void> stop() async {
|
||||||
await session?.setActive(true);
|
|
||||||
await playback.stop();
|
await playback.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user