refactor: improve proxy retrieval and add window destruction method

This commit is contained in:
Tunglies 2025-03-19 02:04:01 +08:00
parent baa535b609
commit 772ecdd3b0
3 changed files with 29 additions and 16 deletions

View File

@ -4,13 +4,21 @@ use crate::module::mihomo::MihomoManager;
#[tauri::command] #[tauri::command]
pub async fn get_proxies() -> CmdResult<serde_json::Value> { pub async fn get_proxies() -> CmdResult<serde_json::Value> {
let mannager = MihomoManager::global(); let mannager = MihomoManager::global();
mannager.refresh_proxies().await.unwrap(); let proxies = mannager
Ok(mannager.get_proxies()) .refresh_proxies()
.await
.map(|_| mannager.get_proxies())
.or_else(|_| Ok(mannager.get_proxies()));
proxies
} }
#[tauri::command] #[tauri::command]
pub async fn get_providers_proxies() -> CmdResult<serde_json::Value> { pub async fn get_providers_proxies() -> CmdResult<serde_json::Value> {
let mannager = MihomoManager::global(); let mannager = MihomoManager::global();
mannager.refresh_providers_proxies().await.unwrap(); let providers = mannager
Ok(mannager.get_providers_proxies()) .refresh_providers_proxies()
.await
.map(|_| mannager.get_providers_proxies())
.or_else(|_| Ok(mannager.get_providers_proxies()));
providers
} }

View File

@ -41,6 +41,18 @@ impl Handle {
window 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() { pub fn refresh_clash() {
if let Some(window) = Self::global().get_window() { if let Some(window) = Self::global().get_window() {
log_err!(window.emit("verge://refresh-clash-config", "yes")); log_err!(window.emit("verge://refresh-clash-config", "yes"));

View File

@ -194,18 +194,11 @@ pub async fn patch_verge(patch: IVerge, not_save_file: bool) -> Result<()> {
} }
// Handle lite mode switch // Handle lite mode switch
if lite_mode.is_some() { if let Some(enable) = lite_mode {
if let Some(window) = handle::Handle::global().get_window() { if enable {
if lite_mode.unwrap() { handle::Handle::global().destroy_window().ok();
// 完全退出 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 { } else {
resolve::create_window(); // 重新创建窗口 resolve::create_window();
}
} }
} }