This commit is contained in:
Henrik Friedrichsen
2019-02-26 21:34:20 +01:00
parent 8df48a7270
commit b06b6bc15b
4 changed files with 45 additions and 22 deletions

View File

@@ -23,9 +23,9 @@ use futures::Future;
use futures::Stream;
use tokio_core::reactor::Core;
use std::thread;
use std::sync::Arc;
use std::sync::Mutex;
use std::thread;
use queue::Queue;
@@ -45,16 +45,20 @@ struct Worker {
commands: mpsc::UnboundedReceiver<WorkerCommand>,
player: Player,
play_task: Box<futures::Future<Item = (), Error = oneshot::Canceled>>,
queue: Arc<Mutex<Queue>>
queue: Arc<Mutex<Queue>>,
}
impl Worker {
fn new(commands: mpsc::UnboundedReceiver<WorkerCommand>, player: Player, queue: Arc<Mutex<Queue>>) -> Worker {
fn new(
commands: mpsc::UnboundedReceiver<WorkerCommand>,
player: Player,
queue: Arc<Mutex<Queue>>,
) -> Worker {
Worker {
commands: commands,
player: player,
play_task: Box::new(futures::empty()),
queue: queue
queue: queue,
}
}
}
@@ -89,7 +93,8 @@ impl futures::Future for Worker {
let mut queue = self.queue.lock().unwrap();
if let Some(track) = queue.dequeue() {
debug!("next track in queue: {}", track.name);
let trackid = SpotifyId::from_base62(&track.id).expect("could not load track");
let trackid =
SpotifyId::from_base62(&track.id).expect("could not load track");
self.play_task = Box::new(self.player.load(trackid, false, 0));
self.player.play();
}
@@ -111,7 +116,12 @@ impl futures::Future for Worker {
}
impl Spotify {
pub fn new(user: String, password: String, client_id: String, queue: Arc<Mutex<Queue>>) -> Spotify {
pub fn new(
user: String,
password: String,
client_id: String,
queue: Arc<Mutex<Queue>>,
) -> Spotify {
let session_config = SessionConfig::default();
let player_config = PlayerConfig {
bitrate: Bitrate::Bitrate320,
@@ -123,7 +133,15 @@ impl Spotify {
let (tx, rx) = mpsc::unbounded();
let (p, c) = oneshot::channel();
thread::spawn(move || {
Spotify::worker(rx, p, session_config, player_config, credentials, client_id, queue)
Spotify::worker(
rx,
p,
session_config,
player_config,
credentials,
client_id,
queue,
)
});
let token = c.wait().unwrap();
@@ -143,7 +161,7 @@ impl Spotify {
player_config: PlayerConfig,
credentials: Credentials,
client_id: String,
queue: Arc<Mutex<Queue>>
queue: Arc<Mutex<Queue>>,
) {
let mut core = Core::new().unwrap();
let handle = core.handle();