diff --git a/crabidy-server/src/lib.rs b/crabidy-server/src/lib.rs index 14d6352..524dd34 100644 --- a/crabidy-server/src/lib.rs +++ b/crabidy-server/src/lib.rs @@ -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) { self.shuffle = true; self.shuffle_before(self.current_offset); diff --git a/crabidy-server/src/playback.rs b/crabidy-server/src/playback.rs index f29e456..e7712b3 100644 --- a/crabidy-server/src/playback.rs +++ b/crabidy-server/src/playback.rs @@ -192,6 +192,7 @@ impl Playback { PlaybackMessage::Remove { positions, span } => { let _e = span.enter(); + let is_last; debug!("removing"); let track = { let Ok(mut queue) = self.queue.lock() else { @@ -199,6 +200,7 @@ impl Playback { continue; }; debug!("got queue lock"); + is_last = queue.is_last_track(); let track = queue.remove_tracks(&positions); let queue_update_tx = self.update_tx.clone(); let update = StreamUpdate::Queue(queue.clone().into()); @@ -216,7 +218,13 @@ impl Playback { *state }; 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; + } } }