From d8df283e93fdf077c95efeeea53357b7e503fae6 Mon Sep 17 00:00:00 2001 From: wonfen Date: Sun, 4 May 2025 20:35:04 +0800 Subject: [PATCH] feat: make get system and auto proxy functions async, use spawn_blocking for blocking tasks --- src-tauri/src/cmd/network.rs | 16 ++++++++++++---- src-tauri/src_crates/crate_mihomo_api/src/lib.rs | 8 ++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src-tauri/src/cmd/network.rs b/src-tauri/src/cmd/network.rs index 104c4386..b9ccb466 100644 --- a/src-tauri/src/cmd/network.rs +++ b/src-tauri/src/cmd/network.rs @@ -3,11 +3,16 @@ use crate::wrap_err; use network_interface::NetworkInterface; use serde_yaml::Mapping; use sysproxy::{Autoproxy, Sysproxy}; +use tokio::task::spawn_blocking; /// get the system proxy #[tauri::command] -pub fn get_sys_proxy() -> CmdResult { - let current = wrap_err!(Sysproxy::get_system_proxy())?; +pub async fn get_sys_proxy() -> CmdResult { + let current = spawn_blocking(move || Sysproxy::get_system_proxy()) + .await + .map_err(|e| format!("Failed to spawn blocking task for sysproxy: {}", e))? + .map_err(|e| format!("Failed to get system proxy: {}", e))?; + let mut map = Mapping::new(); map.insert("enable".into(), current.enable.into()); map.insert( @@ -21,8 +26,11 @@ pub fn get_sys_proxy() -> CmdResult { /// get the system proxy #[tauri::command] -pub fn get_auto_proxy() -> CmdResult { - let current = wrap_err!(Autoproxy::get_auto_proxy())?; +pub async fn get_auto_proxy() -> CmdResult { + let current = spawn_blocking(move || Autoproxy::get_auto_proxy()) + .await + .map_err(|e| format!("Failed to spawn blocking task for autoproxy: {}", e))? + .map_err(|e| format!("Failed to get auto proxy: {}", e))?; let mut map = Mapping::new(); map.insert("enable".into(), current.enable.into()); diff --git a/src-tauri/src_crates/crate_mihomo_api/src/lib.rs b/src-tauri/src_crates/crate_mihomo_api/src/lib.rs index ec4ce4f1..6d8745a9 100644 --- a/src-tauri/src_crates/crate_mihomo_api/src/lib.rs +++ b/src-tauri/src_crates/crate_mihomo_api/src/lib.rs @@ -29,12 +29,12 @@ impl MihomoManager { } fn update_proxies(&self, proxies: serde_json::Value) { - let mut data = self.data.lock().unwrap(); + let mut data = self.data.lock().expect("Mutex poisoned"); data.proxies = proxies; } fn update_providers_proxies(&self, providers_proxies: serde_json::Value) { - let mut data = self.data.lock().unwrap(); + let mut data = self.data.lock().expect("Mutex poisoned"); data.providers_proxies = providers_proxies; } @@ -43,12 +43,12 @@ impl MihomoManager { } pub fn get_proxies(&self) -> serde_json::Value { - let data = self.data.lock().unwrap(); + let data = self.data.lock().expect("Mutex poisoned"); data.proxies.clone() } pub fn get_providers_proxies(&self) -> serde_json::Value { - let data = self.data.lock().unwrap(); + let data = self.data.lock().expect("Mutex poisoned"); data.providers_proxies.clone() }