Start playing when adding to an empty queue
This commit is contained in:
parent
a4303b9b70
commit
4b54f86154
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue