Implement saved tracks, albums, and artists
This commit is contained in:
@@ -8,7 +8,7 @@ use std::cmp::min;
|
||||
use std::sync::Arc;
|
||||
|
||||
use commands::CommandResult;
|
||||
use playlists::Playlists;
|
||||
use library::Library;
|
||||
use queue::Queue;
|
||||
use track::Track;
|
||||
use traits::ViewExt;
|
||||
@@ -17,17 +17,17 @@ use ui::modal::Modal;
|
||||
|
||||
pub struct QueueView {
|
||||
list: ListView<Track>,
|
||||
playlists: Arc<Playlists>,
|
||||
library: Arc<Library>,
|
||||
queue: Arc<Queue>,
|
||||
}
|
||||
|
||||
impl QueueView {
|
||||
pub fn new(queue: Arc<Queue>, playlists: Arc<Playlists>) -> QueueView {
|
||||
pub fn new(queue: Arc<Queue>, library: Arc<Library>) -> QueueView {
|
||||
let list = ListView::new(queue.queue.clone(), queue.clone());
|
||||
|
||||
QueueView {
|
||||
list,
|
||||
playlists,
|
||||
library,
|
||||
queue,
|
||||
}
|
||||
}
|
||||
@@ -35,20 +35,20 @@ impl QueueView {
|
||||
fn save_dialog_cb(
|
||||
s: &mut Cursive,
|
||||
queue: Arc<Queue>,
|
||||
playlists: Arc<Playlists>,
|
||||
library: Arc<Library>,
|
||||
id: Option<String>,
|
||||
) {
|
||||
let tracks = queue.queue.read().unwrap().clone();
|
||||
match id {
|
||||
Some(id) => {
|
||||
playlists.overwrite_playlist(&id, &tracks);
|
||||
library.overwrite_playlist(&id, &tracks);
|
||||
s.pop_layer();
|
||||
}
|
||||
None => {
|
||||
s.pop_layer();
|
||||
let edit = EditView::new()
|
||||
.on_submit(move |s: &mut Cursive, name| {
|
||||
playlists.save_playlist(name, &tracks);
|
||||
library.save_playlist(name, &tracks);
|
||||
s.pop_layer();
|
||||
})
|
||||
.with_id("name")
|
||||
@@ -63,16 +63,16 @@ impl QueueView {
|
||||
}
|
||||
}
|
||||
|
||||
fn save_dialog(queue: Arc<Queue>, playlists: Arc<Playlists>) -> Modal<Dialog> {
|
||||
fn save_dialog(queue: Arc<Queue>, library: Arc<Library>) -> Modal<Dialog> {
|
||||
let mut list_select: SelectView<Option<String>> = SelectView::new().autojump();
|
||||
list_select.add_item("[Create new]", None);
|
||||
|
||||
for list in playlists.items().iter() {
|
||||
for list in library.items().iter() {
|
||||
list_select.add_item(list.name.clone(), Some(list.id.clone()));
|
||||
}
|
||||
|
||||
list_select.set_on_submit(move |s, selected| {
|
||||
Self::save_dialog_cb(s, queue.clone(), playlists.clone(), selected.clone())
|
||||
Self::save_dialog_cb(s, queue.clone(), library.clone(), selected.clone())
|
||||
});
|
||||
|
||||
let dialog = Dialog::new()
|
||||
@@ -92,9 +92,9 @@ impl ViewWrapper for QueueView {
|
||||
Event::Char('s') => {
|
||||
debug!("save list");
|
||||
let queue = self.queue.clone();
|
||||
let playlists = self.playlists.clone();
|
||||
let library = self.library.clone();
|
||||
let cb = move |s: &mut Cursive| {
|
||||
let dialog = Self::save_dialog(queue.clone(), playlists.clone());
|
||||
let dialog = Self::save_dialog(queue.clone(), library.clone());
|
||||
s.add_layer(dialog)
|
||||
};
|
||||
EventResult::Consumed(Some(Callback::from_fn(cb)))
|
||||
|
||||
Reference in New Issue
Block a user