From aca208e0d843a43779cac565581bed620f2b08cd Mon Sep 17 00:00:00 2001 From: krolxon Date: Mon, 13 May 2024 14:33:24 +0530 Subject: [PATCH] pl_append functionality for playlists --- src/event/pl_append_keys.rs | 26 ++++++++++++++++++++------ src/event/pl_rename_keys.rs | 2 +- src/list.rs | 5 +++++ src/ui.rs | 2 +- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/event/pl_append_keys.rs b/src/event/pl_append_keys.rs index 47fd2f4..57721c0 100755 --- a/src/event/pl_append_keys.rs +++ b/src/event/pl_append_keys.rs @@ -13,14 +13,12 @@ pub fn hande_pl_append_keys(key_event: KeyEvent, app: &mut App) -> AppResult<()> KeyCode::Char('k') | KeyCode::Up => app.append_list.prev(), KeyCode::Enter => { - let pl_index = app.append_list.index; - let pl_name = &app.append_list.list.get(pl_index).unwrap(); + // name of highlighted playlist in append list + let pl_name = &app.append_list.get_item_at_current_index(); - let s_index: usize; match app.selected_tab { SelectedTab::Queue => { - s_index = app.queue_list.index; - let short_path = &app.queue_list.list.get(s_index).unwrap().file; + let short_path = &app.queue_list.get_item_at_current_index().file; if let Some(full_path) = app.conn.get_full_path(short_path) { let song = app.conn.get_song_with_only_filename(&full_path); @@ -68,7 +66,23 @@ pub fn hande_pl_append_keys(key_event: KeyEvent, app: &mut App) -> AppResult<()> } } } - _ => {} + + SelectedTab::Playlists => { + let playlist_name = app.pl_list.get_item_at_current_index(); + if *pl_name == "Current Playlist" { + app.conn.load_playlist(playlist_name)?; + app.update_queue(); + } else { + let songs = app.conn.conn.playlist(playlist_name)?; + for song in songs { + // We ignore the Err() since there could be songs in playlists, which do not exist in the db anymore. + // So instead of panicking, we just ignore if the song does not exists + app.conn + .add_to_playlist(*pl_name, &song) + .unwrap_or_else(|_| {}); + } + } + } } // hide the playlist popup diff --git a/src/event/pl_rename_keys.rs b/src/event/pl_rename_keys.rs index fff1582..c9fc050 100755 --- a/src/event/pl_rename_keys.rs +++ b/src/event/pl_rename_keys.rs @@ -16,7 +16,7 @@ pub fn handle_pl_rename_keys(key_event: KeyEvent, app: &mut App) -> AppResult<() } KeyCode::Enter => { app.conn.conn.pl_rename( - app.pl_list.list.get(app.pl_list.index).unwrap(), + app.pl_list.get_item_at_current_index(), &app.pl_newname_input, )?; app.pl_list.list = App::get_playlist(&mut app.conn.conn)?; diff --git a/src/list.rs b/src/list.rs index 90f24d6..8f4b38e 100755 --- a/src/list.rs +++ b/src/list.rs @@ -30,6 +30,11 @@ impl ContentList { pub fn reset_index(&mut self) { self.index = 0; } + + /// Returns the self.list[index] item + pub fn get_item_at_current_index(&mut self) -> &T { + self.list.get(self.index).unwrap() + } } impl Default for ContentList { diff --git a/src/ui.rs b/src/ui.rs index 83057af..5c7a23b 100755 --- a/src/ui.rs +++ b/src/ui.rs @@ -355,7 +355,7 @@ fn draw_playlist_viewer(frame: &mut Frame, app: &mut App, area: Rect) { return; } - let pl_name = app.pl_list.list.get(app.pl_list.index).unwrap(); + let pl_name = app.pl_list.get_item_at_current_index(); let songs = app.conn.conn.playlist(pl_name).unwrap(); let rows = songs.iter().map(|song| { let title = song.clone().title.unwrap_or_default().cyan();