diff --git a/src/main.rs b/src/main.rs index f0d45a0..80b6c33 100644 --- a/src/main.rs +++ b/src/main.rs @@ -37,8 +37,8 @@ mod theme; mod ui; use events::{Event, EventManager}; -use ui::playlist::PlaylistEvent; use queue::QueueChange; +use ui::playlist::PlaylistEvent; fn init_logger(content: TextContent) { let mut builder = env_logger::Builder::from_default_env(); diff --git a/src/spotify.rs b/src/spotify.rs index 0dc2b13..8a1a090 100644 --- a/src/spotify.rs +++ b/src/spotify.rs @@ -11,9 +11,9 @@ use librespot::playback::config::Bitrate; use librespot::playback::player::Player; use rspotify::spotify::client::Spotify as SpotifyAPI; -use rspotify::spotify::model::search::SearchTracks; -use rspotify::spotify::model::playlist::{SimplifiedPlaylist, PlaylistTrack}; use rspotify::spotify::model::page::Page; +use rspotify::spotify::model::playlist::{PlaylistTrack, SimplifiedPlaylist}; +use rspotify::spotify::model::search::SearchTracks; use failure::Error; @@ -227,12 +227,17 @@ impl Spotify { self.api.search_track(query, limit, offset, None) } - pub fn current_user_playlist(&self, limit: u32, offset: u32) -> Result, Error> { + pub fn current_user_playlist( + &self, + limit: u32, + offset: u32, + ) -> Result, Error> { self.api.current_user_playlists(limit, offset) } pub fn user_playlist_tracks(&self, playlist_id: &str) -> Result, Error> { - self.api.user_playlist_tracks(&self.user, playlist_id, None, 50, 0, None) + self.api + .user_playlist_tracks(&self.user, playlist_id, None, 50, 0, None) } pub fn load(&self, track: SpotifyId) { diff --git a/src/ui/mod.rs b/src/ui/mod.rs index da2ab26..c457e3d 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -1,4 +1,4 @@ +pub mod playlist; pub mod queue; pub mod search; pub mod trackbutton; -pub mod playlist; diff --git a/src/ui/playlist.rs b/src/ui/playlist.rs index 0343312..931d734 100644 --- a/src/ui/playlist.rs +++ b/src/ui/playlist.rs @@ -1,70 +1,81 @@ use std::sync::{Arc, Mutex}; -use cursive::traits::Identifiable; use cursive::direction::Orientation; use cursive::traits::Boxable; +use cursive::traits::Identifiable; use cursive::views::*; use cursive::Cursive; +use rspotify::spotify::model::playlist::{SimplifiedPlaylist}; -use spotify::Spotify; use queue::Queue; +use spotify::Spotify; pub enum PlaylistEvent { Refresh, } pub struct PlaylistView { - pub view: Option>, + pub view: Option>>>>>, // FIXME: wow queue: Arc>, spotify: Arc, } impl PlaylistView { pub fn new(queue: Arc>, spotify: Arc) -> PlaylistView { - let playlist_overview: IdView = SelectView::new().with_id("playlists_overview"); - let scrollable = ScrollView::new(playlist_overview).full_width().full_height(); - let layout = LinearLayout::new(Orientation::Vertical).child(scrollable); - let rootpanel = Panel::new(layout).title("Playlists"); + let playlists = LinearLayout::new(Orientation::Vertical).with_id("playlists"); + let scrollable = ScrollView::new(playlists).full_width().full_height(); + let panel = Panel::new(scrollable).title("Playlists"); PlaylistView { - view: Some(rootpanel), + view: Some(panel), queue: queue, spotify: spotify, } } - fn clear_playlists(&self, playlist_overview: &mut ViewRef) { - playlist_overview.clear(); + fn clear_playlists(&self, playlists: &mut ViewRef) { + while playlists.len() > 0 { + playlists.remove_child(0); + } } - fn show_playlists(&self, playlist_overview: &mut ViewRef) { - let playlists = self.spotify.current_user_playlist(50, 0).unwrap().items; - for playlist in &playlists { - playlist_overview.add_item(playlist.name.clone(), playlist.id.clone()); - } - + fn create_button(&self, playlist: &SimplifiedPlaylist) -> BoxView