From 0b71363e9f42d9eb2ffb987b9949f3450aa6124c Mon Sep 17 00:00:00 2001 From: Lennard Kittner Date: Fri, 20 Mar 2026 13:09:42 +0100 Subject: [PATCH] More error handling --- src/main.rs | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index 5b8aef4..b5ffcc2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -50,9 +50,19 @@ fn main() { ) .get_matches(); - let mut enigo = Enigo::new(&Settings::default()).unwrap(); - let refresh_interval = *matches.get_one::("refresh_interval").unwrap_or(&3); let press_mute_key = *matches.get_one::("press_mute_key").unwrap_or(&true); + let mut enigo = if press_mute_key { + match Enigo::new(&Settings::default()) { + Ok(enigo) => Some(enigo), + Err(e) => { + eprintln!("Virtual mute key failed to initialize: {e}"); + None + } + } + } else { + None + }; + let refresh_interval = *matches.get_one::("refresh_interval").unwrap_or(&3); let refresh_interval = Duration::from_secs(refresh_interval); loop { @@ -86,9 +96,12 @@ fn main() { }; if mute_state.is_some() && mute_state != device.get_device_state().device_properties.muted - && press_mute_key { - enigo.key(Key::F20, Direction::Click).unwrap(); + if let Some(enigo) = &mut enigo { + if let Err(e) = enigo.key(Key::F20, Direction::Click) { + eprintln!("Failed to press key on mute: {e}"); + } + } } // with the default refresh_interval the state is only actively queried every 3min @@ -154,9 +167,19 @@ fn main() { ) .get_matches(); - let mut enigo = Enigo::new(&Settings::default()).unwrap(); - let refresh_interval = *matches.get_one::("refresh_interval").unwrap_or(&3); let press_mute_key = *matches.get_one::("press_mute_key").unwrap_or(&true); + let mut enigo = if press_mute_key { + match Enigo::new(&Settings::default()) { + Ok(enigo) => Some(enigo), + Err(e) => { + eprintln!("Virtual mute key failed to initialize: {e}"); + None + } + } + } else { + None + }; + let refresh_interval = *matches.get_one::("refresh_interval").unwrap_or(&3); let refresh_interval = Duration::from_secs(refresh_interval); let (tx, rx) = mpsc::channel(); let tray_handler = TrayHandler::new(StatusTray::new(tx)); @@ -191,8 +214,10 @@ fn main() { if mute_state.is_some() && mute_state != device.get_device_state().device_properties.muted { - if press_mute_key { - enigo.key(Key::MicMute, Direction::Click).unwrap(); + if let Some(enigo) = &mut enigo { + if let Err(e) = enigo.key(Key::MicMute, Direction::Click) { + eprintln!("Failed to press key on mute: {e}"); + } } }