Start playing when adding to an empty queue

This commit is contained in:
Hans Mündelein 2023-06-14 11:49:27 +02:00
parent a4303b9b70
commit 4b54f86154
Signed by: hans
GPG Key ID: BA7B55E984CE74F4
2 changed files with 27 additions and 15 deletions

View File

@ -159,14 +159,20 @@ impl QueueManager {
}
}
pub fn append_tracks(&mut self, tracks: &[Track]) {
pub fn append_tracks(&mut self, tracks: &[Track]) -> Option<Track> {
let len = self.tracks.len();
let is_empty = len == 0;
let order_additions: Vec<usize> = (len..len + tracks.len()).collect();
self.play_order.extend(order_additions);
self.tracks.extend(tracks.iter().cloned());
if self.shuffle {
self.shuffle_behind(self.current_offset);
}
if is_empty {
self.current_track()
} else {
None
}
}
pub fn remove_tracks(&mut self, positions: &[u32]) -> Option<Track> {
@ -204,11 +210,10 @@ impl QueueManager {
}
}
pub fn insert_tracks(&mut self, position: u32, tracks: &[Track]) {
pub fn insert_tracks(&mut self, position: u32, tracks: &[Track]) -> Option<Track> {
let len = self.tracks.len();
if len == 0 {
self.replace_with_tracks(tracks);
return;
return self.replace_with_tracks(tracks);
}
let order_additions: Vec<usize> = (len..len + tracks.len()).collect();
self.play_order.extend(order_additions);
@ -248,11 +253,12 @@ impl QueueManager {
if self.shuffle {
self.shuffle_behind(self.current_offset);
}
None
}
pub fn queue_tracks(&mut self, tracks: &[Track]) {
pub fn queue_tracks(&mut self, tracks: &[Track]) -> Option<Track> {
let pos = self.current_position();
self.insert_tracks(pos as u32, tracks);
self.insert_tracks(pos as u32, tracks)
}
pub fn clear(&mut self, exclude_current: bool) -> bool {

View File

@ -143,20 +143,22 @@ impl Playback {
}
}
trace!("got tracks {:?}", all_tracks);
{
let track = {
let Ok(mut queue) = self.queue.lock() else {
debug!("got queue lock");
continue;
};
debug!("got queue lock");
queue.queue_tracks(&all_tracks);
let track = queue.queue_tracks(&all_tracks);
let queue_update_tx = self.update_tx.clone();
let update = StreamUpdate::Queue(queue.clone().into());
if let Err(err) = queue_update_tx.send(update) {
trace!("{:?}", err)
}
}
track
};
debug!("que lock released");
self.play(track).in_current_span().await;
}
PlaybackMessage::Append { uuids, span } => {
@ -174,20 +176,22 @@ impl Playback {
}
}
trace!("got tracks {:?}", all_tracks);
{
let track = {
let Ok(mut queue) = self.queue.lock() else {
debug!("got queue lock");
continue;
};
debug!("got queue lock");
queue.append_tracks(&all_tracks);
let track = queue.append_tracks(&all_tracks);
let queue_update_tx = self.update_tx.clone();
let update = StreamUpdate::Queue(queue.clone().into());
if let Err(err) = queue_update_tx.send(update) {
trace!("{:?}", err)
}
}
track
};
debug!("queue lock released");
self.play(track).in_current_span().await;
}
PlaybackMessage::Remove { positions, span } => {
@ -247,20 +251,22 @@ impl Playback {
}
}
trace!("got tracks {:?}", all_tracks);
{
let track = {
let Ok(mut queue) = self.queue.lock() else {
debug!("got queue lock");
continue;
};
debug!("got queue lock");
queue.insert_tracks(position, &all_tracks);
let track = queue.insert_tracks(position, &all_tracks);
let queue_update_tx = self.update_tx.clone();
let update = StreamUpdate::Queue(queue.clone().into());
if let Err(err) = queue_update_tx.send(update) {
trace!("{:?}", err)
};
}
track
};
debug!("queue lock released");
self.play(track).in_current_span().await;
}
PlaybackMessage::Clear {