diff --git a/src/main.rs b/src/main.rs index 7f4e525..27a9ccb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,9 +25,9 @@ use std::sync::Arc; use std::sync::Mutex; use cursive::event::Key; +use cursive::traits::Identifiable; use cursive::view::ScrollStrategy; use cursive::views::*; -use cursive::traits::Identifiable; use cursive::Cursive; mod config; diff --git a/src/spotify.rs b/src/spotify.rs index c79a3aa..0a8943e 100644 --- a/src/spotify.rs +++ b/src/spotify.rs @@ -29,8 +29,8 @@ use tokio_core::reactor::Core; use std::sync::Arc; use std::sync::Mutex; use std::sync::RwLock; -use std::time::{Duration, SystemTime}; use std::thread; +use std::time::{Duration, SystemTime}; use events::{Event, EventManager}; use queue::Queue; @@ -99,7 +99,8 @@ impl futures::Future for Worker { debug!("message received!"); match cmd { WorkerCommand::Load(track) => { - 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)); info!("player loading track.."); self.events.send(Event::PlayerTrack(Some(track))); @@ -238,36 +239,58 @@ impl Spotify { } pub fn get_current_status(&self) -> PlayerStatus { - let status = self.status.read().expect("could not acquire read lock on playback status"); + let status = self + .status + .read() + .expect("could not acquire read lock on playback status"); (*status).clone() } pub fn get_current_track(&self) -> Option { - let track = self.track.read().expect("could not acquire read lock on current track"); + let track = self + .track + .read() + .expect("could not acquire read lock on current track"); (*track).clone() } pub fn get_current_progress(&self) -> Duration { - self.get_elapsed().unwrap_or(Duration::from_secs(0)) + self.get_since().map(|t| t.elapsed().unwrap()).unwrap_or(Duration::from_secs(0)) + self.get_elapsed().unwrap_or(Duration::from_secs(0)) + + self + .get_since() + .map(|t| t.elapsed().unwrap()) + .unwrap_or(Duration::from_secs(0)) } fn set_elapsed(&self, new_elapsed: Option) { - let mut elapsed = self.elapsed.write().expect("could not acquire write lock on elapsed time"); + let mut elapsed = self + .elapsed + .write() + .expect("could not acquire write lock on elapsed time"); *elapsed = new_elapsed; } fn get_elapsed(&self) -> Option { - let elapsed = self.elapsed.read().expect("could not acquire read lock on elapsed time"); + let elapsed = self + .elapsed + .read() + .expect("could not acquire read lock on elapsed time"); (*elapsed).clone() } fn set_since(&self, new_since: Option) { - let mut since = self.since.write().expect("could not acquire write lock on since time"); + let mut since = self + .since + .write() + .expect("could not acquire write lock on since time"); *since = new_since; } fn get_since(&self) -> Option { - let since = self.since.read().expect("could not acquire read lock on since time"); + let since = self + .since + .read() + .expect("could not acquire read lock on since time"); (*since).clone() } @@ -300,10 +323,10 @@ impl Spotify { PlayerStatus::Paused => { self.set_elapsed(Some(self.get_current_progress())); self.set_since(None); - }, + } PlayerStatus::Playing => { self.set_since(Some(SystemTime::now())); - }, + } PlayerStatus::Stopped => { self.set_elapsed(None); self.set_since(None); @@ -321,7 +344,10 @@ impl Spotify { self.set_elapsed(None); self.set_since(None); - let mut track = self.track.write().expect("could not acquire write lock on current track"); + let mut track = self + .track + .write() + .expect("could not acquire write lock on current track"); *track = new_track; } diff --git a/src/ui/layout.rs b/src/ui/layout.rs index 2be888c..d4fa54c 100644 --- a/src/ui/layout.rs +++ b/src/ui/layout.rs @@ -1,16 +1,16 @@ -use std::collections::{HashMap}; +use std::collections::HashMap; use cursive::direction::Direction; -use cursive::event::{Event, EventResult, AnyCb}; +use cursive::event::{AnyCb, Event, EventResult}; use cursive::traits::View; -use cursive::view::{IntoBoxedView, Selector}; use cursive::vec::Vec2; +use cursive::view::{IntoBoxedView, Selector}; use cursive::Printer; pub struct Layout { views: HashMap>, statusbar: Box, - focus: Option + focus: Option, } impl Layout { @@ -18,7 +18,7 @@ impl Layout { Layout { views: HashMap::new(), statusbar: status.as_boxed_view(), - focus: None + focus: None, } } @@ -45,12 +45,13 @@ impl View for Layout { let v = self.views.get(id).unwrap(); let printer = &printer .offset((0, 0)) - .cropped((printer.size.x, printer.size.y - 2)) + .cropped((printer.size.x, printer.size.y)) .focused(true); v.draw(printer); } - self.statusbar.draw(&printer.offset((0, printer.size.y - 2))); + self.statusbar + .draw(&printer.offset((0, printer.size.y - 2))); } fn required_size(&mut self, constraint: Vec2) -> Vec2 { @@ -69,7 +70,7 @@ impl View for Layout { fn layout(&mut self, size: Vec2) { if let Some(ref id) = self.focus { let v = self.views.get_mut(id).unwrap(); - v.layout(Vec2::new(size.x, size.y - 1)); + v.layout(Vec2::new(size.x, size.y - 2)); } } diff --git a/src/ui/mod.rs b/src/ui/mod.rs index bdbef3d..1044dcf 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -1,6 +1,6 @@ +pub mod layout; pub mod playlist; pub mod queue; pub mod search; -pub mod trackbutton; pub mod statusbar; -pub mod layout; +pub mod trackbutton; diff --git a/src/ui/playlist.rs b/src/ui/playlist.rs index da443ac..ff2c570 100644 --- a/src/ui/playlist.rs +++ b/src/ui/playlist.rs @@ -5,7 +5,7 @@ use cursive::traits::Boxable; use cursive::traits::Identifiable; use cursive::views::*; use cursive::Cursive; -use rspotify::spotify::model::playlist::{SimplifiedPlaylist}; +use rspotify::spotify::model::playlist::SimplifiedPlaylist; use queue::Queue; use spotify::Spotify;