Stop playing if last track is removed
CI checks / stable / fmt (push) Successful in 3s Details

This commit is contained in:
Hans Mündelein 2023-06-14 10:59:05 +02:00
parent 97ebb44ca5
commit f8a77ee6ed
Signed by: hans
GPG Key ID: BA7B55E984CE74F4
2 changed files with 13 additions and 1 deletions

View File

@ -46,6 +46,10 @@ impl QueueManager {
} }
} }
pub fn is_last_track(&self) -> bool {
self.current_position() == self.tracks.len() - 1
}
pub fn shuffle_on(&mut self) { pub fn shuffle_on(&mut self) {
self.shuffle = true; self.shuffle = true;
self.shuffle_before(self.current_offset); self.shuffle_before(self.current_offset);

View File

@ -192,6 +192,7 @@ impl Playback {
PlaybackMessage::Remove { positions, span } => { PlaybackMessage::Remove { positions, span } => {
let _e = span.enter(); let _e = span.enter();
let is_last;
debug!("removing"); debug!("removing");
let track = { let track = {
let Ok(mut queue) = self.queue.lock() else { let Ok(mut queue) = self.queue.lock() else {
@ -199,6 +200,7 @@ impl Playback {
continue; continue;
}; };
debug!("got queue lock"); debug!("got queue lock");
is_last = queue.is_last_track();
let track = queue.remove_tracks(&positions); let track = queue.remove_tracks(&positions);
let queue_update_tx = self.update_tx.clone(); let queue_update_tx = self.update_tx.clone();
let update = StreamUpdate::Queue(queue.clone().into()); let update = StreamUpdate::Queue(queue.clone().into());
@ -216,7 +218,13 @@ impl Playback {
*state *state
}; };
if state == PlayState::Playing { if state == PlayState::Playing {
self.play(track).in_current_span().await; if is_last {
if let Err(err) = self.player.stop().in_current_span().await {
error!("{:?}", err)
}
} else {
self.play(track).in_current_span().await;
}
} }
} }