feat: notification volume bar

This commit is contained in:
2024-06-29 13:05:03 +02:00
parent d73ee870ec
commit 7b1ba23754
2 changed files with 43 additions and 11 deletions

View File

@@ -31,7 +31,8 @@ use crate::{
playerctl::{playerctl_next, playerctl_play_pause, playerctl_previous}, playerctl::{playerctl_next, playerctl_play_pause, playerctl_previous},
pulseaudio::{PulseInstruction, SinkInputMixerData}, pulseaudio::{PulseInstruction, SinkInputMixerData},
utils::{ 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, &volume,
Some(Box::new(move |success| { Some(Box::new(move |success| {
if success { if success {
let _ = send_notification(&format!( let volume = volume_to_percentage(volume);
"{sink_name}: {}%", let _ = send_notification_with_progress(
volume_to_percentage(volume) &format!("{sink_name}: {}%", volume),
)); volume,
);
} }
})), })),
); );
@@ -450,10 +452,11 @@ impl Mixer {
&volume, &volume,
Some(Box::new(move |success| { Some(Box::new(move |success| {
if success { if success {
let _ = send_notification(&format!( let volume = volume_to_percentage(volume);
"{sink_name}: {}%", let _ = send_notification_with_progress(
volume_to_percentage(volume) &format!("{sink_name}: {}%", volume),
)); volume,
);
} }
})), })),
); );
@@ -472,8 +475,12 @@ impl Mixer {
return; return;
}; };
let current_name = &self.sink_inputs.get(&sink_index).unwrap().name; let current_sink = &self.sink_inputs.get(&sink_index).unwrap();
let _ = send_notification(&format!("{current_name}")); let current_sink_volume_percent = current_sink.get_volume_percent();
let _ = send_notification_with_progress(
&format!("{}: {}%", &current_sink.name, current_sink_volume_percent),
current_sink_volume_percent,
);
} }
pub fn play_pause_current(&self) { pub fn play_pause_current(&self) {

View File

@@ -67,3 +67,28 @@ pub fn send_notification(message: &str) -> Result<()> {
Ok(()) 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(())
}