fix: handle is none

This commit is contained in:
GyDi 2022-09-12 00:45:19 +08:00
parent cf96622261
commit 2d2fdf0b1e
No known key found for this signature in database
GPG Key ID: 58B15242BA8277A6
3 changed files with 26 additions and 13 deletions

View File

@ -10,8 +10,8 @@ pub struct Handle {
} }
impl Handle { impl Handle {
pub fn from(app_handle: Option<AppHandle>) -> Handle { pub fn set_inner(&mut self, app_handle: AppHandle) {
Handle { app_handle } self.app_handle = Some(app_handle);
} }
pub fn get_window(&self) -> Option<Window> { pub fn get_window(&self) -> Option<Window> {

View File

@ -22,7 +22,7 @@ static CORE: Lazy<Core> = Lazy::new(|| Core {
sysopt: Arc::new(Mutex::new(Sysopt::new())), sysopt: Arc::new(Mutex::new(Sysopt::new())),
timer: Arc::new(Mutex::new(Timer::new())), timer: Arc::new(Mutex::new(Timer::new())),
runtime: Arc::new(Mutex::new(RuntimeResult::default())), runtime: Arc::new(Mutex::new(RuntimeResult::default())),
handle: Handle::default(), handle: Arc::new(Mutex::new(Handle::default())),
}); });
#[derive(Clone)] #[derive(Clone)]
@ -31,7 +31,7 @@ pub struct Core {
pub sysopt: Arc<Mutex<Sysopt>>, pub sysopt: Arc<Mutex<Sysopt>>,
pub timer: Arc<Mutex<Timer>>, pub timer: Arc<Mutex<Timer>>,
pub runtime: Arc<Mutex<RuntimeResult>>, pub runtime: Arc<Mutex<RuntimeResult>>,
pub handle: Handle, pub handle: Arc<Mutex<Handle>>,
} }
impl Core { impl Core {
@ -40,10 +40,14 @@ impl Core {
} }
/// initialize the core state /// 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 // kill old clash process
Service::kill_old_clash(); 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(); let mut service = self.service.lock();
@ -58,8 +62,11 @@ impl Core {
log_if_err!(sysopt.init_sysproxy()); 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 // timer initialize
let mut timer = self.timer.lock(); let mut timer = self.timer.lock();
@ -124,7 +131,8 @@ impl Core {
} }
if has_mode { if has_mode {
self.handle.update_systray_clash()?; let handle = self.handle.lock();
handle.update_systray_clash()?;
} }
Ok(()) Ok(())
@ -186,7 +194,8 @@ impl Core {
} }
if system_proxy.is_some() || tun_mode.is_some() { if system_proxy.is_some() || tun_mode.is_some() {
self.handle.update_systray()?; let handle = self.handle.lock();
handle.update_systray()?;
} }
Ok(()) Ok(())
@ -211,7 +220,8 @@ impl Core {
}); });
// update tray // update tray
self.handle.update_systray_clash()?; let handle = self.handle.lock();
handle.update_systray_clash()?;
Ok(()) Ok(())
} }
@ -260,7 +270,10 @@ impl Core {
let handle = self.handle.clone(); let handle = self.handle.clone();
tauri::async_runtime::spawn(async move { tauri::async_runtime::spawn(async move {
match Service::set_config(clash_info, config).await { 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}"), Err(err) => log::error!(target: "app", "{err}"),
} }
}); });

View File

@ -16,7 +16,7 @@ pub fn resolve_setup(app: &App) {
} }
// core should be initialized after init_app fix #122 // core should be initialized after init_app fix #122
let mut core = Core::global(); let core = Core::global();
core.init(app.app_handle()); core.init(app.app_handle());
resolve_window(app); resolve_window(app);