diff --git a/src-tauri/src/cmd/proxy.rs b/src-tauri/src/cmd/proxy.rs index d9874845..a196000a 100644 --- a/src-tauri/src/cmd/proxy.rs +++ b/src-tauri/src/cmd/proxy.rs @@ -4,13 +4,21 @@ use crate::module::mihomo::MihomoManager; #[tauri::command] pub async fn get_proxies() -> CmdResult { let mannager = MihomoManager::global(); - mannager.refresh_proxies().await.unwrap(); - Ok(mannager.get_proxies()) + let proxies = mannager + .refresh_proxies() + .await + .map(|_| mannager.get_proxies()) + .or_else(|_| Ok(mannager.get_proxies())); + proxies } #[tauri::command] pub async fn get_providers_proxies() -> CmdResult { let mannager = MihomoManager::global(); - mannager.refresh_providers_proxies().await.unwrap(); - Ok(mannager.get_providers_proxies()) + let providers = mannager + .refresh_providers_proxies() + .await + .map(|_| mannager.get_providers_proxies()) + .or_else(|_| Ok(mannager.get_providers_proxies())); + providers } diff --git a/src-tauri/src/core/handle.rs b/src-tauri/src/core/handle.rs index 4fabfaba..bef8c52f 100644 --- a/src-tauri/src/core/handle.rs +++ b/src-tauri/src/core/handle.rs @@ -41,6 +41,18 @@ impl Handle { window } + pub fn destroy_window(&self) -> Result<(), String> { + if let Some(window) = self.get_window() { + log_err!(window.close()); + } + if let Some(window) = Self::global().get_window() { + if let Some(webview) = window.get_webview_window("main") { + log_err!(webview.destroy()); + } + } + Ok(()) + } + pub fn refresh_clash() { if let Some(window) = Self::global().get_window() { log_err!(window.emit("verge://refresh-clash-config", "yes")); diff --git a/src-tauri/src/feat/config.rs b/src-tauri/src/feat/config.rs index 1d992d03..1162dc3a 100644 --- a/src-tauri/src/feat/config.rs +++ b/src-tauri/src/feat/config.rs @@ -194,18 +194,11 @@ pub async fn patch_verge(patch: IVerge, not_save_file: bool) -> Result<()> { } // Handle lite mode switch - if lite_mode.is_some() { - if let Some(window) = handle::Handle::global().get_window() { - if lite_mode.unwrap() { - // 完全退出 webview 进程 - window.close()?; // 先关闭窗口 - let app_handle = handle::Handle::global().app_handle().unwrap(); - if let Some(webview) = app_handle.get_webview_window("main") { - webview.destroy()?; // 销毁 webview 进程 - } - } else { - resolve::create_window(); // 重新创建窗口 - } + if let Some(enable) = lite_mode { + if enable { + handle::Handle::global().destroy_window().ok(); + } else { + resolve::create_window(); } }