add playlist viwer
This commit is contained in:
parent
87bb8e9473
commit
d0b76c3a48
69
src/ui.rs
69
src/ui.rs
|
|
@ -32,7 +32,8 @@ pub fn render(app: &mut App, frame: &mut Frame) {
|
||||||
|
|
||||||
match app.selected_tab {
|
match app.selected_tab {
|
||||||
SelectedTab::Queue => draw_queue(frame, app, layout[0]),
|
SelectedTab::Queue => draw_queue(frame, app, layout[0]),
|
||||||
SelectedTab::Playlists => draw_playlists(frame, app, layout[0]),
|
// SelectedTab::Playlists => draw_playlists(frame, app, layout[0]),
|
||||||
|
SelectedTab::Playlists => draw_playlist_viewer(frame, app, layout[0]),
|
||||||
SelectedTab::DirectoryBrowser => draw_directory_browser(frame, app, layout[0]),
|
SelectedTab::DirectoryBrowser => draw_directory_browser(frame, app, layout[0]),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -122,7 +123,7 @@ fn draw_directory_browser(frame: &mut Frame, app: &mut App, size: Rect) {
|
||||||
let table = Table::new(
|
let table = Table::new(
|
||||||
rows,
|
rows,
|
||||||
[
|
[
|
||||||
Constraint::Percentage(20),
|
Constraint::Percentage(34),
|
||||||
Constraint::Percentage(3),
|
Constraint::Percentage(3),
|
||||||
Constraint::Min(30),
|
Constraint::Min(30),
|
||||||
Constraint::Percentage(30),
|
Constraint::Percentage(30),
|
||||||
|
|
@ -220,7 +221,7 @@ fn draw_queue(frame: &mut Frame, app: &mut App, size: Rect) {
|
||||||
let table = Table::new(
|
let table = Table::new(
|
||||||
rows,
|
rows,
|
||||||
[
|
[
|
||||||
Constraint::Percentage(20),
|
Constraint::Percentage(34),
|
||||||
Constraint::Percentage(3),
|
Constraint::Percentage(3),
|
||||||
Constraint::Min(30),
|
Constraint::Min(30),
|
||||||
Constraint::Percentage(30),
|
Constraint::Percentage(30),
|
||||||
|
|
@ -379,6 +380,68 @@ fn draw_progress_bar(frame: &mut Frame, app: &mut App, size: Rect) {
|
||||||
frame.render_widget(progress_bar, size);
|
frame.render_widget(progress_bar, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn draw_playlist_viewer(frame: &mut Frame, app: &mut App, area: Rect) {
|
||||||
|
let layouts = Layout::default()
|
||||||
|
.direction(Direction::Horizontal)
|
||||||
|
.constraints(vec![Constraint::Percentage(40), Constraint::Percentage(60)])
|
||||||
|
.split(area);
|
||||||
|
|
||||||
|
// Draw list of playlists
|
||||||
|
let mut state = ListState::default();
|
||||||
|
let title = Block::default().title(Title::from("Playlist".green().bold()));
|
||||||
|
let list = List::new(app.pl_list.list.clone())
|
||||||
|
.block(title.borders(Borders::ALL))
|
||||||
|
.highlight_style(
|
||||||
|
Style::new()
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.bg(Color::Black)
|
||||||
|
.add_modifier(Modifier::BOLD)
|
||||||
|
.add_modifier(Modifier::REVERSED),
|
||||||
|
)
|
||||||
|
.highlight_symbol(">>")
|
||||||
|
.repeat_highlight_symbol(true);
|
||||||
|
state.select(Some(app.pl_list.index));
|
||||||
|
frame.render_stateful_widget(list, layouts[0], &mut state);
|
||||||
|
|
||||||
|
// Playlist viewer
|
||||||
|
let pl_name = app.pl_list.list.get(app.pl_list.index).unwrap();
|
||||||
|
let songs = app.conn.conn.playlist(pl_name).unwrap();
|
||||||
|
let rows = songs.iter().map(|song| {
|
||||||
|
let title = song.clone().title.unwrap_or_default().cyan();
|
||||||
|
let artist = song.clone().artist.unwrap_or_else(|| song.clone().file);
|
||||||
|
let time = App::format_time(song.clone().duration.unwrap_or_else(|| Duration::new(0, 0)));
|
||||||
|
|
||||||
|
let row = Row::new(vec![
|
||||||
|
Cell::from(artist),
|
||||||
|
Cell::from(title),
|
||||||
|
Cell::from(time.to_string().green()),
|
||||||
|
]);
|
||||||
|
row
|
||||||
|
});
|
||||||
|
|
||||||
|
let title = Block::default()
|
||||||
|
.title(format!("Content: ({} items)", songs.len()).bold())
|
||||||
|
.borders(Borders::ALL);
|
||||||
|
let table = Table::new(
|
||||||
|
rows,
|
||||||
|
vec![
|
||||||
|
Constraint::Percentage(40),
|
||||||
|
Constraint::Percentage(40),
|
||||||
|
Constraint::Percentage(20),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
.block(title)
|
||||||
|
.highlight_style(
|
||||||
|
Style::default()
|
||||||
|
.add_modifier(Modifier::REVERSED)
|
||||||
|
.fg(Color::Cyan)
|
||||||
|
.bg(Color::Black),
|
||||||
|
)
|
||||||
|
.highlight_symbol(">>")
|
||||||
|
.flex(layout::Flex::SpaceBetween);
|
||||||
|
frame.render_widget(table, layouts[1]);
|
||||||
|
}
|
||||||
|
|
||||||
fn draw_add_to_playlist(frame: &mut Frame, app: &mut App, area: Rect) {
|
fn draw_add_to_playlist(frame: &mut Frame, app: &mut App, area: Rect) {
|
||||||
let area = centered_rect(40, 50, area);
|
let area = centered_rect(40, 50, area);
|
||||||
let mut state = ListState::default();
|
let mut state = ListState::default();
|
||||||
|
|
|
||||||
Reference in New Issue