diff --git a/src-tauri/src/cmd/verge.rs b/src-tauri/src/cmd/verge.rs index 9d7c4fd2e..88a199235 100644 --- a/src-tauri/src/cmd/verge.rs +++ b/src-tauri/src/cmd/verge.rs @@ -4,9 +4,12 @@ use crate::{config::*, feat, wrap_err}; /// 获取Verge配置 #[tauri::command] pub fn get_verge_config() -> CmdResult { - 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配置 diff --git a/src-tauri/src/core/event_driven_proxy.rs b/src-tauri/src/core/event_driven_proxy.rs index 933d24108..0216a26bf 100644 --- a/src-tauri/src/core/event_driven_proxy.rs +++ b/src-tauri/src/core/event_driven_proxy.rs @@ -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.*;";