(Re)store currently playing track + shuffle state

Solves #448
This commit is contained in:
Henrik Friedrichsen
2021-04-09 19:10:34 +02:00
parent d0db141c2d
commit cea5228245
5 changed files with 61 additions and 25 deletions

View File

@@ -31,14 +31,23 @@ pub struct Queue {
impl Queue {
pub fn new(spotify: Spotify, cfg: Arc<Config>) -> Queue {
let queue = cfg.state().queue.clone();
Queue {
queue: Arc::new(RwLock::new(queue)),
spotify,
current_track: RwLock::new(None),
random_order: RwLock::new(None),
let state = cfg.state().queuestate.clone();
let queue = Queue {
queue: Arc::new(RwLock::new(state.queue)),
spotify: spotify.clone(),
current_track: RwLock::new(state.current_track),
random_order: RwLock::new(state.random_order),
cfg,
};
if let Some(playable) = queue.get_current() {
spotify.load(&playable, false, state.track_progress.as_millis() as u32);
spotify.update_track();
spotify.pause();
spotify.seek(state.track_progress.as_millis() as u32);
}
queue
}
pub fn next_index(&self) -> Option<usize> {
@@ -245,7 +254,7 @@ impl Queue {
}
if let Some(track) = &self.queue.read().unwrap().get(index) {
self.spotify.load(&track);
self.spotify.load(&track, true, 0);
let mut current = self.current_track.write().unwrap();
current.replace(index);
self.spotify.update_track();
@@ -342,6 +351,10 @@ impl Queue {
self.cfg.state().shuffle
}
pub fn get_random_order(&self) -> Option<Vec<usize>> {
self.random_order.read().unwrap().clone()
}
fn generate_random_order(&self) {
let q = self.queue.read().unwrap();
let mut order: Vec<usize> = Vec::with_capacity(q.len());