Add seeking

This commit is contained in:
KoffeinFlummi
2019-03-25 18:29:00 +01:00
parent 992be7c502
commit e6a7d8a693
6 changed files with 130 additions and 7 deletions

View File

@@ -40,6 +40,7 @@ enum WorkerCommand {
Play,
Pause,
Stop,
Seek(u32),
RequestToken(oneshot::Sender<Token>),
}
@@ -135,6 +136,9 @@ impl futures::Future for Worker {
self.events.send(Event::Player(PlayerEvent::Stopped));
self.active = false;
}
WorkerCommand::Seek(pos) => {
self.player.seek(pos);
}
WorkerCommand::RequestToken(sender) => {
self.token_task = Spotify::get_token(&self.session, sender);
progress = true;
@@ -499,4 +503,21 @@ impl Spotify {
info!("stop()");
self.channel.unbounded_send(WorkerCommand::Stop).unwrap();
}
pub fn seek(&self, position_ms: u32) {
self.set_elapsed(Some(Duration::from_millis(position_ms.into())));
self.set_since(if self.get_current_status() == PlayerEvent::Playing {
Some(SystemTime::now())
} else {
None
});
self.channel.unbounded_send(WorkerCommand::Seek(position_ms)).unwrap();
}
pub fn seek_relative(&self, delta: i32) {
let progress = self.get_current_progress();
let new = (progress.as_secs() * 1000) as i32 + progress.subsec_millis() as i32 + delta;
self.seek(std::cmp::max(0, new) as u32);
}
}