play next (#278)

* add play next feature

* fix play_next insertion order

* fix play_next call for playable

* document play_next shortcut + reformat

Co-authored-by: Henrik Friedrichsen <henrik@affekt.org>
This commit is contained in:
Moshe Sherman
2020-10-04 17:58:55 +03:00
committed by GitHub
parent 7bf0cac6c0
commit fc79889665
15 changed files with 97 additions and 4 deletions

View File

@@ -96,6 +96,28 @@ impl Queue {
*self.current_track.read().unwrap()
}
pub fn insert_after_current(&self, track: Playable) {
if let Some(index) = self.get_current_index() {
let mut random_order = self.random_order.write().unwrap();
if let Some(order) = random_order.as_mut() {
let next_i = order.iter().position(|&i| i == index).unwrap();
// shift everything after the insertion in order
let size = order.len();
for i in 0..size {
if order[i] > index {
order[i] += 1;
}
}
// finally, add the next track index
order.insert(next_i + 1, index + 1);
}
let mut q = self.queue.write().unwrap();
q.insert(index + 1, track);
} else {
self.append(track);
}
}
pub fn append(&self, track: Playable) {
let mut random_order = self.random_order.write().unwrap();
if let Some(order) = random_order.as_mut() {