rustfmt
This commit is contained in:
@@ -23,15 +23,15 @@ use std::process;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
|
|
||||||
|
use cursive::event::Key;
|
||||||
use cursive::views::*;
|
use cursive::views::*;
|
||||||
use cursive::Cursive;
|
use cursive::Cursive;
|
||||||
use cursive::event::{Event, Key};
|
|
||||||
|
|
||||||
mod config;
|
mod config;
|
||||||
|
mod queue;
|
||||||
mod spotify;
|
mod spotify;
|
||||||
mod theme;
|
mod theme;
|
||||||
mod ui;
|
mod ui;
|
||||||
mod queue;
|
|
||||||
|
|
||||||
fn init_logger(content: TextContent) {
|
fn init_logger(content: TextContent) {
|
||||||
let mut builder = env_logger::Builder::from_default_env();
|
let mut builder = env_logger::Builder::from_default_env();
|
||||||
@@ -84,7 +84,7 @@ fn main() {
|
|||||||
cfg.username,
|
cfg.username,
|
||||||
cfg.password,
|
cfg.password,
|
||||||
cfg.client_id,
|
cfg.client_id,
|
||||||
queue.clone()
|
queue.clone(),
|
||||||
));
|
));
|
||||||
|
|
||||||
let searchscreen = cursive.active_screen();
|
let searchscreen = cursive.active_screen();
|
||||||
|
|||||||
@@ -9,13 +9,12 @@ pub struct Queue {
|
|||||||
impl Queue {
|
impl Queue {
|
||||||
pub fn new() -> Queue {
|
pub fn new() -> Queue {
|
||||||
Queue {
|
Queue {
|
||||||
queue: VecDeque::new()
|
queue: VecDeque::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn enqueue(&mut self, track: FullTrack) {
|
pub fn enqueue(&mut self, track: FullTrack) {
|
||||||
self.queue.push_back(track);
|
self.queue.push_back(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn dequeue(&mut self) -> Option<FullTrack> {
|
pub fn dequeue(&mut self) -> Option<FullTrack> {
|
||||||
self.queue.pop_front()
|
self.queue.pop_front()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ use futures::Future;
|
|||||||
use futures::Stream;
|
use futures::Stream;
|
||||||
use tokio_core::reactor::Core;
|
use tokio_core::reactor::Core;
|
||||||
|
|
||||||
use std::thread;
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
|
use std::thread;
|
||||||
|
|
||||||
use queue::Queue;
|
use queue::Queue;
|
||||||
|
|
||||||
@@ -45,16 +45,20 @@ struct Worker {
|
|||||||
commands: mpsc::UnboundedReceiver<WorkerCommand>,
|
commands: mpsc::UnboundedReceiver<WorkerCommand>,
|
||||||
player: Player,
|
player: Player,
|
||||||
play_task: Box<futures::Future<Item = (), Error = oneshot::Canceled>>,
|
play_task: Box<futures::Future<Item = (), Error = oneshot::Canceled>>,
|
||||||
queue: Arc<Mutex<Queue>>
|
queue: Arc<Mutex<Queue>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Worker {
|
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 {
|
Worker {
|
||||||
commands: commands,
|
commands: commands,
|
||||||
player: player,
|
player: player,
|
||||||
play_task: Box::new(futures::empty()),
|
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();
|
let mut queue = self.queue.lock().unwrap();
|
||||||
if let Some(track) = queue.dequeue() {
|
if let Some(track) = queue.dequeue() {
|
||||||
debug!("next track in queue: {}", track.name);
|
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.play_task = Box::new(self.player.load(trackid, false, 0));
|
||||||
self.player.play();
|
self.player.play();
|
||||||
}
|
}
|
||||||
@@ -111,7 +116,12 @@ impl futures::Future for Worker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Spotify {
|
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 session_config = SessionConfig::default();
|
||||||
let player_config = PlayerConfig {
|
let player_config = PlayerConfig {
|
||||||
bitrate: Bitrate::Bitrate320,
|
bitrate: Bitrate::Bitrate320,
|
||||||
@@ -123,7 +133,15 @@ impl Spotify {
|
|||||||
let (tx, rx) = mpsc::unbounded();
|
let (tx, rx) = mpsc::unbounded();
|
||||||
let (p, c) = oneshot::channel();
|
let (p, c) = oneshot::channel();
|
||||||
thread::spawn(move || {
|
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();
|
let token = c.wait().unwrap();
|
||||||
@@ -143,7 +161,7 @@ impl Spotify {
|
|||||||
player_config: PlayerConfig,
|
player_config: PlayerConfig,
|
||||||
credentials: Credentials,
|
credentials: Credentials,
|
||||||
client_id: String,
|
client_id: String,
|
||||||
queue: Arc<Mutex<Queue>>
|
queue: Arc<Mutex<Queue>>,
|
||||||
) {
|
) {
|
||||||
let mut core = Core::new().unwrap();
|
let mut core = Core::new().unwrap();
|
||||||
let handle = core.handle();
|
let handle = core.handle();
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ use std::sync::Mutex;
|
|||||||
|
|
||||||
use librespot::core::spotify_id::SpotifyId;
|
use librespot::core::spotify_id::SpotifyId;
|
||||||
|
|
||||||
use spotify::Spotify;
|
|
||||||
use queue::Queue;
|
use queue::Queue;
|
||||||
|
use spotify::Spotify;
|
||||||
|
|
||||||
pub struct SearchView {
|
pub struct SearchView {
|
||||||
pub view: Panel<LinearLayout>,
|
pub view: Panel<LinearLayout>,
|
||||||
@@ -17,7 +17,12 @@ pub struct SearchView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl SearchView {
|
impl SearchView {
|
||||||
fn search_handler(s: &mut Cursive, input: &str, spotify: Arc<Spotify>, queue: Arc<Mutex<Queue>>) {
|
fn search_handler(
|
||||||
|
s: &mut Cursive,
|
||||||
|
input: &str,
|
||||||
|
spotify: Arc<Spotify>,
|
||||||
|
queue: Arc<Mutex<Queue>>,
|
||||||
|
) {
|
||||||
let mut results: ViewRef<ListView> = s.find_id("search_results").unwrap();
|
let mut results: ViewRef<ListView> = s.find_id("search_results").unwrap();
|
||||||
let tracks = spotify.search(input, 50, 0);
|
let tracks = spotify.search(input, 50, 0);
|
||||||
|
|
||||||
@@ -27,7 +32,9 @@ impl SearchView {
|
|||||||
for track in tracks.tracks.items {
|
for track in tracks.tracks.items {
|
||||||
let s = spotify.clone();
|
let s = spotify.clone();
|
||||||
let trackid = SpotifyId::from_base62(&track.id).expect("could not load track");
|
let trackid = SpotifyId::from_base62(&track.id).expect("could not load track");
|
||||||
let artists = track.artists.iter()
|
let artists = track
|
||||||
|
.artists
|
||||||
|
.iter()
|
||||||
.map(|ref artist| artist.name.clone())
|
.map(|ref artist| artist.name.clone())
|
||||||
.collect::<Vec<String>>()
|
.collect::<Vec<String>>()
|
||||||
.join(", ");
|
.join(", ");
|
||||||
@@ -37,12 +44,11 @@ impl SearchView {
|
|||||||
s.play();
|
s.play();
|
||||||
});
|
});
|
||||||
let queue = queue.clone();
|
let queue = queue.clone();
|
||||||
let button_queue = OnEventView::new(button)
|
let button_queue = OnEventView::new(button).on_event(' ', move |_cursive| {
|
||||||
.on_event(' ', move |_cursive| {
|
let mut queue = queue.lock().unwrap();
|
||||||
let mut queue = queue.lock().unwrap();
|
queue.enqueue(track.clone());
|
||||||
queue.enqueue(track.clone());
|
debug!("Added to queue: {}", track.name);
|
||||||
debug!("Added to queue: {}", track.name);
|
});
|
||||||
});
|
|
||||||
results.add_child("", button_queue);
|
results.add_child("", button_queue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user