Implement saved tracks, albums, and artists

This commit is contained in:
KoffeinFlummi
2019-04-16 19:52:22 +02:00
parent dd69a8c6f2
commit 210c7d9f4e
14 changed files with 688 additions and 391 deletions

View File

@@ -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)))