diff --git a/src-tauri/src/core/handle.rs b/src-tauri/src/core/handle.rs index bba93d0..471790d 100644 --- a/src-tauri/src/core/handle.rs +++ b/src-tauri/src/core/handle.rs @@ -10,8 +10,8 @@ pub struct Handle { } impl Handle { - pub fn from(app_handle: Option) -> Handle { - Handle { app_handle } + pub fn set_inner(&mut self, app_handle: AppHandle) { + self.app_handle = Some(app_handle); } pub fn get_window(&self) -> Option { diff --git a/src-tauri/src/core/mod.rs b/src-tauri/src/core/mod.rs index df7d6d2..24421f6 100644 --- a/src-tauri/src/core/mod.rs +++ b/src-tauri/src/core/mod.rs @@ -22,7 +22,7 @@ static CORE: Lazy = Lazy::new(|| Core { sysopt: Arc::new(Mutex::new(Sysopt::new())), timer: Arc::new(Mutex::new(Timer::new())), runtime: Arc::new(Mutex::new(RuntimeResult::default())), - handle: Handle::default(), + handle: Arc::new(Mutex::new(Handle::default())), }); #[derive(Clone)] @@ -31,7 +31,7 @@ pub struct Core { pub sysopt: Arc>, pub timer: Arc>, pub runtime: Arc>, - pub handle: Handle, + pub handle: Arc>, } impl Core { @@ -40,10 +40,14 @@ impl Core { } /// initialize the core state - pub fn init(&mut self, app_handle: tauri::AppHandle) { + pub fn init(&self, app_handle: tauri::AppHandle) { // kill old clash process Service::kill_old_clash(); - self.handle = Handle::from(Some(app_handle)); + + { + let mut handle = self.handle.lock(); + handle.set_inner(app_handle); + } { let mut service = self.service.lock(); @@ -58,8 +62,11 @@ impl Core { log_if_err!(sysopt.init_sysproxy()); } - log_if_err!(self.handle.update_systray()); - log_if_err!(self.handle.update_systray_clash()); + { + let handle = self.handle.lock(); + log_if_err!(handle.update_systray()); + log_if_err!(handle.update_systray_clash()); + } // timer initialize let mut timer = self.timer.lock(); @@ -124,7 +131,8 @@ impl Core { } if has_mode { - self.handle.update_systray_clash()?; + let handle = self.handle.lock(); + handle.update_systray_clash()?; } Ok(()) @@ -186,7 +194,8 @@ impl Core { } if system_proxy.is_some() || tun_mode.is_some() { - self.handle.update_systray()?; + let handle = self.handle.lock(); + handle.update_systray()?; } Ok(()) @@ -211,7 +220,8 @@ impl Core { }); // update tray - self.handle.update_systray_clash()?; + let handle = self.handle.lock(); + handle.update_systray_clash()?; Ok(()) } @@ -260,7 +270,10 @@ impl Core { let handle = self.handle.clone(); tauri::async_runtime::spawn(async move { match Service::set_config(clash_info, config).await { - Ok(_) => handle.refresh_clash(), + Ok(_) => { + let handle = handle.lock(); + handle.refresh_clash() + } Err(err) => log::error!(target: "app", "{err}"), } }); diff --git a/src-tauri/src/utils/resolve.rs b/src-tauri/src/utils/resolve.rs index 6042640..fd947c9 100644 --- a/src-tauri/src/utils/resolve.rs +++ b/src-tauri/src/utils/resolve.rs @@ -16,7 +16,7 @@ pub fn resolve_setup(app: &App) { } // core should be initialized after init_app fix #122 - let mut core = Core::global(); + let core = Core::global(); core.init(app.app_handle()); resolve_window(app);