From 7b1ba237544d27861f4f60c9ebe8bcba764c1a1c Mon Sep 17 00:00:00 2001 From: 409 Date: Sat, 29 Jun 2024 13:05:03 +0200 Subject: [PATCH] feat: notification volume bar --- src/mixer.rs | 29 ++++++++++++++++++----------- src/utils.rs | 25 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/mixer.rs b/src/mixer.rs index 669a981..bb306df 100644 --- a/src/mixer.rs +++ b/src/mixer.rs @@ -31,7 +31,8 @@ use crate::{ playerctl::{playerctl_next, playerctl_play_pause, playerctl_previous}, pulseaudio::{PulseInstruction, SinkInputMixerData}, utils::{ - get_sink_input_name, percentage_to_total_volume, send_notification, volume_to_percentage, + get_sink_input_name, percentage_to_total_volume, send_notification, + send_notification_with_progress, volume_to_percentage, }, }; @@ -408,10 +409,11 @@ impl Mixer { &volume, Some(Box::new(move |success| { if success { - let _ = send_notification(&format!( - "{sink_name}: {}%", - volume_to_percentage(volume) - )); + let volume = volume_to_percentage(volume); + let _ = send_notification_with_progress( + &format!("{sink_name}: {}%", volume), + volume, + ); } })), ); @@ -450,10 +452,11 @@ impl Mixer { &volume, Some(Box::new(move |success| { if success { - let _ = send_notification(&format!( - "{sink_name}: {}%", - volume_to_percentage(volume) - )); + let volume = volume_to_percentage(volume); + let _ = send_notification_with_progress( + &format!("{sink_name}: {}%", volume), + volume, + ); } })), ); @@ -472,8 +475,12 @@ impl Mixer { return; }; - let current_name = &self.sink_inputs.get(&sink_index).unwrap().name; - let _ = send_notification(&format!("{current_name}")); + let current_sink = &self.sink_inputs.get(&sink_index).unwrap(); + let current_sink_volume_percent = current_sink.get_volume_percent(); + let _ = send_notification_with_progress( + &format!("{}: {}%", ¤t_sink.name, current_sink_volume_percent), + current_sink_volume_percent, + ); } pub fn play_pause_current(&self) { diff --git a/src/utils.rs b/src/utils.rs index e92d761..6387267 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -67,3 +67,28 @@ pub fn send_notification(message: &str) -> Result<()> { Ok(()) } + +pub fn send_notification_with_progress(message: &str, percent: u8) -> Result<()> { + let user_id = unsafe { getuid() }; + + Command::new("notify-send") + .args(vec![ + "Mixrs", + message, + "-t", + &NOTIFICATION_DURATION_MILLIS.to_string(), + "-r", + &NOTIFY_SEND_REPLACE_ID.to_string(), + "-i", + "/", + "-h", + &format!("int:value:{percent}"), + ]) + .env( + "DBUS_SESSION_BUS_ADDRESS", + format!("unix:path=/run/user/{user_id}/bus"), + ) + .spawn()?; + + Ok(()) +}