mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 00:35:38 +08:00
fix: prevent freeze caused by enabling Proxy Guard
This commit is contained in:
@@ -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配置
|
||||
|
||||
@@ -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>";
|
||||
|
||||
Reference in New Issue
Block a user