fix: windows build error

This commit is contained in:
PandaDEV 2024-11-15 23:45:24 +10:00
parent b712d23a7b
commit 6250a3e84b
No known key found for this signature in database
GPG key ID: 13EFF9BAF70EE75C

View file

@ -4,18 +4,18 @@ use global_hotkey::{
GlobalHotKeyEvent, GlobalHotKeyManager, HotKeyState, GlobalHotKeyEvent, GlobalHotKeyManager, HotKeyState,
}; };
use std::str::FromStr; use std::str::FromStr;
use std::sync::Mutex; use std::cell::RefCell;
use tauri::{AppHandle, Manager, Listener}; use tauri::{AppHandle, Manager, Listener};
lazy_static::lazy_static! { thread_local! {
static ref HOTKEY_MANAGER: Mutex<Option<GlobalHotKeyManager>> = Mutex::new(None); static HOTKEY_MANAGER: RefCell<Option<GlobalHotKeyManager>> = RefCell::new(None);
} }
pub fn setup(app_handle: tauri::AppHandle) { pub fn setup(app_handle: tauri::AppHandle) {
let app_handle_clone = app_handle.clone(); let app_handle_clone = app_handle.clone();
let manager = GlobalHotKeyManager::new().expect("Failed to initialize hotkey manager"); let manager = GlobalHotKeyManager::new().expect("Failed to initialize hotkey manager");
*HOTKEY_MANAGER.lock().unwrap() = Some(manager); HOTKEY_MANAGER.with(|m| *m.borrow_mut() = Some(manager));
let rt = app_handle.state::<tokio::runtime::Runtime>(); let rt = app_handle.state::<tokio::runtime::Runtime>();
let initial_keybind = rt.block_on(crate::api::database::get_keybind(app_handle_clone.clone())) let initial_keybind = rt.block_on(crate::api::database::get_keybind(app_handle_clone.clone()))
@ -33,9 +33,11 @@ pub fn setup(app_handle: tauri::AppHandle) {
let payload_str = event.payload().to_string(); let payload_str = event.payload().to_string();
if let Ok(old_hotkey) = parse_hotkey(&initial_shortcut_for_update) { if let Ok(old_hotkey) = parse_hotkey(&initial_shortcut_for_update) {
if let Some(manager) = HOTKEY_MANAGER.lock().unwrap().as_ref() { HOTKEY_MANAGER.with(|manager| {
let _ = manager.unregister(old_hotkey); if let Some(manager) = manager.borrow().as_ref() {
} let _ = manager.unregister(old_hotkey);
}
});
} }
if let Err(e) = register_shortcut(&payload_str) { if let Err(e) = register_shortcut(&payload_str) {
@ -47,9 +49,11 @@ pub fn setup(app_handle: tauri::AppHandle) {
let payload_str = event.payload().to_string(); let payload_str = event.payload().to_string();
if let Ok(old_hotkey) = parse_hotkey(&initial_shortcut_for_save) { if let Ok(old_hotkey) = parse_hotkey(&initial_shortcut_for_save) {
if let Some(manager) = HOTKEY_MANAGER.lock().unwrap().as_ref() { HOTKEY_MANAGER.with(|manager| {
let _ = manager.unregister(old_hotkey); if let Some(manager) = manager.borrow().as_ref() {
} let _ = manager.unregister(old_hotkey);
}
});
} }
if let Err(e) = register_shortcut(&payload_str) { if let Err(e) = register_shortcut(&payload_str) {
@ -77,10 +81,12 @@ pub fn setup(app_handle: tauri::AppHandle) {
fn register_shortcut(shortcut: &str) -> Result<(), Box<dyn std::error::Error>> { fn register_shortcut(shortcut: &str) -> Result<(), Box<dyn std::error::Error>> {
let hotkey = parse_hotkey(shortcut)?; let hotkey = parse_hotkey(shortcut)?;
if let Some(manager) = HOTKEY_MANAGER.lock().unwrap().as_ref() { HOTKEY_MANAGER.with(|manager| {
manager.register(hotkey)?; if let Some(manager) = manager.borrow().as_ref() {
} manager.register(hotkey)?;
Ok(()) }
Ok(())
})
} }
fn parse_hotkey(shortcut: &str) -> Result<HotKey, Box<dyn std::error::Error>> { fn parse_hotkey(shortcut: &str) -> Result<HotKey, Box<dyn std::error::Error>> {