feat: make get system and auto proxy functions async, use spawn_blocking for blocking tasks

This commit is contained in:
wonfen 2025-05-04 20:35:04 +08:00
parent ce42ca77a9
commit d8df283e93
2 changed files with 16 additions and 8 deletions

View File

@ -3,11 +3,16 @@ use crate::wrap_err;
use network_interface::NetworkInterface; use network_interface::NetworkInterface;
use serde_yaml::Mapping; use serde_yaml::Mapping;
use sysproxy::{Autoproxy, Sysproxy}; use sysproxy::{Autoproxy, Sysproxy};
use tokio::task::spawn_blocking;
/// get the system proxy /// get the system proxy
#[tauri::command] #[tauri::command]
pub fn get_sys_proxy() -> CmdResult<Mapping> { pub async fn get_sys_proxy() -> CmdResult<Mapping> {
let current = wrap_err!(Sysproxy::get_system_proxy())?; 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(); let mut map = Mapping::new();
map.insert("enable".into(), current.enable.into()); map.insert("enable".into(), current.enable.into());
map.insert( map.insert(
@ -21,8 +26,11 @@ pub fn get_sys_proxy() -> CmdResult<Mapping> {
/// get the system proxy /// get the system proxy
#[tauri::command] #[tauri::command]
pub fn get_auto_proxy() -> CmdResult<Mapping> { pub async fn get_auto_proxy() -> CmdResult<Mapping> {
let current = wrap_err!(Autoproxy::get_auto_proxy())?; 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(); let mut map = Mapping::new();
map.insert("enable".into(), current.enable.into()); map.insert("enable".into(), current.enable.into());

View File

@ -29,12 +29,12 @@ impl MihomoManager {
} }
fn update_proxies(&self, proxies: serde_json::Value) { 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; data.proxies = proxies;
} }
fn update_providers_proxies(&self, providers_proxies: serde_json::Value) { 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; data.providers_proxies = providers_proxies;
} }
@ -43,12 +43,12 @@ impl MihomoManager {
} }
pub fn get_proxies(&self) -> serde_json::Value { 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() data.proxies.clone()
} }
pub fn get_providers_proxies(&self) -> serde_json::Value { 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() data.providers_proxies.clone()
} }