diff --git a/runtime/Cargo.lock b/runtime/Cargo.lock index 7da20043..3ed52f10 100644 --- a/runtime/Cargo.lock +++ b/runtime/Cargo.lock @@ -2772,6 +2772,7 @@ dependencies = [ "serde", "serde_json", "sha2", + "strum_macros", "sys-locale", "tauri", "tauri-build", @@ -4767,6 +4768,18 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.93", +] + [[package]] name = "subtle" version = "2.6.1" diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 3da1bf2e..47a0bc0a 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -39,6 +39,7 @@ pdfium-render = "0.8.34" sys-locale = "0.3.2" cfg-if = "1.0.1" pptx-to-md = "0.4.0" +strum_macros = "0.27" # Fixes security vulnerability downstream, where the upstream is not fixed yet: url = "2.5.7" diff --git a/runtime/src/app_window.rs b/runtime/src/app_window.rs index b45ff00f..834ddf26 100644 --- a/runtime/src/app_window.rs +++ b/runtime/src/app_window.rs @@ -8,6 +8,7 @@ use rocket::response::stream::TextStream; use rocket::serde::json::Json; use rocket::serde::Serialize; use serde::Deserialize; +use strum_macros::Display; use tauri::updater::UpdateResponse; use tauri::{FileDropEvent, GlobalShortcutManager, UpdaterEvent, RunEvent, Manager, PathResolver, Window, WindowEvent}; use tauri::api::dialog::blocking::FileDialogBuilder; @@ -32,22 +33,13 @@ static EVENT_BROADCAST: Lazy>>> = Lazy::ne static REGISTERED_SHORTCUTS: Lazy>> = Lazy::new(|| Mutex::new(HashMap::new())); /// Enum identifying global keyboard shortcuts. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, Display)] +#[strum(serialize_all = "SCREAMING_SNAKE_CASE")] pub enum Shortcut { None = 0, VoiceRecordingToggle, } -impl Shortcut { - /// Returns the display name for logging. - pub fn display_name(&self) -> &'static str { - match self { - Shortcut::None => "none", - Shortcut::VoiceRecordingToggle => "voice_recording_toggle", - } - } -} - /// Starts the Tauri app. pub fn start_tauri() { info!("Starting Tauri app..."); @@ -731,7 +723,7 @@ fn register_shortcut_with_callback( // Match the shortcut registration to transform the Tauri result into the Rust result: // match shortcut_manager.register(shortcut, move || { - info!(Source = "Tauri"; "Global shortcut triggered for '{}'.", shortcut_id.display_name()); + info!(Source = "Tauri"; "Global shortcut triggered for '{}'.", shortcut_id); let event = Event::new(TauriEventType::GlobalShortcutPressed, vec![shortcut_id.to_string()]); let sender = event_sender.clone(); tauri::async_runtime::spawn(async move { @@ -753,7 +745,7 @@ pub fn register_shortcut(_token: APIToken, payload: Json info!(Source = "Tauri"; "Unregistered old shortcut '{old_shortcut}' for '{}'.", id.display_name()), + Ok(_) => info!(Source = "Tauri"; "Unregistered old shortcut '{old_shortcut}' for '{}'.", id), Err(error) => warn!(Source = "Tauri"; "Failed to unregister old shortcut '{old_shortcut}': {error}"), } } @@ -784,7 +776,7 @@ pub fn register_shortcut(_token: APIToken, payload: Json { - info!(Source = "Tauri"; "Global shortcut '{new_shortcut}' registered successfully for '{}'.", id.display_name()); + info!(Source = "Tauri"; "Global shortcut '{new_shortcut}' registered successfully for '{}'.", id); registered_shortcuts.insert(id, new_shortcut); Json(ShortcutResponse { success: true, @@ -869,7 +861,7 @@ pub fn validate_shortcut(_token: APIToken, payload: Json Json { for (name, shortcut) in registered_shortcuts.iter() { if !shortcut.is_empty() { match shortcut_manager.unregister(shortcut.as_str()) { - Ok(_) => info!(Source = "Tauri"; "Temporarily unregistered shortcut '{shortcut}' for '{}'.", name.display_name()), - Err(error) => warn!(Source = "Tauri"; "Failed to unregister shortcut '{shortcut}' for '{}': {error}", name.display_name()), + Ok(_) => info!(Source = "Tauri"; "Temporarily unregistered shortcut '{shortcut}' for '{}'.", name), + Err(error) => warn!(Source = "Tauri"; "Failed to unregister shortcut '{shortcut}' for '{}': {error}", name), } } } @@ -980,11 +972,11 @@ pub fn resume_shortcuts(_token: APIToken) -> Json { match register_shortcut_with_callback(&mut shortcut_manager, shortcut, *shortcut_id, event_sender.clone()) { Ok(_) => { - info!(Source = "Tauri"; "Re-registered shortcut '{shortcut}' for '{}'.", shortcut_id.display_name()); + info!(Source = "Tauri"; "Re-registered shortcut '{shortcut}' for '{}'.", shortcut_id); success_count += 1; }, - Err(error) => warn!(Source = "Tauri"; "Failed to re-register shortcut '{shortcut}' for '{}': {error}", shortcut_id.display_name()), + Err(error) => warn!(Source = "Tauri"; "Failed to re-register shortcut '{shortcut}' for '{}': {error}", shortcut_id), } }