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]
pub async fn get_proxies() -> CmdResult<serde_json::Value> {
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<serde_json::Value> {
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
}

View File

@ -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"));

View File

@ -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 进程
}
if let Some(enable) = lite_mode {
if enable {
handle::Handle::global().destroy_window().ok();
} else {
resolve::create_window(); // 重新创建窗口
}
resolve::create_window();
}
}