aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkrolxon <krolyxon@tutanota.com>2024-04-30 13:30:31 +0530
committerkrolxon <krolyxon@tutanota.com>2024-04-30 13:30:31 +0530
commitd0b76c3a486b328209900ef8652c3e6ed9f99783 (patch)
treebce35f23dc73b3d935939727ae30b46310f8c42c
parent87bb8e9473194b47c9f52e49c7fe2b632bd36aef (diff)
add playlist viwer
-rwxr-xr-xsrc/ui.rs69
1 files changed, 66 insertions, 3 deletions
diff --git a/src/ui.rs b/src/ui.rs
index c1877a6..e0784e0 100755
--- a/src/ui.rs
+++ b/src/ui.rs
@@ -32,7 +32,8 @@ pub fn render(app: &mut App, frame: &mut Frame) {
match app.selected_tab {
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]),
}
@@ -122,7 +123,7 @@ fn draw_directory_browser(frame: &mut Frame, app: &mut App, size: Rect) {
let table = Table::new(
rows,
[
- Constraint::Percentage(20),
+ Constraint::Percentage(34),
Constraint::Percentage(3),
Constraint::Min(30),
Constraint::Percentage(30),
@@ -220,7 +221,7 @@ fn draw_queue(frame: &mut Frame, app: &mut App, size: Rect) {
let table = Table::new(
rows,
[
- Constraint::Percentage(20),
+ Constraint::Percentage(34),
Constraint::Percentage(3),
Constraint::Min(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);
}
+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) {
let area = centered_rect(40, 50, area);
let mut state = ListState::default();