Add option to customize library tabs

New option is called `library_tabs`. By default all tabs are enabled.

Fixes #798
This commit is contained in:
Henrik Friedrichsen
2022-05-10 22:59:49 +02:00
parent f931624a5b
commit cef6eb43b0
3 changed files with 74 additions and 49 deletions

View File

@@ -2,9 +2,11 @@ use std::sync::Arc;
use cursive::view::ViewWrapper;
use cursive::Cursive;
use strum::IntoEnumIterator;
use crate::command::Command;
use crate::commands::CommandResult;
use crate::config::LibraryTab;
use crate::library::Library;
use crate::queue::Queue;
use crate::traits::ViewExt;
@@ -19,35 +21,46 @@ pub struct LibraryView {
impl LibraryView {
pub fn new(queue: Arc<Queue>, library: Arc<Library>) -> Self {
let tabs = TabView::new()
.tab(
"tracks",
"Tracks",
ListView::new(library.tracks.clone(), queue.clone(), library.clone()),
)
.tab(
"albums",
"Albums",
ListView::new(library.albums.clone(), queue.clone(), library.clone()),
)
.tab(
"artists",
"Artists",
ListView::new(library.artists.clone(), queue.clone(), library.clone()),
)
.tab(
"playlists",
"Playlists",
PlaylistsView::new(queue.clone(), library.clone()),
)
.tab(
"podcasts",
"Podcasts",
ListView::new(library.shows.clone(), queue, library.clone()),
);
let mut tabview = TabView::new();
let selected_tabs = library
.cfg
.values()
.library_tabs
.clone()
.unwrap_or(Vec::from_iter(LibraryTab::iter()));
for tab in selected_tabs {
match tab {
LibraryTab::Tracks => tabview.add_tab(
"tracks",
"Tracks",
ListView::new(library.tracks.clone(), queue.clone(), library.clone()),
),
LibraryTab::Albums => tabview.add_tab(
"albums",
"Albums",
ListView::new(library.albums.clone(), queue.clone(), library.clone()),
),
LibraryTab::Artists => tabview.add_tab(
"artists",
"Artists",
ListView::new(library.artists.clone(), queue.clone(), library.clone()),
),
LibraryTab::Playlists => tabview.add_tab(
"playlists",
"Playlists",
PlaylistsView::new(queue.clone(), library.clone()),
),
LibraryTab::Podcasts => tabview.add_tab(
"podcasts",
"Podcasts",
ListView::new(library.shows.clone(), queue.clone(), library.clone()),
),
}
}
Self {
tabs,
tabs: tabview,
display_name: library.display_name.clone(),
}
}