From 3e6a8b6e791ac513f1f7ddc598c453ec68569e33 Mon Sep 17 00:00:00 2001 From: arabian Date: Sat, 24 Jan 2026 22:18:42 +0300 Subject: [PATCH 01/11] feat: first attemp to support playing multiple tracks in parallel --- src/bin/cli.rs | 93 ++++++++---- src/bin/daemon.rs | 18 +-- src/gui/draw.rs | 145 +++++++++++++----- src/gui/input.rs | 5 +- src/gui/mod.rs | 28 +++- src/gui/update.rs | 67 ++++----- src/types/audio_player.rs | 308 ++++++++++++++++++++++++++------------ src/types/commands.rs | 124 +++++++++------ src/types/gui.rs | 22 ++- src/types/socket.rs | 112 ++++++++++---- src/utils/commands.rs | 36 +++-- src/utils/gui.rs | 66 +++----- 12 files changed, 673 insertions(+), 351 deletions(-) diff --git a/src/bin/cli.rs b/src/bin/cli.rs index 0caed1b..4037368 100644 --- a/src/bin/cli.rs +++ b/src/bin/cli.rs @@ -36,17 +36,36 @@ enum Actions { /// Ping the daemon Ping, /// Pause audio playback - Pause, + Pause { + #[clap(short, long)] + id: Option, + }, /// Resume audio playback - Resume, + Resume { + #[clap(short, long)] + id: Option, + }, /// Toggle pause - TogglePause, + TogglePause { + #[clap(short, long)] + id: Option, + }, /// Stop audio playback and clear the queue - Stop, + Stop { + #[clap(short, long)] + id: Option, + }, /// Play a file - Play { file_path: PathBuf }, + Play { + file_path: PathBuf, + #[clap(short, long)] + concurrent: bool, + }, /// Toggle loop - ToggleLoop, + ToggleLoop { + #[clap(short, long)] + id: Option, + }, } #[derive(Subcommand, Debug)] @@ -56,31 +75,47 @@ enum GetCommands { /// Playback volume Volume, /// Playback position (in seconds) - Position, + Position { + #[clap(short, long)] + id: Option, + }, /// Duration of the current file - Duration, + Duration { + #[clap(short, long)] + id: Option, + }, /// Player state (Playing, Paused or Stopped) State, - /// Current playing file path - CurrentFilePath, + /// Get all playing tracks + Tracks, /// Current audio input Input, /// All audio inputs Inputs, - /// Is loop enabled (true or false) - Loop, } #[derive(Subcommand, Debug)] enum SetCommands { /// Playback volume - Volume { volume: f32 }, + Volume { + volume: f32, + #[clap(short, long)] + id: Option, + }, /// Playback position (in seconds) - Position { position: f32 }, + Position { + position: f32, + #[clap(short, long)] + id: Option, + }, /// Audio input id (see pwsp-cli get inputs) Input { name: String }, /// Enable or disable loop (true or false) - Loop { enabled: String }, + Loop { + enabled: String, + #[clap(short, long)] + id: Option, + }, } #[tokio::main] @@ -92,29 +127,31 @@ async fn main() -> Result<(), Box> { let request = match cli.command { Commands::Action { action } => match action { Actions::Ping => Request::ping(), - Actions::Pause => Request::pause(), - Actions::Resume => Request::resume(), - Actions::TogglePause => Request::toggle_pause(), - Actions::Stop => Request::stop(), - Actions::Play { file_path } => Request::play(file_path.to_str().unwrap()), - Actions::ToggleLoop => Request::toggle_loop(), + Actions::Pause { id } => Request::pause(id), + Actions::Resume { id } => Request::resume(id), + Actions::TogglePause { id } => Request::toggle_pause(id), + Actions::Stop { id } => Request::stop(id), + Actions::Play { + file_path, + concurrent, + } => Request::play(file_path.to_str().unwrap(), concurrent), + Actions::ToggleLoop { id } => Request::toggle_loop(id), }, Commands::Get { parameter } => match parameter { GetCommands::IsPaused => Request::get_is_paused(), GetCommands::Volume => Request::get_volume(), - GetCommands::Position => Request::get_position(), - GetCommands::Duration => Request::get_duration(), + GetCommands::Position { id } => Request::get_position(id), + GetCommands::Duration { id } => Request::get_duration(id), GetCommands::State => Request::get_state(), - GetCommands::CurrentFilePath => Request::get_current_file_path(), + GetCommands::Tracks => Request::get_tracks(), GetCommands::Input => Request::get_input(), GetCommands::Inputs => Request::get_inputs(), - GetCommands::Loop => Request::get_loop(), }, Commands::Set { parameter } => match parameter { - SetCommands::Volume { volume } => Request::set_volume(volume), - SetCommands::Position { position } => Request::seek(position), + SetCommands::Volume { volume, id } => Request::set_volume(volume, id), + SetCommands::Position { position, id } => Request::seek(position, id), SetCommands::Input { name } => Request::set_input(&name), - SetCommands::Loop { enabled } => Request::set_loop(&enabled), + SetCommands::Loop { enabled, id } => Request::set_loop(&enabled, id), }, }; diff --git a/src/bin/daemon.rs b/src/bin/daemon.rs index 60a6880..af70969 100644 --- a/src/bin/daemon.rs +++ b/src/bin/daemon.rs @@ -1,8 +1,5 @@ use pwsp::{ - types::{ - audio_player::PlayerState, - socket::{Request, Response}, - }, + types::socket::{Request, Response}, utils::{ commands::parse_command, daemon::{ @@ -122,18 +119,7 @@ async fn player_loop() { loop { let mut audio_player = get_audio_player().await.lock().await; - // Start playback again if loop is enabled - let should_play = audio_player.get_state() == PlayerState::Stopped - && audio_player.current_file_path.is_some() - && audio_player.looped; - - if should_play { - let file_path = audio_player.current_file_path.clone().unwrap(); - audio_player - .play(&file_path) - .await - .expect("Something went wrong while trying to play the file"); - } + audio_player.update().await; sleep(Duration::from_millis(100)).await; } diff --git a/src/gui/draw.rs b/src/gui/draw.rs index 738d982..f733be2 100644 --- a/src/gui/draw.rs +++ b/src/gui/draw.rs @@ -4,9 +4,18 @@ use egui::{ Slider, TextEdit, Ui, Vec2, }; use egui_material_icons::icons; -use pwsp::types::audio_player::PlayerState; +use pwsp::types::audio_player::TrackInfo; use pwsp::utils::gui::format_time_pair; -use std::{error::Error, path::PathBuf}; +use std::{error::Error, path::PathBuf, time::Instant}; + +use pwsp::types::gui::AppState; + +enum TrackAction { + Pause(u32), + Resume(u32), + ToggleLoop(u32), + Stop(u32), +} impl SoundpadGui { pub fn draw_waiting_for_daemon(&mut self, ui: &mut Ui) { @@ -74,11 +83,24 @@ impl SoundpadGui { fn draw_header(&mut self, ui: &mut Ui) { ui.vertical_centered_justified(|ui| { - // Current file name + self.draw_controls(ui); + }); + } + + fn draw_controls(&mut self, ui: &mut Ui) { + if self.audio_player_state.tracks.is_empty() { + ui.label("No tracks playing"); + return; + } + + let tracks = self.audio_player_state.tracks.clone(); + let mut action = None; + + for track in tracks { ui.label( RichText::new( - self.audio_player_state - .current_file_path + track + .path .file_stem() .unwrap_or_default() .to_str() @@ -87,32 +109,76 @@ impl SoundpadGui { .color(Color32::WHITE) .family(FontFamily::Monospace), ); - // Media controls - self.draw_controls(ui); + if let Some(act) = Self::draw_track_control(ui, &mut self.app_state, &track) { + action = Some(act); + } ui.separator(); - }); + } + + if let Some(action) = action { + match action { + TrackAction::Pause(id) => self.pause(Some(id)), + TrackAction::Resume(id) => self.resume(Some(id)), + TrackAction::ToggleLoop(id) => self.toggle_loop(Some(id)), + TrackAction::Stop(id) => self.stop(Some(id)), + } + } } - fn draw_controls(&mut self, ui: &mut Ui) { + fn draw_track_control( + ui: &mut Ui, + app_state: &mut AppState, + track: &TrackInfo, + ) -> Option { + let ui_state = app_state.track_ui_states.entry(track.id).or_default(); + + let should_update_position = !ui_state.position_dragged + && ui_state + .ignore_position_update_until + .map(|t| Instant::now() > t) + .unwrap_or(true); + + if should_update_position { + ui_state.position_slider_value = track.position; + } + + let should_update_volume = !ui_state.volume_dragged + && ui_state + .ignore_volume_update_until + .map(|t| Instant::now() > t) + .unwrap_or(true); + + if should_update_volume { + ui_state.volume_slider_value = track.volume; + } + + let mut action = None; + ui.horizontal_top(|ui| { // ---------- Play Button ---------- - let play_button = Button::new(match self.audio_player_state.state { - PlayerState::Playing => icons::ICON_PAUSE, - PlayerState::Paused | PlayerState::Stopped => icons::ICON_PLAY_ARROW, + let play_button = Button::new(if track.paused { + icons::ICON_PLAY_ARROW + } else { + icons::ICON_PAUSE }) .corner_radius(15.0); let play_button_response = ui.add_sized([30.0, 30.0], play_button); if play_button_response.clicked() { - self.play_toggle(); + if track.paused { + action = Some(TrackAction::Resume(track.id)); + } else { + action = Some(TrackAction::Pause(track.id)); + } } // -------------------------------- // ---------- Loop Button ---------- let loop_button = Button::new( - RichText::new(match self.audio_player_state.looped { - true => icons::ICON_REPEAT_ONE, - false => icons::ICON_REPEAT, + RichText::new(if track.looped { + icons::ICON_REPEAT_ONE + } else { + icons::ICON_REPEAT }) .size(18.0), ) @@ -120,17 +186,15 @@ impl SoundpadGui { let loop_button_response = ui.add_sized([15.0, 30.0], loop_button); if loop_button_response.clicked() { - self.toggle_loop(); + action = Some(TrackAction::ToggleLoop(track.id)); } // -------------------------------- // ---------- Position Slider ---------- - let position_slider = Slider::new( - &mut self.app_state.position_slider_value, - 0.0..=self.audio_player_state.duration, - ) - .show_value(false) - .step_by(0.01); + let duration = track.duration.unwrap_or(1.0); + let position_slider = Slider::new(&mut ui_state.position_slider_value, 0.0..=duration) + .show_value(false) + .step_by(0.01); let default_slider_width = ui.spacing().slider_width; let position_slider_width = ui.available_width() @@ -140,27 +204,22 @@ impl SoundpadGui { ui.spacing_mut().slider_width = position_slider_width; let position_slider_response = ui.add_sized([30.0, 30.0], position_slider); if position_slider_response.drag_stopped() { - self.app_state.position_dragged = true; + ui_state.position_dragged = true; } // -------------------------------- // ---------- Time Label ---------- - let time_label = Label::new( - RichText::new(format_time_pair( - self.audio_player_state.position, - self.audio_player_state.duration, - )) - .monospace(), - ); + let time_label = + Label::new(RichText::new(format_time_pair(track.position, duration)).monospace()); ui.add_sized([30.0, 30.0], time_label); // -------------------------------- // ---------- Volume Icon ---------- - let volume_icon = if self.audio_player_state.volume > 0.7 { + let volume_icon = if track.volume > 0.7 { icons::ICON_VOLUME_UP - } else if self.audio_player_state.volume == 0.0 { + } else if track.volume == 0.0 { icons::ICON_VOLUME_OFF - } else if self.audio_player_state.volume < 0.3 { + } else if track.volume < 0.3 { icons::ICON_VOLUME_MUTE } else { icons::ICON_VOLUME_DOWN @@ -170,19 +229,29 @@ impl SoundpadGui { // -------------------------------- // ---------- Volume Slider ---------- - let volume_slider = Slider::new(&mut self.app_state.volume_slider_value, 0.0..=1.0) + let volume_slider = Slider::new(&mut ui_state.volume_slider_value, 0.0..=1.0) .show_value(false) .step_by(0.01); - ui.spacing_mut().slider_width = default_slider_width; + ui.spacing_mut().slider_width = default_slider_width - 30.0; ui.spacing_mut().item_spacing.x = 0.0; let volume_slider_response = ui.add_sized([30.0, 30.0], volume_slider); if volume_slider_response.drag_stopped() { - self.app_state.volume_dragged = true; + ui_state.volume_dragged = true; + } + // -------------------------------- + + // ---------- Stop Button --------- + let stop_button = Button::new(icons::ICON_CLOSE).frame(false); + let stop_button_response = ui.add_sized([30.0, 30.0], stop_button); + if stop_button_response.clicked() { + action = Some(TrackAction::Stop(track.id)); } // -------------------------------- }); + + action } fn draw_body(&mut self, ui: &mut Ui) { @@ -316,7 +385,7 @@ impl SoundpadGui { let file_button = Button::new(file_button_text).frame(false); let file_button_response = ui.add(file_button); if file_button_response.clicked() { - self.play_file(&entry_path); + self.play_file(&entry_path, ui.input(|i| i.modifiers.ctrl)); self.app_state.selected_file = Some(entry_path); } } diff --git a/src/gui/input.rs b/src/gui/input.rs index b871913..ddce162 100644 --- a/src/gui/input.rs +++ b/src/gui/input.rs @@ -21,7 +21,10 @@ impl SoundpadGui { } if i.key_pressed(Key::Enter) && self.app_state.selected_file.is_some() { - self.play_file(&self.app_state.selected_file.clone().unwrap()); + self.play_file( + &self.app_state.selected_file.clone().unwrap(), + i.modifiers.ctrl, + ); } if !self.app_state.show_settings { diff --git a/src/gui/mod.rs b/src/gui/mod.rs index ee00657..bb1934c 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -59,8 +59,8 @@ impl SoundpadGui { let (new_state, request) = { let guard = self.audio_player_state_shared.lock().unwrap(); match guard.state { - PlayerState::Playing => (Some(PlayerState::Paused), Some(Request::pause())), - PlayerState::Paused => (Some(PlayerState::Playing), Some(Request::resume())), + PlayerState::Playing => (Some(PlayerState::Paused), Some(Request::pause(None))), + PlayerState::Paused => (Some(PlayerState::Playing), Some(Request::resume(None))), PlayerState::Stopped => (None, None), } }; @@ -79,7 +79,7 @@ impl SoundpadGui { pub fn open_file(&mut self) { let file_dialog = FileDialog::new().add_filter("Audio File", &SUPPORTED_EXTENSIONS); if let Some(path) = file_dialog.pick_file() { - self.play_file(&path); + self.play_file(&path, false); } } @@ -116,8 +116,8 @@ impl SoundpadGui { .collect(); } - pub fn play_file(&mut self, path: &PathBuf) { - make_request_sync(Request::play(path.to_str().unwrap())).ok(); + pub fn play_file(&mut self, path: &PathBuf, concurrent: bool) { + make_request_sync(Request::play(path.to_str().unwrap(), concurrent)).ok(); } pub fn set_input(&mut self, name: String) { @@ -130,8 +130,20 @@ impl SoundpadGui { } } - pub fn toggle_loop(&mut self) { - make_request_sync(Request::toggle_loop()).ok(); + pub fn toggle_loop(&mut self, id: Option) { + make_request_sync(Request::toggle_loop(id)).ok(); + } + + pub fn pause(&mut self, id: Option) { + make_request_sync(Request::pause(id)).ok(); + } + + pub fn resume(&mut self, id: Option) { + make_request_sync(Request::resume(id)).ok(); + } + + pub fn stop(&mut self, id: Option) { + make_request_sync(Request::stop(id)).ok(); } } @@ -163,7 +175,7 @@ pub async fn run() -> Result<(), Box> { Ok(_) => { let config = get_gui_config(); if config.pause_on_exit { - make_request_sync(Request::pause()).ok(); + make_request_sync(Request::pause(None)).ok(); } Ok(()) } diff --git a/src/gui/update.rs b/src/gui/update.rs index ac8a83d..935a8d4 100644 --- a/src/gui/update.rs +++ b/src/gui/update.rs @@ -3,14 +3,43 @@ use eframe::{App, Frame as EFrame}; use egui::{CentralPanel, Context}; use pwsp::{ types::socket::Request, - utils::{ - daemon::{get_daemon_config, is_daemon_running}, - gui::make_request_sync, - }, + utils::{daemon::is_daemon_running, gui::make_request_sync}, }; +use std::time::{Duration, Instant}; impl App for SoundpadGui { fn update(&mut self, ctx: &Context, _frame: &mut EFrame) { + let mut seek_requests = vec![]; + let mut volume_requests = vec![]; + + for (id, ui_state) in &mut self.app_state.track_ui_states { + if ui_state.position_dragged { + seek_requests.push((*id, ui_state.position_slider_value)); + } + if ui_state.volume_dragged { + volume_requests.push((*id, ui_state.volume_slider_value)); + ui_state.volume_dragged = false; + } + } + + for (id, pos) in seek_requests { + make_request_sync(Request::seek(pos, Some(id))).ok(); + if let Some(ui_state) = self.app_state.track_ui_states.get_mut(&id) { + ui_state.position_dragged = false; + ui_state.ignore_position_update_until = + Some(Instant::now() + Duration::from_millis(200)); + } + } + + for (id, vol) in volume_requests { + make_request_sync(Request::set_volume(vol, Some(id))).ok(); + if let Some(ui_state) = self.app_state.track_ui_states.get_mut(&id) { + ui_state.volume_dragged = false; + ui_state.ignore_volume_update_until = + Some(Instant::now() + Duration::from_millis(200)); + } + } + { let guard = self.audio_player_state_shared.lock().unwrap(); self.audio_player_state = guard.clone(); @@ -49,36 +78,6 @@ impl App for SoundpadGui { } }); - if self.app_state.position_dragged { - make_request_sync(Request::seek(self.app_state.position_slider_value)).ok(); - let mut guard = self.audio_player_state_shared.lock().unwrap(); - guard.new_position = Some(self.app_state.position_slider_value); - guard.position = self.app_state.position_slider_value; - self.app_state.position_dragged = false; - } else { - self.app_state.position_slider_value = self.audio_player_state.position; - } - - if self.app_state.volume_dragged { - let new_volume = self.app_state.volume_slider_value; - - make_request_sync(Request::set_volume(new_volume)).ok(); - - let mut guard = self.audio_player_state_shared.lock().unwrap(); - guard.new_volume = Some(self.app_state.volume_slider_value); - guard.volume = self.app_state.volume_slider_value; - - self.app_state.volume_dragged = false; - - if self.config.save_volume { - let mut daemon_config = get_daemon_config(); - daemon_config.default_volume = Some(new_volume); - daemon_config.save_to_file().ok(); - } - } else { - self.app_state.volume_slider_value = self.audio_player_state.volume; - } - ctx.request_repaint_after_secs(1.0 / 60.0); } } diff --git a/src/types/audio_player.rs b/src/types/audio_player.rs index 0c35612..508f686 100644 --- a/src/types/audio_player.rs +++ b/src/types/audio_player.rs @@ -8,6 +8,7 @@ use crate::{ use rodio::{Decoder, OutputStream, OutputStreamBuilder, Sink, Source}; use serde::{Deserialize, Serialize}; use std::{ + collections::HashMap, error::Error, fs, path::{Path, PathBuf}, @@ -22,19 +23,35 @@ pub enum PlayerState { Playing, } +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TrackInfo { + pub id: u32, + pub path: PathBuf, + pub duration: Option, + pub position: f32, + pub volume: f32, + pub looped: bool, + pub paused: bool, +} + +pub struct PlayingSound { + pub id: u32, + pub sink: Sink, + pub path: PathBuf, + pub duration: Option, + pub looped: bool, + pub volume: f32, +} + pub struct AudioPlayer { - _stream_handle: OutputStream, - sink: Sink, + pub stream_handle: OutputStream, + pub tracks: HashMap, + pub next_id: u32, input_link_sender: Option>, pub current_input_device: Option, - pub volume: f32, - pub duration: Option, - - pub current_file_path: Option, - - pub looped: bool, + pub volume: f32, // Master volume } impl AudioPlayer { @@ -50,22 +67,16 @@ impl AudioPlayer { } let stream_handle = OutputStreamBuilder::open_default_stream()?; - let sink = Sink::connect_new(stream_handle.mixer()); - sink.set_volume(default_volume); let mut audio_player = AudioPlayer { - _stream_handle: stream_handle, - sink, + stream_handle, + tracks: HashMap::new(), + next_id: 1, input_link_sender: None, current_input_device: default_input_device.clone(), volume: default_volume, - duration: None, - - current_file_path: None, - - looped: false, }; if default_input_device.is_some() { @@ -132,74 +143,123 @@ impl AudioPlayer { Ok(()) } - pub fn pause(&mut self) { - if self.get_state() == PlayerState::Playing { - self.sink.pause(); - } - } - - pub fn resume(&mut self) { - if self.get_state() == PlayerState::Paused { - self.sink.play(); - } - } - - pub fn stop(&mut self) { - self.sink.stop(); - } - - pub fn is_paused(&self) -> bool { - self.sink.is_paused() - } - - pub fn get_state(&self) -> PlayerState { - if self.sink.len() == 0 { - return PlayerState::Stopped; - } - - if self.sink.is_paused() { - return PlayerState::Paused; - } - - PlayerState::Playing - } - - pub fn set_volume(&mut self, volume: f32) { - self.volume = volume; - self.sink.set_volume(volume); - } - - pub fn get_position(&self) -> f32 { - if self.get_state() == PlayerState::Stopped { - return 0.0; - } - - self.sink.get_pos().as_secs_f32() - } - - pub fn seek(&mut self, mut position: f32) -> Result<(), Box> { - if position < 0.0 { - position = 0.0; - } - - match self.sink.try_seek(Duration::from_secs_f32(position)) { - Ok(_) => Ok(()), - Err(err) => Err(err.into()), - } - } - - pub fn get_duration(&mut self) -> Result> { - if self.get_state() == PlayerState::Stopped { - Err("Nothing is playing right now".into()) + pub fn pause(&mut self, id: Option) { + if let Some(id) = id { + if let Some(sound) = self.tracks.get_mut(&id) { + sound.sink.pause(); + } } else { - match self.duration { - Some(duration) => Ok(duration), - None => Err("Couldn't determine duration for current file".into()), + for sound in self.tracks.values_mut() { + sound.sink.pause(); } } } - pub async fn play(&mut self, file_path: &Path) -> Result<(), Box> { + pub fn resume(&mut self, id: Option) { + if let Some(id) = id { + if let Some(sound) = self.tracks.get_mut(&id) { + sound.sink.play(); + } + } else { + for sound in self.tracks.values_mut() { + sound.sink.play(); + } + } + } + + pub fn stop(&mut self, id: Option) { + if let Some(id) = id { + self.tracks.remove(&id); + } else { + self.tracks.clear(); + } + } + + pub fn is_paused(&self) -> bool { + if self.tracks.is_empty() { + return false; + } + self.tracks.values().all(|s| s.sink.is_paused()) + } + + pub fn get_state(&self) -> PlayerState { + if self.tracks.is_empty() { + return PlayerState::Stopped; + } + + if self + .tracks + .values() + .any(|s| !s.sink.is_paused() && !s.sink.empty()) + { + return PlayerState::Playing; + } + + if self.is_paused() { + return PlayerState::Paused; + } + + PlayerState::Stopped + } + + pub fn set_volume(&mut self, volume: f32, id: Option) { + if let Some(id) = id { + if let Some(sound) = self.tracks.get_mut(&id) { + sound.volume = volume; + sound.sink.set_volume(self.volume * volume); + } + } else { + self.volume = volume; + for sound in self.tracks.values_mut() { + sound.sink.set_volume(self.volume * sound.volume); + } + } + } + + pub fn get_position(&self, id: Option) -> f32 { + if let Some(id) = id { + if let Some(sound) = self.tracks.get(&id) { + return sound.sink.get_pos().as_secs_f32(); + } + } else if let Some(sound) = self.tracks.values().last() { + // Fallback to last added track if no ID + return sound.sink.get_pos().as_secs_f32(); + } + 0.0 + } + + pub fn seek(&mut self, position: f32, id: Option) -> Result<(), Box> { + let position = if position < 0.0 { 0.0 } else { position }; + + if let Some(id) = id { + if let Some(sound) = self.tracks.get_mut(&id) { + sound.sink.try_seek(Duration::from_secs_f32(position))?; + } + } else { + // Seek all? Or last? Let's seek all for now if no ID provided + for sound in self.tracks.values_mut() { + sound.sink.try_seek(Duration::from_secs_f32(position)).ok(); + } + } + Ok(()) + } + + pub fn get_duration(&mut self, id: Option) -> Result> { + if let Some(id) = id { + if let Some(sound) = self.tracks.get(&id) { + return sound.duration.ok_or("Unknown duration".into()); + } + } else if let Some(sound) = self.tracks.values().last() { + return sound.duration.ok_or("Unknown duration".into()); + } + Err("No track playing".into()) + } + + pub async fn play( + &mut self, + file_path: &Path, + concurrent: bool, + ) -> Result> { if !file_path.exists() { return Err(format!("File does not exist: {}", file_path.display()).into()); } @@ -207,30 +267,90 @@ impl AudioPlayer { let file = fs::File::open(file_path)?; match Decoder::try_from(file) { Ok(source) => { - self.current_file_path = Some(file_path.to_path_buf()); - - if let Some(duration) = source.total_duration() { - self.duration = Some(duration.as_secs_f32()); - } else { - self.duration = None; + if !concurrent { + self.tracks.clear(); } - self.sink.stop(); - self.sink.append(source); - self.sink.play(); + let id = self.next_id; + self.next_id += 1; + + let duration = source.total_duration().map(|d| d.as_secs_f32()); + + let sink = Sink::connect_new(self.stream_handle.mixer()); + sink.set_volume(self.volume); // Default volume is 1.0 * master + sink.append(source); + sink.play(); + + let sound = PlayingSound { + id, + sink, + path: file_path.to_path_buf(), + duration, + looped: false, + volume: 1.0, + }; + + self.tracks.insert(id, sound); + self.link_devices().await?; - Ok(()) + Ok(id) } Err(err) => Err(err.into()), } } - pub fn get_current_file_path(&mut self) -> &Option { - if self.get_state() == PlayerState::Stopped && !self.looped { - self.current_file_path = None; + pub fn set_loop(&mut self, enabled: bool, id: Option) { + if let Some(id) = id { + if let Some(sound) = self.tracks.get_mut(&id) { + sound.looped = enabled; + } + } else { + // Set loop for all? Or just last? + // Let's set for all. + for sound in self.tracks.values_mut() { + sound.looped = enabled; + } } - &self.current_file_path + } + + pub fn get_tracks(&self) -> Vec { + self.tracks + .values() + .map(|sound| TrackInfo { + id: sound.id, + path: sound.path.clone(), + duration: sound.duration, + position: sound.sink.get_pos().as_secs_f32(), + volume: sound.volume, + looped: sound.looped, + paused: sound.sink.is_paused(), + }) + .collect() + } + + pub async fn update(&mut self) { + let mut restarts = vec![]; + + for (id, sound) in &self.tracks { + if sound.sink.empty() && sound.looped { + restarts.push(*id); + } + } + + for id in restarts { + if let Some(sound) = self.tracks.get_mut(&id) { + if let Ok(file) = fs::File::open(&sound.path) { + if let Ok(source) = Decoder::try_from(file) { + sound.sink.append(source); + sound.sink.play(); + } + } + } + } + + self.tracks + .retain(|_, sound| !sound.sink.empty() || sound.looped); } pub async fn set_current_input_device(&mut self, name: &str) -> Result<(), Box> { diff --git a/src/types/commands.rs b/src/types/commands.rs index d6b2a67..d0a66d1 100644 --- a/src/types/commands.rs +++ b/src/types/commands.rs @@ -12,13 +12,21 @@ pub trait Executable { pub struct PingCommand {} -pub struct PauseCommand {} +pub struct PauseCommand { + pub id: Option, +} -pub struct ResumeCommand {} +pub struct ResumeCommand { + pub id: Option, +} -pub struct TogglePauseCommand {} +pub struct TogglePauseCommand { + pub id: Option, +} -pub struct StopCommand {} +pub struct StopCommand { + pub id: Option, +} pub struct IsPausedCommand {} @@ -28,21 +36,28 @@ pub struct GetVolumeCommand {} pub struct SetVolumeCommand { pub volume: Option, + pub id: Option, } -pub struct GetPositionCommand {} +pub struct GetPositionCommand { + pub id: Option, +} pub struct SeekCommand { pub position: Option, + pub id: Option, } -pub struct GetDurationCommand {} +pub struct GetDurationCommand { + pub id: Option, +} pub struct PlayCommand { pub file_path: Option, + pub concurrent: Option, } -pub struct GetCurrentFilePathCommand {} +pub struct GetTracksCommand {} pub struct GetCurrentInputCommand {} @@ -52,13 +67,14 @@ pub struct SetCurrentInputCommand { pub name: Option, } -pub struct GetLoopCommand {} - pub struct SetLoopCommand { pub enabled: Option, + pub id: Option, } -pub struct ToggleLoopCommand {} +pub struct ToggleLoopCommand { + pub id: Option, +} #[async_trait] impl Executable for PingCommand { @@ -71,7 +87,7 @@ impl Executable for PingCommand { impl Executable for PauseCommand { async fn execute(&self) -> Response { let mut audio_player = get_audio_player().await.lock().await; - audio_player.pause(); + audio_player.pause(self.id); Response::new(true, "Audio was paused") } } @@ -80,7 +96,7 @@ impl Executable for PauseCommand { impl Executable for ResumeCommand { async fn execute(&self) -> Response { let mut audio_player = get_audio_player().await.lock().await; - audio_player.resume(); + audio_player.resume(self.id); Response::new(true, "Audio was resumed") } } @@ -94,12 +110,31 @@ impl Executable for TogglePauseCommand { return Response::new(false, "Audio is not playing"); } - if audio_player.is_paused() { - audio_player.resume(); - Response::new(true, "Audio was resumed") + // This logic is a bit tricky with multiple tracks. + // If ID is provided, toggle that track. + // If not, toggle global pause state? + // For now, let's just use pause/resume based on global state if no ID. + + if let Some(id) = self.id { + if let Some(track) = audio_player.tracks.get(&id) { + if track.sink.is_paused() { + audio_player.resume(Some(id)); + Response::new(true, "Audio was resumed") + } else { + audio_player.pause(Some(id)); + Response::new(true, "Audio was paused") + } + } else { + Response::new(false, "Track not found") + } } else { - audio_player.pause(); - Response::new(true, "Audio was paused") + if audio_player.is_paused() { + audio_player.resume(None); + Response::new(true, "Audio was resumed") + } else { + audio_player.pause(None); + Response::new(true, "Audio was paused") + } } } } @@ -108,7 +143,7 @@ impl Executable for TogglePauseCommand { impl Executable for StopCommand { async fn execute(&self) -> Response { let mut audio_player = get_audio_player().await.lock().await; - audio_player.stop(); + audio_player.stop(self.id); Response::new(true, "Audio was stopped") } } @@ -145,7 +180,7 @@ impl Executable for SetVolumeCommand { async fn execute(&self) -> Response { if let Some(volume) = self.volume { let mut audio_player = get_audio_player().await.lock().await; - audio_player.set_volume(volume); + audio_player.set_volume(volume, self.id); Response::new(true, format!("Audio volume was set to {}", volume)) } else { Response::new(false, "Invalid volume value") @@ -157,7 +192,7 @@ impl Executable for SetVolumeCommand { impl Executable for GetPositionCommand { async fn execute(&self) -> Response { let audio_player = get_audio_player().await.lock().await; - let position = audio_player.get_position(); + let position = audio_player.get_position(self.id); Response::new(true, position.to_string()) } } @@ -167,7 +202,7 @@ impl Executable for SeekCommand { async fn execute(&self) -> Response { if let Some(position) = self.position { let mut audio_player = get_audio_player().await.lock().await; - match audio_player.seek(position) { + match audio_player.seek(position, self.id) { Ok(_) => Response::new(true, format!("Audio position was set to {}", position)), Err(err) => Response::new(false, err.to_string()), } @@ -181,7 +216,7 @@ impl Executable for SeekCommand { impl Executable for GetDurationCommand { async fn execute(&self) -> Response { let mut audio_player = get_audio_player().await.lock().await; - match audio_player.get_duration() { + match audio_player.get_duration(self.id) { Ok(duration) => Response::new(true, duration.to_string()), Err(err) => Response::new(false, err.to_string()), } @@ -193,8 +228,11 @@ impl Executable for PlayCommand { async fn execute(&self) -> Response { if let Some(file_path) = &self.file_path { let mut audio_player = get_audio_player().await.lock().await; - match audio_player.play(file_path).await { - Ok(_) => Response::new(true, format!("Now playing {}", file_path.display())), + match audio_player + .play(file_path, self.concurrent.unwrap_or(false)) + .await + { + Ok(id) => Response::new(true, id.to_string()), Err(err) => Response::new(false, err.to_string()), } } else { @@ -204,15 +242,11 @@ impl Executable for PlayCommand { } #[async_trait] -impl Executable for GetCurrentFilePathCommand { +impl Executable for GetTracksCommand { async fn execute(&self) -> Response { - let mut audio_player = get_audio_player().await.lock().await; - let current_file_path = audio_player.get_current_file_path(); - if let Some(current_file_path) = current_file_path { - Response::new(true, current_file_path.to_str().unwrap()) - } else { - Response::new(false, "No file is playing") - } + let audio_player = get_audio_player().await.lock().await; + let tracks = audio_player.get_tracks(); + Response::new(true, serde_json::to_string(&tracks).unwrap()) } } @@ -265,14 +299,6 @@ impl Executable for SetCurrentInputCommand { } } -#[async_trait] -impl Executable for GetLoopCommand { - async fn execute(&self) -> Response { - let audio_player = get_audio_player().await.lock().await; - Response::new(true, audio_player.looped.to_string()) - } -} - #[async_trait] impl Executable for SetLoopCommand { async fn execute(&self) -> Response { @@ -280,7 +306,7 @@ impl Executable for SetLoopCommand { match self.enabled { Some(enabled) => { - audio_player.looped = enabled; + audio_player.set_loop(enabled, self.id); Response::new(true, format!("Loop was set to {}", enabled)) } None => Response::new(false, "Invalid enabled value"), @@ -292,7 +318,19 @@ impl Executable for SetLoopCommand { impl Executable for ToggleLoopCommand { async fn execute(&self) -> Response { let mut audio_player = get_audio_player().await.lock().await; - audio_player.looped = !audio_player.looped; - Response::new(true, format!("Loop was set to {}", audio_player.looped)) + if let Some(id) = self.id { + if let Some(track) = audio_player.tracks.get_mut(&id) { + track.looped = !track.looped; + Response::new(true, format!("Loop was set to {}", track.looped)) + } else { + Response::new(false, "Track not found") + } + } else { + // Toggle all? + for track in audio_player.tracks.values_mut() { + track.looped = !track.looped; + } + Response::new(true, "Loop toggled for all tracks") + } } } diff --git a/src/types/gui.rs b/src/types/gui.rs index 0fbe641..82f8b15 100644 --- a/src/types/gui.rs +++ b/src/types/gui.rs @@ -1,21 +1,28 @@ -use crate::types::audio_player::PlayerState; +use crate::types::audio_player::{PlayerState, TrackInfo}; use egui::Id; use std::{ collections::{HashMap, HashSet}, path::PathBuf, + time::Instant, }; +#[derive(Default, Debug)] +pub struct TrackUiState { + pub position_slider_value: f32, + pub volume_slider_value: f32, + pub position_dragged: bool, + pub volume_dragged: bool, + pub ignore_position_update_until: Option, + pub ignore_volume_update_until: Option, +} + #[derive(Default, Debug)] pub struct AppState { pub search_query: String, - pub position_slider_value: f32, - pub volume_slider_value: f32, - - pub position_dragged: bool, - pub volume_dragged: bool, + pub track_ui_states: HashMap, pub show_settings: bool, @@ -33,6 +40,9 @@ pub struct AppState { pub struct AudioPlayerState { pub state: PlayerState, pub new_state: Option, + + pub tracks: Vec, + pub current_file_path: PathBuf, pub is_paused: bool, diff --git a/src/types/socket.rs b/src/types/socket.rs index ac5db2d..1f35810 100644 --- a/src/types/socket.rs +++ b/src/types/socket.rs @@ -24,24 +24,54 @@ impl Request { Request::new("ping", vec![]) } - pub fn pause() -> Self { - Request::new("pause", vec![]) + pub fn pause(id: Option) -> Self { + let mut args = vec![]; + let id_str; + if let Some(id) = id { + id_str = id.to_string(); + args.push(("id", id_str.as_str())); + } + Request::new("pause", args) } - pub fn resume() -> Self { - Request::new("resume", vec![]) + pub fn resume(id: Option) -> Self { + let mut args = vec![]; + let id_str; + if let Some(id) = id { + id_str = id.to_string(); + args.push(("id", id_str.as_str())); + } + Request::new("resume", args) } - pub fn toggle_pause() -> Self { - Request::new("toggle_pause", vec![]) + pub fn toggle_pause(id: Option) -> Self { + let mut args = vec![]; + let id_str; + if let Some(id) = id { + id_str = id.to_string(); + args.push(("id", id_str.as_str())); + } + Request::new("toggle_pause", args) } - pub fn stop() -> Self { - Request::new("stop", vec![]) + pub fn stop(id: Option) -> Self { + let mut args = vec![]; + let id_str; + if let Some(id) = id { + id_str = id.to_string(); + args.push(("id", id_str.as_str())); + } + Request::new("stop", args) } - pub fn play(file_path: &str) -> Self { - Request::new("play", vec![("file_path", file_path)]) + pub fn play(file_path: &str, concurrent: bool) -> Self { + Request::new( + "play", + vec![ + ("file_path", file_path), + ("concurrent", &concurrent.to_string()), + ], + ) } pub fn get_is_paused() -> Self { @@ -52,20 +82,32 @@ impl Request { Request::new("get_volume", vec![]) } - pub fn get_position() -> Self { - Request::new("get_position", vec![]) + pub fn get_position(id: Option) -> Self { + let mut args = vec![]; + let id_str; + if let Some(id) = id { + id_str = id.to_string(); + args.push(("id", id_str.as_str())); + } + Request::new("get_position", args) } - pub fn get_duration() -> Self { - Request::new("get_duration", vec![]) + pub fn get_duration(id: Option) -> Self { + let mut args = vec![]; + let id_str; + if let Some(id) = id { + id_str = id.to_string(); + args.push(("id", id_str.as_str())); + } + Request::new("get_duration", args) } pub fn get_state() -> Self { Request::new("get_state", vec![]) } - pub fn get_current_file_path() -> Self { - Request::new("get_current_file_path", vec![]) + pub fn get_tracks() -> Self { + Request::new("get_tracks", vec![]) } pub fn get_input() -> Self { @@ -76,28 +118,42 @@ impl Request { Request::new("get_inputs", vec![]) } - pub fn set_volume(volume: f32) -> Self { - Request::new("set_volume", vec![("volume", &volume.to_string())]) + pub fn set_volume(volume: f32, id: Option) -> Self { + let mut args = vec![("volume".to_string(), volume.to_string())]; + if let Some(id) = id { + args.push(("id".to_string(), id.to_string())); + } + Request::new("set_volume".to_string(), args) } - pub fn seek(position: f32) -> Self { - Request::new("seek", vec![("position", &position.to_string())]) + pub fn seek(position: f32, id: Option) -> Self { + let mut args = vec![("position".to_string(), position.to_string())]; + if let Some(id) = id { + args.push(("id".to_string(), id.to_string())); + } + Request::new("seek".to_string(), args) } pub fn set_input(name: &str) -> Self { Request::new("set_input", vec![("input_name", name)]) } - pub fn get_loop() -> Self { - Request::new("get_loop", vec![]) + pub fn set_loop(enabled: &str, id: Option) -> Self { + let mut args = vec![("enabled".to_string(), enabled.to_string())]; + if let Some(id) = id { + args.push(("id".to_string(), id.to_string())); + } + Request::new("set_loop".to_string(), args) } - pub fn set_loop(enabled: &str) -> Self { - Request::new("set_loop", vec![("enabled", enabled)]) - } - - pub fn toggle_loop() -> Self { - Request::new("toggle_loop", vec![]) + pub fn toggle_loop(id: Option) -> Self { + let mut args = vec![]; + let id_str; + if let Some(id) = id { + id_str = id.to_string(); + args.push(("id", id_str.as_str())); + } + Request::new("toggle_loop", args) } } diff --git a/src/utils/commands.rs b/src/utils/commands.rs index 46b2889..0e6e7c3 100644 --- a/src/utils/commands.rs +++ b/src/utils/commands.rs @@ -3,12 +3,14 @@ use crate::types::{commands::*, socket::Request}; use std::path::PathBuf; pub fn parse_command(request: &Request) -> Option> { + let id = request.args.get("id").and_then(|s| s.parse::().ok()); + match request.name.as_str() { "ping" => Some(Box::new(PingCommand {})), - "pause" => Some(Box::new(PauseCommand {})), - "resume" => Some(Box::new(ResumeCommand {})), - "toggle_pause" => Some(Box::new(TogglePauseCommand {})), - "stop" => Some(Box::new(StopCommand {})), + "pause" => Some(Box::new(PauseCommand { id })), + "resume" => Some(Box::new(ResumeCommand { id })), + "toggle_pause" => Some(Box::new(TogglePauseCommand { id })), + "stop" => Some(Box::new(StopCommand { id })), "is_paused" => Some(Box::new(IsPausedCommand {})), "get_state" => Some(Box::new(GetStateCommand {})), "get_volume" => Some(Box::new(GetVolumeCommand {})), @@ -19,9 +21,9 @@ pub fn parse_command(request: &Request) -> Option> { .unwrap_or(&String::new()) .parse::() .ok(); - Some(Box::new(SetVolumeCommand { volume })) + Some(Box::new(SetVolumeCommand { volume, id })) } - "get_position" => Some(Box::new(GetPositionCommand {})), + "get_position" => Some(Box::new(GetPositionCommand { id })), "seek" => { let position = request .args @@ -29,9 +31,9 @@ pub fn parse_command(request: &Request) -> Option> { .unwrap_or(&String::new()) .parse::() .ok(); - Some(Box::new(SeekCommand { position })) + Some(Box::new(SeekCommand { position, id })) } - "get_duration" => Some(Box::new(GetDurationCommand {})), + "get_duration" => Some(Box::new(GetDurationCommand { id })), "play" => { let file_path = request .args @@ -39,16 +41,24 @@ pub fn parse_command(request: &Request) -> Option> { .unwrap_or(&String::new()) .parse::() .ok(); - Some(Box::new(PlayCommand { file_path })) + let concurrent = request + .args + .get("concurrent") + .unwrap_or(&String::new()) + .parse::() + .ok(); + Some(Box::new(PlayCommand { + file_path, + concurrent, + })) } - "get_current_file_path" => Some(Box::new(GetCurrentFilePathCommand {})), + "get_tracks" => Some(Box::new(GetTracksCommand {})), "get_input" => Some(Box::new(GetCurrentInputCommand {})), "get_inputs" => Some(Box::new(GetAllInputsCommand {})), "set_input" => { let name = Some(request.args.get("input_name").unwrap_or(&String::new())).cloned(); Some(Box::new(SetCurrentInputCommand { name })) } - "get_loop" => Some(Box::new(GetLoopCommand {})), "set_loop" => { let enabled = request .args @@ -56,9 +66,9 @@ pub fn parse_command(request: &Request) -> Option> { .unwrap_or(&String::new()) .parse::() .ok(); - Some(Box::new(SetLoopCommand { enabled })) + Some(Box::new(SetLoopCommand { enabled, id })) } - "toggle_loop" => Some(Box::new(ToggleLoopCommand {})), + "toggle_loop" => Some(Box::new(ToggleLoopCommand { id })), _ => None, } } diff --git a/src/utils/gui.rs b/src/utils/gui.rs index 81544c7..011f962 100644 --- a/src/utils/gui.rs +++ b/src/utils/gui.rs @@ -1,6 +1,6 @@ use crate::{ types::{ - audio_player::PlayerState, + audio_player::{PlayerState, TrackInfo}, config::GuiConfig, gui::AudioPlayerState, socket::{Request, Response}, @@ -50,56 +50,47 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc serde_json::from_str::(&state_res.message).unwrap(), false => PlayerState::default(), }; - let file_path = match file_path_res.status { - true => PathBuf::from(file_path_res.message), - false => PathBuf::new(), + let tracks = match tracks_res.status { + true => { + serde_json::from_str::>(&tracks_res.message).unwrap_or_default() + } + false => vec![], }; + let is_paused = match is_paused_res.status { true => is_paused_res.message == "true", false => false, @@ -108,14 +99,6 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc volume_res.message.parse::().unwrap(), false => 0.0, }; - let position = match position_res.status { - true => position_res.message.parse::().unwrap(), - false => 0.0, - }; - let duration = match duration_res.status { - true => duration_res.message.parse::().unwrap(), - false => 0.0, - }; let current_input = match current_input_res.status { true => current_input_res .message @@ -144,10 +127,6 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc>(), false => HashMap::new(), }; - let looped = match looped_res.status { - true => looped_res.message.parse::().unwrap_or_default(), - false => false, - }; { let mut guard = audio_player_state_shared.lock().unwrap(); @@ -159,7 +138,19 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc state, }; - guard.current_file_path = file_path; + guard.tracks = tracks.clone(); + if let Some(last_track) = tracks.last() { + guard.current_file_path = last_track.path.clone(); + guard.position = last_track.position; + guard.duration = last_track.duration.unwrap_or(1.0); + guard.looped = last_track.looped; + } else { + guard.current_file_path = PathBuf::new(); + guard.position = 0.0; + guard.duration = 1.0; + guard.looped = false; + } + guard.is_paused = is_paused; guard.volume = match guard.new_volume { Some(new_volume) => { @@ -168,17 +159,8 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc volume, }; - guard.position = match guard.new_position { - Some(new_position) => { - guard.new_position = None; - new_position - } - None => position, - }; - guard.duration = if duration > 0.0 { duration } else { 1.0 }; guard.current_input = current_input; guard.all_inputs = all_inputs; - guard.looped = looped; } sleep(sleep_duration).await; From bd75ac61900ebd0d5725c6f5b72592b14dd60416 Mon Sep 17 00:00:00 2001 From: arabian Date: Sat, 24 Jan 2026 22:34:25 +0300 Subject: [PATCH 02/11] refactor: remove unused fields from AudioPlayerState --- src/types/gui.rs | 11 ----------- src/utils/gui.rs | 19 ------------------- 2 files changed, 30 deletions(-) diff --git a/src/types/gui.rs b/src/types/gui.rs index 82f8b15..2d7ce04 100644 --- a/src/types/gui.rs +++ b/src/types/gui.rs @@ -43,17 +43,6 @@ pub struct AudioPlayerState { pub tracks: Vec, - pub current_file_path: PathBuf, - - pub is_paused: bool, - pub looped: bool, - - pub volume: f32, - pub new_volume: Option, - pub position: f32, - pub new_position: Option, - pub duration: f32, - pub current_input: String, pub all_inputs: HashMap, } diff --git a/src/utils/gui.rs b/src/utils/gui.rs index 011f962..717837f 100644 --- a/src/utils/gui.rs +++ b/src/utils/gui.rs @@ -139,26 +139,7 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc state, }; guard.tracks = tracks.clone(); - if let Some(last_track) = tracks.last() { - guard.current_file_path = last_track.path.clone(); - guard.position = last_track.position; - guard.duration = last_track.duration.unwrap_or(1.0); - guard.looped = last_track.looped; - } else { - guard.current_file_path = PathBuf::new(); - guard.position = 0.0; - guard.duration = 1.0; - guard.looped = false; - } - guard.is_paused = is_paused; - guard.volume = match guard.new_volume { - Some(new_volume) => { - guard.new_volume = None; - new_volume - } - None => volume, - }; guard.current_input = current_input; guard.all_inputs = all_inputs; } From 5afe3dd45b63d8e294c09095608616beb7f44b03 Mon Sep 17 00:00:00 2001 From: arabian Date: Sat, 24 Jan 2026 22:36:26 +0300 Subject: [PATCH 03/11] refactor: remove unused requests and variables from start_app_state_thread --- src/utils/gui.rs | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/src/utils/gui.rs b/src/utils/gui.rs index 717837f..a27716f 100644 --- a/src/utils/gui.rs +++ b/src/utils/gui.rs @@ -10,7 +10,6 @@ use crate::{ use std::{ collections::HashMap, error::Error, - path::PathBuf, sync::{Arc, Mutex}, }; use tokio::time::{Duration, sleep}; @@ -51,31 +50,18 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc vec![], }; - let is_paused = match is_paused_res.status { - true => is_paused_res.message == "true", - false => false, - }; - let volume = match volume_res.status { - true => volume_res.message.parse::().unwrap(), - false => 0.0, - }; let current_input = match current_input_res.status { true => current_input_res .message From 4d54443593d0742a9565f5151265b8b236e8db8e Mon Sep 17 00:00:00 2001 From: arabian Date: Sat, 24 Jan 2026 23:45:33 +0300 Subject: [PATCH 04/11] feat: add master volume slider --- src/gui/draw.rs | 62 +++++++++++++++++++++++++++++++++++++---------- src/gui/mod.rs | 2 +- src/gui/update.rs | 23 +++++++++++++++++- src/types/gui.rs | 9 +++++++ src/utils/gui.rs | 12 +++++++-- 5 files changed, 91 insertions(+), 17 deletions(-) diff --git a/src/gui/draw.rs b/src/gui/draw.rs index f733be2..64688d7 100644 --- a/src/gui/draw.rs +++ b/src/gui/draw.rs @@ -18,6 +18,18 @@ enum TrackAction { } impl SoundpadGui { + fn get_volume_icon(volume: f32) -> &'static str { + if volume > 0.7 { + icons::ICON_VOLUME_UP + } else if volume <= 0.0 { + icons::ICON_VOLUME_OFF + } else if volume < 0.3 { + icons::ICON_VOLUME_MUTE + } else { + icons::ICON_VOLUME_DOWN + } + } + pub fn draw_waiting_for_daemon(&mut self, ui: &mut Ui) { ui.centered_and_justified(|ui| { ui.label( @@ -215,17 +227,10 @@ impl SoundpadGui { // -------------------------------- // ---------- Volume Icon ---------- - let volume_icon = if track.volume > 0.7 { - icons::ICON_VOLUME_UP - } else if track.volume == 0.0 { - icons::ICON_VOLUME_OFF - } else if track.volume < 0.3 { - icons::ICON_VOLUME_MUTE - } else { - icons::ICON_VOLUME_DOWN - }; - let volume_icon = Label::new(RichText::new(volume_icon).size(18.0)); - ui.add_sized([30.0, 30.0], volume_icon); + let volume_icon = Self::get_volume_icon(track.volume); + let volume_label = Label::new(RichText::new(volume_icon).size(18.0)); + ui.add_sized([30.0, 30.0], volume_label) + .on_hover_text(format!("Volume: {:.0}%", track.volume * 100.0)); // -------------------------------- // ---------- Volume Slider ---------- @@ -396,7 +401,7 @@ impl SoundpadGui { fn draw_footer(&mut self, ui: &mut Ui) { ui.add_space(5.0); - ui.horizontal_top(|ui| { + ui.horizontal(|ui| { // ---------- Microphone selection ---------- let mut mics: Vec<(&String, &String)> = self.audio_player_state.all_inputs.iter().collect(); @@ -405,6 +410,7 @@ impl SoundpadGui { let mut selected_input = self.audio_player_state.current_input.to_owned(); let prev_input = selected_input.to_owned(); ComboBox::from_label("Choose microphone") + .height(30.0) .selected_text( self.audio_player_state .all_inputs @@ -422,10 +428,40 @@ impl SoundpadGui { } // -------------------------------- + // ---------- Master Volume Slider ---------- + let volume_icon = Self::get_volume_icon(self.audio_player_state.volume); + let volume_label = Label::new(RichText::new(volume_icon).size(18.0)); + ui.add_sized([18.0, 18.0], volume_label) + .on_hover_text(format!( + "Master Volume: {:.0}%", + self.audio_player_state.volume * 100.0 + )); + + let should_update_volume = !self.app_state.volume_dragged + && self + .app_state + .ignore_volume_update_until + .map(|t| Instant::now() > t) + .unwrap_or(true); + + if should_update_volume { + self.app_state.volume_slider_value = self.audio_player_state.volume; + } + + let volume_slider = Slider::new(&mut self.app_state.volume_slider_value, 0.0..=1.0) + .show_value(false) + .step_by(0.01); + let volume_slider_response = ui.add_sized([150.0, 18.0], volume_slider); + if volume_slider_response.drag_stopped() { + self.app_state.volume_dragged = true; + } + // ------------------------------------------ + ui.add_space(ui.available_width() - 18.0 - ui.spacing().item_spacing.x); // ---------- Settings button ---------- - let settings_button = Button::new(icons::ICON_SETTINGS).frame(false); + let settings_button = + Button::new(icons::ICON_SETTINGS.atom_size(Vec2::new(18.0, 18.0))).frame(false); let settings_button_response = ui.add_sized([18.0, 18.0], settings_button); if settings_button_response.clicked() { self.app_state.show_settings = true; diff --git a/src/gui/mod.rs b/src/gui/mod.rs index bb1934c..b3f6bab 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -17,9 +17,9 @@ use pwsp::{ }, }; use rfd::FileDialog; -use std::path::PathBuf; use std::{ error::Error, + path::PathBuf, sync::{Arc, Mutex}, }; diff --git a/src/gui/update.rs b/src/gui/update.rs index 935a8d4..a38a360 100644 --- a/src/gui/update.rs +++ b/src/gui/update.rs @@ -3,7 +3,10 @@ use eframe::{App, Frame as EFrame}; use egui::{CentralPanel, Context}; use pwsp::{ types::socket::Request, - utils::{daemon::is_daemon_running, gui::make_request_sync}, + utils::{ + daemon::{get_daemon_config, is_daemon_running}, + gui::make_request_sync, + }, }; use std::time::{Duration, Instant}; @@ -40,6 +43,24 @@ impl App for SoundpadGui { } } + if self.app_state.volume_dragged { + make_request_sync(Request::set_volume( + self.app_state.volume_slider_value, + None, + )) + .ok(); + + self.app_state.volume_dragged = false; + self.app_state.ignore_volume_update_until = + Some(Instant::now() + Duration::from_millis(200)); + + if self.config.save_volume { + let mut daemon_config = get_daemon_config(); + daemon_config.default_volume = Some(self.app_state.volume_slider_value); + daemon_config.save_to_file().ok(); + } + } + { let guard = self.audio_player_state_shared.lock().unwrap(); self.audio_player_state = guard.clone(); diff --git a/src/types/gui.rs b/src/types/gui.rs index 2d7ce04..ae8af2c 100644 --- a/src/types/gui.rs +++ b/src/types/gui.rs @@ -12,8 +12,10 @@ use std::{ pub struct TrackUiState { pub position_slider_value: f32, pub volume_slider_value: f32, + pub position_dragged: bool, pub volume_dragged: bool, + pub ignore_position_update_until: Option, pub ignore_volume_update_until: Option, } @@ -25,6 +27,11 @@ pub struct AppState { pub track_ui_states: HashMap, pub show_settings: bool, + pub volume_dragged: bool, + + pub volume_slider_value: f32, + + pub ignore_volume_update_until: Option, pub current_dir: Option, pub dirs: HashSet, @@ -43,6 +50,8 @@ pub struct AudioPlayerState { pub tracks: Vec, + pub volume: f32, // Master volume + pub current_input: String, pub all_inputs: HashMap, } diff --git a/src/utils/gui.rs b/src/utils/gui.rs index a27716f..b66a4a2 100644 --- a/src/utils/gui.rs +++ b/src/utils/gui.rs @@ -50,18 +50,21 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc vec![], }; + let volume = match volume_res.status { + true => volume_res.message.parse::().unwrap(), + false => 0.0, + }; + let current_input = match current_input_res.status { true => current_input_res .message @@ -117,7 +125,7 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc state, }; guard.tracks = tracks.clone(); - + guard.volume = volume; guard.current_input = current_input; guard.all_inputs = all_inputs; } From f7f96abcbb2dd6851ff20a1f08f3a8acbabef420 Mon Sep 17 00:00:00 2001 From: arabian Date: Sat, 24 Jan 2026 23:46:51 +0300 Subject: [PATCH 05/11] feat: add functionality to stop all audio tracks with backspace key --- src/gui/input.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/input.rs b/src/gui/input.rs index ddce162..254b257 100644 --- a/src/gui/input.rs +++ b/src/gui/input.rs @@ -33,6 +33,11 @@ impl SoundpadGui { self.play_toggle(); } + // Stop all audio tracks on backspace + if i.key_pressed(Key::Backspace) { + self.stop(None); + } + // Focus search field if i.key_pressed(Key::Slash) && self.app_state.search_field_id.is_some() { self.app_state.force_focus_id = self.app_state.search_field_id; From 03e936ac34405a9db3e88a4d2224c95d50a99138 Mon Sep 17 00:00:00 2001 From: arabian Date: Sat, 24 Jan 2026 23:59:23 +0300 Subject: [PATCH 06/11] feat: sort tracks by their id in AudioPlayer on get_tracks --- src/types/audio_player.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/types/audio_player.rs b/src/types/audio_player.rs index 508f686..e59d352 100644 --- a/src/types/audio_player.rs +++ b/src/types/audio_player.rs @@ -315,7 +315,8 @@ impl AudioPlayer { } pub fn get_tracks(&self) -> Vec { - self.tracks + let mut tracks: Vec<_> = self + .tracks .values() .map(|sound| TrackInfo { id: sound.id, @@ -326,7 +327,9 @@ impl AudioPlayer { looped: sound.looped, paused: sound.sink.is_paused(), }) - .collect() + .collect(); + tracks.sort_by_key(|t| t.id); + tracks } pub async fn update(&mut self) { From cfa2681ba3b8790bfd56cebd16f40cda1af8dc56 Mon Sep 17 00:00:00 2001 From: arabian Date: Sun, 25 Jan 2026 00:00:11 +0300 Subject: [PATCH 07/11] feat: enhance file playback controls with shift and ctrl modifiers --- src/gui/draw.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/gui/draw.rs b/src/gui/draw.rs index 64688d7..c7f51c2 100644 --- a/src/gui/draw.rs +++ b/src/gui/draw.rs @@ -390,7 +390,18 @@ impl SoundpadGui { let file_button = Button::new(file_button_text).frame(false); let file_button_response = ui.add(file_button); if file_button_response.clicked() { - self.play_file(&entry_path, ui.input(|i| i.modifiers.ctrl)); + ui.input(|i| { + if i.modifiers.ctrl { + self.play_file(&entry_path, true); + } else if i.modifiers.shift + && let Some(last_track) = self.audio_player_state.tracks.last() + { + self.stop(Some(last_track.id)); + self.play_file(&entry_path, true); + } else { + self.play_file(&entry_path, false); + } + }); self.app_state.selected_file = Some(entry_path); } } From bae10edc9919364b4e0be0895f92ceb19be99704 Mon Sep 17 00:00:00 2001 From: arabian Date: Sun, 25 Jan 2026 00:14:14 +0300 Subject: [PATCH 08/11] feat: replace synchronous requests with asynchronous counterparts for improved performance --- src/gui/mod.rs | 16 ++++++++-------- src/gui/update.rs | 22 +++++++++------------- src/types/gui.rs | 2 ++ src/utils/gui.rs | 20 ++++++++++++++++++-- 4 files changed, 37 insertions(+), 23 deletions(-) diff --git a/src/gui/mod.rs b/src/gui/mod.rs index b3f6bab..5f53f48 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -13,7 +13,7 @@ use pwsp::{ }, utils::{ daemon::get_daemon_config, - gui::{get_gui_config, make_request_sync, start_app_state_thread}, + gui::{get_gui_config, make_request_async, make_request_sync, start_app_state_thread}, }, }; use rfd::FileDialog; @@ -66,7 +66,7 @@ impl SoundpadGui { }; if let Some(req) = request { - make_request_sync(req).ok(); + make_request_async(req); } if let Some(state) = new_state { @@ -117,11 +117,11 @@ impl SoundpadGui { } pub fn play_file(&mut self, path: &PathBuf, concurrent: bool) { - make_request_sync(Request::play(path.to_str().unwrap(), concurrent)).ok(); + make_request_async(Request::play(path.to_str().unwrap(), concurrent)); } pub fn set_input(&mut self, name: String) { - make_request_sync(Request::set_input(&name)).ok(); + make_request_async(Request::set_input(&name)); if self.config.save_input { let mut daemon_config = get_daemon_config(); @@ -131,19 +131,19 @@ impl SoundpadGui { } pub fn toggle_loop(&mut self, id: Option) { - make_request_sync(Request::toggle_loop(id)).ok(); + make_request_async(Request::toggle_loop(id)); } pub fn pause(&mut self, id: Option) { - make_request_sync(Request::pause(id)).ok(); + make_request_async(Request::pause(id)); } pub fn resume(&mut self, id: Option) { - make_request_sync(Request::resume(id)).ok(); + make_request_async(Request::resume(id)); } pub fn stop(&mut self, id: Option) { - make_request_sync(Request::stop(id)).ok(); + make_request_async(Request::stop(id)); } } diff --git a/src/gui/update.rs b/src/gui/update.rs index a38a360..faa161f 100644 --- a/src/gui/update.rs +++ b/src/gui/update.rs @@ -3,10 +3,7 @@ use eframe::{App, Frame as EFrame}; use egui::{CentralPanel, Context}; use pwsp::{ types::socket::Request, - utils::{ - daemon::{get_daemon_config, is_daemon_running}, - gui::make_request_sync, - }, + utils::{daemon::get_daemon_config, gui::make_request_async}, }; use std::time::{Duration, Instant}; @@ -26,33 +23,32 @@ impl App for SoundpadGui { } for (id, pos) in seek_requests { - make_request_sync(Request::seek(pos, Some(id))).ok(); + make_request_async(Request::seek(pos, Some(id))); if let Some(ui_state) = self.app_state.track_ui_states.get_mut(&id) { ui_state.position_dragged = false; ui_state.ignore_position_update_until = - Some(Instant::now() + Duration::from_millis(200)); + Some(Instant::now() + Duration::from_millis(300)); } } for (id, vol) in volume_requests { - make_request_sync(Request::set_volume(vol, Some(id))).ok(); + make_request_async(Request::set_volume(vol, Some(id))); if let Some(ui_state) = self.app_state.track_ui_states.get_mut(&id) { ui_state.volume_dragged = false; ui_state.ignore_volume_update_until = - Some(Instant::now() + Duration::from_millis(200)); + Some(Instant::now() + Duration::from_millis(300)); } } if self.app_state.volume_dragged { - make_request_sync(Request::set_volume( + make_request_async(Request::set_volume( self.app_state.volume_slider_value, None, - )) - .ok(); + )); self.app_state.volume_dragged = false; self.app_state.ignore_volume_update_until = - Some(Instant::now() + Duration::from_millis(200)); + Some(Instant::now() + Duration::from_millis(300)); if self.config.save_volume { let mut daemon_config = get_daemon_config(); @@ -79,7 +75,7 @@ impl App for SoundpadGui { self.handle_input(ctx); CentralPanel::default().show(ctx, |ui| { - if !is_daemon_running().unwrap() { + if !self.audio_player_state.is_daemon_running { self.draw_waiting_for_daemon(ui); return; } diff --git a/src/types/gui.rs b/src/types/gui.rs index ae8af2c..728f502 100644 --- a/src/types/gui.rs +++ b/src/types/gui.rs @@ -54,4 +54,6 @@ pub struct AudioPlayerState { pub current_input: String, pub all_inputs: HashMap, + + pub is_daemon_running: bool, } diff --git a/src/utils/gui.rs b/src/utils/gui.rs index b66a4a2..78af6ef 100644 --- a/src/utils/gui.rs +++ b/src/utils/gui.rs @@ -5,7 +5,7 @@ use crate::{ gui::AudioPlayerState, socket::{Request, Response}, }, - utils::daemon::{make_request, wait_for_daemon}, + utils::daemon::{is_daemon_running, make_request}, }; use std::{ collections::HashMap, @@ -30,6 +30,12 @@ pub fn make_request_sync(request: Request) -> Result> { }) } +pub fn make_request_async(request: Request) { + tokio::spawn(async move { + make_request(request).await.ok(); + }); +} + pub fn format_time_pair(position: f32, duration: f32) -> String { fn format_time(seconds: f32) -> String { let total_seconds = seconds.round() as u32; @@ -46,7 +52,16 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc Date: Sun, 25 Jan 2026 00:20:55 +0300 Subject: [PATCH 09/11] feat: shift + enter is now equal to shift + left mouse --- src/gui/input.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gui/input.rs b/src/gui/input.rs index 254b257..dc27399 100644 --- a/src/gui/input.rs +++ b/src/gui/input.rs @@ -21,10 +21,17 @@ impl SoundpadGui { } if i.key_pressed(Key::Enter) && self.app_state.selected_file.is_some() { - self.play_file( - &self.app_state.selected_file.clone().unwrap(), - i.modifiers.ctrl, - ); + let path = &self.app_state.selected_file.clone().unwrap(); + if i.modifiers.ctrl { + self.play_file(path, true); + } else if i.modifiers.shift + && let Some(last_track) = self.audio_player_state.tracks.last() + { + self.stop(Some(last_track.id)); + self.play_file(path, true); + } else { + self.play_file(path, false); + } } if !self.app_state.show_settings { From 90ed05d88d587ba70d258ae7aadddcef03443540 Mon Sep 17 00:00:00 2001 From: arabian Date: Sun, 25 Jan 2026 00:21:53 +0300 Subject: [PATCH 10/11] readme: add information about hotkeys and mouse controls --- README.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/README.md b/README.md index 1e50bac..bb1ce40 100644 --- a/README.md +++ b/README.md @@ -173,6 +173,29 @@ pwsp-cli --help pwsp-cli set position 20 ``` +### **Hotkeys & Controls** + +#### **Keyboard Shortcuts** + +| Key | Action | +| :----------------------- | :--------------------------------------------------- | +| **Esc** | Close application | +| **Space** | Pause / Resume audio | +| **Backspace** | Stop all audio tracks | +| **Enter** | Play selected file (stops all other tracks) | +| **Ctrl + Enter** | Add selected file to playback (plays simultaneously) | +| **Shift + Enter** | Replace the last added track with the selected one | +| **I** | Open / Close settings | +| **/** | Focus search field | +| **Ctrl + ↑ / ↓** | Navigate through files | +| **Ctrl + Shift + ↑ / ↓** | Navigate through directories | + +#### **Mouse Controls** + +* **Left Click**: Play track (stops all other tracks). +* **Ctrl + Left Click**: Add track (plays simultaneously with current tracks). +* **Shift + Left Click**: Replace the last added track with the selected one. + # **🤝 Contributing** Contributions are welcome\! If you have ideas for improvements or find a bug, feel free to create From 5c3bc30a6ee0cf64403aaac7f34656af58d3fb34 Mon Sep 17 00:00:00 2001 From: arabian Date: Sun, 25 Jan 2026 00:23:42 +0300 Subject: [PATCH 11/11] readme: update screenshot --- assets/screenshot.png | Bin 205110 -> 71897 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/screenshot.png b/assets/screenshot.png index 1068a9fcd0b1def8ef78f805ff99fc32eb559521..265d2254f01be99e31329ff9e7c44b3f949f4357 100644 GIT binary patch literal 71897 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 literal 205110 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

|?S@B^Wrn8-4>Gs;XzQ6` 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