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 len = self.tracks.len();
|
||||||
|
let is_empty = len == 0;
|
||||||
let order_additions: Vec<usize> = (len..len + tracks.len()).collect();
|
let order_additions: Vec<usize> = (len..len + tracks.len()).collect();
|
||||||
self.play_order.extend(order_additions);
|
self.play_order.extend(order_additions);
|
||||||
self.tracks.extend(tracks.iter().cloned());
|
self.tracks.extend(tracks.iter().cloned());
|
||||||
if self.shuffle {
|
if self.shuffle {
|
||||||
self.shuffle_behind(self.current_offset);
|
self.shuffle_behind(self.current_offset);
|
||||||
}
|
}
|
||||||
|
if is_empty {
|
||||||
|
self.current_track()
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn remove_tracks(&mut self, positions: &[u32]) -> Option<Track> {
|
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();
|
let len = self.tracks.len();
|
||||||
if len == 0 {
|
if len == 0 {
|
||||||
self.replace_with_tracks(tracks);
|
return self.replace_with_tracks(tracks);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
let order_additions: Vec<usize> = (len..len + tracks.len()).collect();
|
let order_additions: Vec<usize> = (len..len + tracks.len()).collect();
|
||||||
self.play_order.extend(order_additions);
|
self.play_order.extend(order_additions);
|
||||||
|
|
@ -248,11 +253,12 @@ impl QueueManager {
|
||||||
if self.shuffle {
|
if self.shuffle {
|
||||||
self.shuffle_behind(self.current_offset);
|
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();
|
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 {
|
pub fn clear(&mut self, exclude_current: bool) -> bool {
|
||||||
|
|
|
||||||
|
|
@ -143,20 +143,22 @@ impl Playback {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
trace!("got tracks {:?}", all_tracks);
|
trace!("got tracks {:?}", all_tracks);
|
||||||
{
|
let track = {
|
||||||
let Ok(mut queue) = self.queue.lock() else {
|
let Ok(mut queue) = self.queue.lock() else {
|
||||||
debug!("got queue lock");
|
debug!("got queue lock");
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
debug!("got queue lock");
|
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 queue_update_tx = self.update_tx.clone();
|
||||||
let update = StreamUpdate::Queue(queue.clone().into());
|
let update = StreamUpdate::Queue(queue.clone().into());
|
||||||
if let Err(err) = queue_update_tx.send(update) {
|
if let Err(err) = queue_update_tx.send(update) {
|
||||||
trace!("{:?}", err)
|
trace!("{:?}", err)
|
||||||
}
|
}
|
||||||
}
|
track
|
||||||
|
};
|
||||||
debug!("que lock released");
|
debug!("que lock released");
|
||||||
|
self.play(track).in_current_span().await;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaybackMessage::Append { uuids, span } => {
|
PlaybackMessage::Append { uuids, span } => {
|
||||||
|
|
@ -174,20 +176,22 @@ impl Playback {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
trace!("got tracks {:?}", all_tracks);
|
trace!("got tracks {:?}", all_tracks);
|
||||||
{
|
let track = {
|
||||||
let Ok(mut queue) = self.queue.lock() else {
|
let Ok(mut queue) = self.queue.lock() else {
|
||||||
debug!("got queue lock");
|
debug!("got queue lock");
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
debug!("got queue lock");
|
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 queue_update_tx = self.update_tx.clone();
|
||||||
let update = StreamUpdate::Queue(queue.clone().into());
|
let update = StreamUpdate::Queue(queue.clone().into());
|
||||||
if let Err(err) = queue_update_tx.send(update) {
|
if let Err(err) = queue_update_tx.send(update) {
|
||||||
trace!("{:?}", err)
|
trace!("{:?}", err)
|
||||||
}
|
}
|
||||||
}
|
track
|
||||||
|
};
|
||||||
debug!("queue lock released");
|
debug!("queue lock released");
|
||||||
|
self.play(track).in_current_span().await;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaybackMessage::Remove { positions, span } => {
|
PlaybackMessage::Remove { positions, span } => {
|
||||||
|
|
@ -247,20 +251,22 @@ impl Playback {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
trace!("got tracks {:?}", all_tracks);
|
trace!("got tracks {:?}", all_tracks);
|
||||||
{
|
let track = {
|
||||||
let Ok(mut queue) = self.queue.lock() else {
|
let Ok(mut queue) = self.queue.lock() else {
|
||||||
debug!("got queue lock");
|
debug!("got queue lock");
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
debug!("got queue lock");
|
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 queue_update_tx = self.update_tx.clone();
|
||||||
let update = StreamUpdate::Queue(queue.clone().into());
|
let update = StreamUpdate::Queue(queue.clone().into());
|
||||||
if let Err(err) = queue_update_tx.send(update) {
|
if let Err(err) = queue_update_tx.send(update) {
|
||||||
trace!("{:?}", err)
|
trace!("{:?}", err)
|
||||||
};
|
};
|
||||||
}
|
track
|
||||||
|
};
|
||||||
debug!("queue lock released");
|
debug!("queue lock released");
|
||||||
|
self.play(track).in_current_span().await;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaybackMessage::Clear {
|
PlaybackMessage::Clear {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue