From 65f76181d3cbee48096ebe0424869d4c78bac89b Mon Sep 17 00:00:00 2001 From: krolxon Date: Wed, 12 Jun 2024 18:13:05 +0530 Subject: new feature: add to new playlist --- src/event/handler.rs | 10 +++++++--- src/event/mod.rs | 1 + src/event/new_pl_keys.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/event/pl_append_keys.rs | 15 +++++++++++++++ 4 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 src/event/new_pl_keys.rs (limited to 'src/event') diff --git a/src/event/handler.rs b/src/event/handler.rs index 02bdb14..8fd4286 100755 --- a/src/event/handler.rs +++ b/src/event/handler.rs @@ -6,7 +6,7 @@ use crate::{ use crossterm::event::{KeyCode, KeyEvent, KeyModifiers, MouseEvent, MouseEventKind}; use std::time::Duration; -use super::{pl_append_keys, pl_rename_keys, search_keys}; +use super::{pl_append_keys, pl_rename_keys, new_pl_keys, search_keys}; pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> { // searching, playlist renaming, playlist appending @@ -14,6 +14,8 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> { search_keys::handle_search_keys(key_event, app)?; } else if app.inputmode == InputMode::PlaylistRename { pl_rename_keys::handle_pl_rename_keys(key_event, app)?; + } else if app.inputmode == InputMode::NewPlaylist { + new_pl_keys::handle_new_pl_keys(key_event, app)?; } else if app.playlist_popup { pl_append_keys::hande_pl_append_keys(key_event, app)?; } else { @@ -295,8 +297,10 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> { // go to bottom of list KeyCode::Char('G') => app.pl_list.index = app.pl_list.list.len() - 1, - // Change playlist name - KeyCode::Char('e') => app.change_playlist_name()?, + // Playlist Rename + KeyCode::Char('R') => { + app.inputmode = InputMode::PlaylistRename; + } // add to current playlist KeyCode::Enter | KeyCode::Char('l') | KeyCode::Right | KeyCode::Char(' ') => { diff --git a/src/event/mod.rs b/src/event/mod.rs index e0f3b13..efc9b9e 100755 --- a/src/event/mod.rs +++ b/src/event/mod.rs @@ -3,3 +3,4 @@ pub mod handler; pub mod search_keys; pub mod pl_rename_keys; pub mod pl_append_keys; +pub mod new_pl_keys; diff --git a/src/event/new_pl_keys.rs b/src/event/new_pl_keys.rs new file mode 100644 index 0000000..75c9e97 --- /dev/null +++ b/src/event/new_pl_keys.rs @@ -0,0 +1,45 @@ +use crate::{ + app::{App, AppResult}, + ui::InputMode, +}; +use crossterm::event::{KeyCode, KeyEvent}; + +pub fn handle_new_pl_keys(key_event: KeyEvent, app: &mut App) -> AppResult<()> { + match key_event.code { + KeyCode::Esc => { + app.pl_new_pl_input.clear(); + app.reset_cursor(); + app.inputmode = InputMode::Normal; + } + KeyCode::Char(to_insert) => { + app.enter_char(to_insert); + } + KeyCode::Enter => { + let pl_name = &app.pl_new_pl_input; + + for song in app.pl_new_pl_songs_buffer.iter() { + app.conn.conn.pl_push(pl_name, song)?; + } + app.pl_new_pl_input.clear(); + + app.pl_list.list = App::get_playlist(&mut app.conn.conn)?; + app.reset_cursor(); + app.inputmode = InputMode::Normal; + } + + KeyCode::Backspace => { + app.delete_char(); + } + + KeyCode::Left => { + app.move_cursor_left(); + } + + KeyCode::Right => { + app.move_cursor_right(); + } + + _ => {} + } + Ok(()) +} diff --git a/src/event/pl_append_keys.rs b/src/event/pl_append_keys.rs index f56d597..0f7df81 100755 --- a/src/event/pl_append_keys.rs +++ b/src/event/pl_append_keys.rs @@ -1,4 +1,5 @@ use crate::app::{App, AppResult, SelectedTab}; +use crate::ui::InputMode; use crate::utils::FileExtension; use crossterm::event::{KeyCode, KeyEvent}; use std::path::Path; @@ -30,6 +31,10 @@ pub fn hande_pl_append_keys(key_event: KeyEvent, app: &mut App) -> AppResult<()> if *pl_name == "Current Playlist" { app.conn.conn.push(&song)?; app.update_queue(); + } else if *pl_name == "New Playlist" { + app.pl_new_pl_songs_buffer.clear(); + app.pl_new_pl_songs_buffer.push(song.clone()); + app.inputmode = InputMode::NewPlaylist; } else { app.conn.add_to_playlist(pl_name, &song)?; } @@ -47,12 +52,17 @@ pub fn hande_pl_append_keys(key_event: KeyEvent, app: &mut App) -> AppResult<()> if *pl_name == "Current Playlist" { app.conn.conn.push(&song)?; app.update_queue(); + } else if *pl_name == "New Playlist" { + app.pl_new_pl_songs_buffer.clear(); + app.pl_new_pl_songs_buffer.push(song.clone()); + app.inputmode = InputMode::NewPlaylist; } else { app.conn.add_to_playlist(pl_name, &song)?; } } } else if t == "directory" { let file = format!("{}/{}", app.browser.path, f); + app.pl_new_pl_songs_buffer.clear(); for (t, f) in app.conn.conn.listfiles(&file)?.iter() { // dir_vec.push((t, f)); if t == "file" @@ -65,6 +75,9 @@ pub fn hande_pl_append_keys(key_event: KeyEvent, app: &mut App) -> AppResult<()> let song = app.conn.get_song_with_only_filename(&full_path); if *pl_name == "Current Playlist" { app.conn.conn.push(&song)?; + } else if *pl_name == "New Playlist" { + app.pl_new_pl_songs_buffer.push(song.clone()); + app.inputmode = InputMode::NewPlaylist; } else { app.conn.add_to_playlist(pl_name, &song)?; } @@ -78,6 +91,8 @@ pub fn hande_pl_append_keys(key_event: KeyEvent, app: &mut App) -> AppResult<()> if *pl_name == "Current Playlist" { app.conn.load_playlist(playlist_name)?; app.update_queue(); + } else if *pl_name == "New Playlist" { + app.inputmode = InputMode::NewPlaylist; } else { let songs = app.conn.conn.playlist(playlist_name)?; for song in songs { -- cgit v1.2.3