fix: prevent freeze caused by enabling Proxy Guard

This commit is contained in:
wonfen
2025-07-04 12:22:22 +08:00
parent 7704072a65
commit 7d808ed798
2 changed files with 45 additions and 27 deletions

View File

@@ -4,9 +4,12 @@ use crate::{config::*, feat, wrap_err};
/// 获取Verge配置
#[tauri::command]
pub fn get_verge_config() -> CmdResult<IVergeResponse> {
let verge = Config::verge();
let verge_data = verge.data().clone();
Ok(IVergeResponse::from(*verge_data))
let verge_data = {
let verge = Config::verge();
let data = verge.data();
(**data).clone()
};
Ok(IVergeResponse::from(verge_data))
}
/// 修改Verge配置

View File

@@ -426,25 +426,32 @@ impl EventDrivenProxyManager {
}
fn get_proxy_config() -> ProxyConfig {
let verge_config = Config::verge();
let verge = verge_config.latest();
let (sys_enabled, pac_enabled, guard_enabled) = {
let verge_config = Config::verge();
let verge = verge_config.latest();
(
verge.enable_system_proxy.unwrap_or(false),
verge.proxy_auto_config.unwrap_or(false),
verge.enable_proxy_guard.unwrap_or(false),
)
};
ProxyConfig {
sys_enabled: verge.enable_system_proxy.unwrap_or(false),
pac_enabled: verge.proxy_auto_config.unwrap_or(false),
guard_enabled: verge.enable_proxy_guard.unwrap_or(false),
sys_enabled,
pac_enabled,
guard_enabled,
}
}
fn get_expected_pac_config() -> Autoproxy {
let verge_config = Config::verge();
let verge = verge_config.latest();
let (proxy_host, pac_port) = (
let proxy_host = {
let verge_config = Config::verge();
let verge = verge_config.latest();
verge
.proxy_host
.clone()
.unwrap_or_else(|| "127.0.0.1".to_string()),
IVerge::get_singleton_port(),
);
.unwrap_or_else(|| "127.0.0.1".to_string())
};
let pac_port = IVerge::get_singleton_port();
Autoproxy {
enable: true,
url: format!("http://{proxy_host}:{pac_port}/commands/pac"),
@@ -452,15 +459,19 @@ impl EventDrivenProxyManager {
}
fn get_expected_sys_proxy() -> Sysproxy {
let verge_config = Config::verge();
let verge = verge_config.latest();
let port = verge
.verge_mixed_port
.unwrap_or(Config::clash().data().get_mixed_port());
let proxy_host = verge
.proxy_host
.clone()
.unwrap_or_else(|| "127.0.0.1".to_string());
let (verge_mixed_port, proxy_host) = {
let verge_config = Config::verge();
let verge = verge_config.latest();
(
verge.verge_mixed_port,
verge
.proxy_host
.clone()
.unwrap_or_else(|| "127.0.0.1".to_string()),
)
};
let port = verge_mixed_port.unwrap_or_else(|| Config::clash().data().get_mixed_port());
Sysproxy {
enable: true,
@@ -471,10 +482,14 @@ impl EventDrivenProxyManager {
}
fn get_bypass_config() -> String {
let verge_config = Config::verge();
let verge = verge_config.latest();
let use_default = verge.use_default_bypass.unwrap_or(true);
let custom_bypass = verge.system_proxy_bypass.clone().unwrap_or_default();
let (use_default, custom_bypass) = {
let verge_config = Config::verge();
let verge = verge_config.latest();
(
verge.use_default_bypass.unwrap_or(true),
verge.system_proxy_bypass.clone().unwrap_or_default(),
)
};
#[cfg(target_os = "windows")]
let default_bypass = "localhost;127.*;192.168.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;<local>";