From 4bc03ce8f4dea2ed6d68f2694bd095c9e3857e5e Mon Sep 17 00:00:00 2001 From: krolxon Date: Wed, 24 Apr 2024 23:01:38 +0530 Subject: [PATCH] use filenames in queue instead of title --- README.md | 3 +++ src/app.rs | 27 +++++++++++++++------------ src/connection.rs | 2 +- src/handler.rs | 32 +++++++++++++++++++++++++------- 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 944d3a6..a167298 100755 --- a/README.md +++ b/README.md @@ -1 +1,4 @@ A MPD client in Rust + +# Keys + diff --git a/src/app.rs b/src/app.rs index 3315e6b..7b80584 100755 --- a/src/app.rs +++ b/src/app.rs @@ -17,7 +17,6 @@ pub struct App { pub selected_tab: SelectedTab, } - #[derive(Debug, PartialEq, Clone)] pub enum SelectedTab { SongList, @@ -64,17 +63,21 @@ impl App { } pub fn get_queue(conn: &mut Connection, vec: &mut Vec) { + // conn.conn.queue().unwrap().into_iter().for_each(|x| { + // if let Some(title) = x.title { + // if let Some(artist) = x.artist { + // vec.push(format!("{} - {}", artist, title)); + // } else { + // vec.push(title) + // } + // } else { + // vec.push(x.file) + // } + // }); conn.conn.queue().unwrap().into_iter().for_each(|x| { - if let Some(title) = x.title { - if let Some(artist) = x.artist { - vec.push(format!("{} - {}", artist, title)); - } else { - vec.push(title) - } - } else { - vec.push(x.file) - } - }); + vec.push(x.file); + } + ); } pub fn update_queue(&mut self) { @@ -97,7 +100,7 @@ impl App { self.selected_tab = match self.selected_tab { SelectedTab::SongList => SelectedTab::Queue, SelectedTab::Queue => SelectedTab::Playlists, - SelectedTab::Playlists=> SelectedTab::SongList, + SelectedTab::Playlists => SelectedTab::SongList, }; } } diff --git a/src/connection.rs b/src/connection.rs index 9cfd61e..b464b23 100755 --- a/src/connection.rs +++ b/src/connection.rs @@ -48,7 +48,7 @@ impl Connection { pub fn play_dmenu(&mut self) -> Result<()> { is_installed("dmenu").map_err(|ex| ex)?; let ss: Vec<&str> = self.songs_filenames.iter().map(|x| x.as_str()).collect(); - let op = dmenu!(iter &ss; args "-l", "30"); + let op = dmenu!(iter &ss; args "-p", "Choose a song: ", "-l", "30"); let index = get_choice_index(&self.songs_filenames, &op); let song = self.get_song_with_only_filename(ss.get(index).unwrap()); self.push(&song)?; diff --git a/src/handler.rs b/src/handler.rs index 3d67bb2..67121fb 100755 --- a/src/handler.rs +++ b/src/handler.rs @@ -2,7 +2,6 @@ use std::time::Duration; use crate::app::{App, AppResult, SelectedTab}; use crossterm::event::{KeyCode, KeyEvent, KeyModifiers}; -use ratatui::style::Modifier; pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> { match key_event.code { @@ -35,7 +34,13 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> { ); app.conn.push(&song)?; } - SelectedTab::Queue => {} + SelectedTab::Queue => { + let song = app.conn.get_song_with_only_filename( + app.queue_list.list.get(app.queue_list.index).unwrap(), + ); + app.conn.push(&song)?; + + } SelectedTab::Playlists => { app.conn .push_playlist(app.pl_list.list.get(app.pl_list.index).unwrap())?; @@ -63,10 +68,21 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> { // app.update_queue(); } - KeyCode::Char('d') => { + // Dmenu prompt + KeyCode::Char('D') => { app.conn.play_dmenu()?; } + + // add to queue + KeyCode::Char('a') => { + let song = app.conn.get_song_with_only_filename( + app.conn.songs_filenames.get(app.song_list.index).unwrap(), + ); + app.conn.conn.push(&song)?; + } + + KeyCode::Right => { app.conn .push_playlist(app.pl_list.list.get(app.pl_list.index).unwrap())?; @@ -102,13 +118,12 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> { app.selected_tab = SelectedTab::Playlists; } - KeyCode::Char('n') => { - app.conn.conn.next()?; + app.conn.conn.next()?; } KeyCode::Char('N') => { - app.conn.conn.prev()?; + app.conn.conn.prev()?; } // Volume controls @@ -120,7 +135,10 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> { app.conn.dec_volume(2); } - + // Delete highlighted song from the queue + KeyCode::Char('d') => { + app.conn.conn.delete(app.queue_list.index as u32)?; + } _ => {} }