From 7bf0cac6c04f89926af0beeee793037f199dbf5d Mon Sep 17 00:00:00 2001 From: Moshe Sherman Date: Sat, 29 Aug 2020 23:48:33 +0300 Subject: [PATCH] handle last element removal in queue --- src/queue.rs | 10 +++++++--- src/ui/queue.rs | 8 +++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/queue.rs b/src/queue.rs index 07a6f20..70fa981 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -155,10 +155,14 @@ impl Queue { if let Some(current_track) = current { match current_track.cmp(&index) { Ordering::Equal => { - // stop playback if we have the deleted the last item and it - // was playing + // if we have deleted the last item and it was playing + // stop playback, unless repeat playlist is on, play next if current_track == len { - self.stop(); + if self.get_repeat() == RepeatSetting::RepeatPlaylist { + self.next(false); + } else { + self.stop(); + } } else { self.play(index, false, false); } diff --git a/src/ui/queue.rs b/src/ui/queue.rs index 515b058..12c68f8 100644 --- a/src/ui/queue.rs +++ b/src/ui/queue.rs @@ -99,7 +99,13 @@ impl ViewExt for QueueView { return Ok(CommandResult::Ignored); } Command::Delete => { - self.queue.remove(self.list.get_selected_index()); + let selected = self.list.get_selected_index(); + let len = self.queue.len(); + + self.queue.remove(selected); + if selected == len.saturating_sub(1) { + self.list.move_focus(-1); + } return Ok(CommandResult::Consumed(None)); } Command::Shift(mode, amount) => {