Krolyxon
Commit d0b76c3

rmptuid0b76c3

add playlist viwer

Author
krolxon
Date
2024-04-30 13:30 +0530
Parent
87bb8e9
Commit
d0b76c3a486b328209900ef8652c3e6ed9f99783

+66 −3

1 file changed

  1. M src/ui.rs +66 −3
M src/ui.rs View
@@ -32,7 +32,8 @@ pub fn render(app: &mut App, frame: &mut Frame) {
3232
3333 match app.selected_tab {
3434 SelectedTab::Queue => draw_queue(frame, app, layout[0]),
35− SelectedTab::Playlists => draw_playlists(frame, app, layout[0]),
35+ // SelectedTab::Playlists => draw_playlists(frame, app, layout[0]),
36+ SelectedTab::Playlists => draw_playlist_viewer(frame, app, layout[0]),
3637 SelectedTab::DirectoryBrowser => draw_directory_browser(frame, app, layout[0]),
3738 }
3839
@@ -122,7 +123,7 @@ fn draw_directory_browser(frame: &mut Frame, app: &mut App, size: Rect) {
122123 let table = Table::new(
123124 rows,
124125 [
125− Constraint::Percentage(20),
126+ Constraint::Percentage(34),
126127 Constraint::Percentage(3),
127128 Constraint::Min(30),
128129 Constraint::Percentage(30),
@@ -220,7 +221,7 @@ fn draw_queue(frame: &mut Frame, app: &mut App, size: Rect) {
220221 let table = Table::new(
221222 rows,
222223 [
223− Constraint::Percentage(20),
224+ Constraint::Percentage(34),
224225 Constraint::Percentage(3),
225226 Constraint::Min(30),
226227 Constraint::Percentage(30),
@@ -379,6 +380,68 @@ fn draw_progress_bar(frame: &mut Frame, app: &mut App, size: Rect) {
379380 frame.render_widget(progress_bar, size);
380381 }
381382
383+fn draw_playlist_viewer(frame: &mut Frame, app: &mut App, area: Rect) {
384+ let layouts = Layout::default()
385+ .direction(Direction::Horizontal)
386+ .constraints(vec![Constraint::Percentage(40), Constraint::Percentage(60)])
387+ .split(area);
388+
389+ // Draw list of playlists
390+ let mut state = ListState::default();
391+ let title = Block::default().title(Title::from("Playlist".green().bold()));
392+ let list = List::new(app.pl_list.list.clone())
393+ .block(title.borders(Borders::ALL))
394+ .highlight_style(
395+ Style::new()
396+ .fg(Color::Cyan)
397+ .bg(Color::Black)
398+ .add_modifier(Modifier::BOLD)
399+ .add_modifier(Modifier::REVERSED),
400+ )
401+ .highlight_symbol(">>")
402+ .repeat_highlight_symbol(true);
403+ state.select(Some(app.pl_list.index));
404+ frame.render_stateful_widget(list, layouts[0], &mut state);
405+
406+ // Playlist viewer
407+ let pl_name = app.pl_list.list.get(app.pl_list.index).unwrap();
408+ let songs = app.conn.conn.playlist(pl_name).unwrap();
409+ let rows = songs.iter().map(|song| {
410+ let title = song.clone().title.unwrap_or_default().cyan();
411+ let artist = song.clone().artist.unwrap_or_else(|| song.clone().file);
412+ let time = App::format_time(song.clone().duration.unwrap_or_else(|| Duration::new(0, 0)));
413+
414+ let row = Row::new(vec![
415+ Cell::from(artist),
416+ Cell::from(title),
417+ Cell::from(time.to_string().green()),
418+ ]);
419+ row
420+ });
421+
422+ let title = Block::default()
423+ .title(format!("Content: ({} items)", songs.len()).bold())
424+ .borders(Borders::ALL);
425+ let table = Table::new(
426+ rows,
427+ vec![
428+ Constraint::Percentage(40),
429+ Constraint::Percentage(40),
430+ Constraint::Percentage(20),
431+ ],
432+ )
433+ .block(title)
434+ .highlight_style(
435+ Style::default()
436+ .add_modifier(Modifier::REVERSED)
437+ .fg(Color::Cyan)
438+ .bg(Color::Black),
439+ )
440+ .highlight_symbol(">>")
441+ .flex(layout::Flex::SpaceBetween);
442+ frame.render_widget(table, layouts[1]);
443+}
444+
382445 fn draw_add_to_playlist(frame: &mut Frame, app: &mut App, area: Rect) {
383446 let area = centered_rect(40, 50, area);
384447 let mut state = ListState::default();