fix(proxy): avoid reporting requested state when system proxy toggle fails (#6699)

This commit is contained in:
F-seeeye 2026-04-02 21:34:47 +08:00 committed by GitHub
parent d95265f08c
commit 0980a891a7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -9,21 +9,21 @@ use tauri_plugin_clipboard_manager::ClipboardExt as _;
/// Toggle system proxy on/off /// Toggle system proxy on/off
pub async fn toggle_system_proxy() -> bool { pub async fn toggle_system_proxy() -> bool {
let verge = Config::verge().await; let verge = Config::verge().await;
let enable = verge.latest_arc().enable_system_proxy.unwrap_or(false); let current = verge.latest_arc().enable_system_proxy.unwrap_or(false);
let auto_close_connection = verge.latest_arc().auto_close_connection.unwrap_or(false); let auto_close_connection = verge.latest_arc().auto_close_connection.unwrap_or(false);
// 如果当前系统代理即将关闭且自动关闭连接设置为true则关闭所有连接 // 如果当前系统代理即将关闭且自动关闭连接设置为true则关闭所有连接
if enable if current
&& auto_close_connection && auto_close_connection
&& let Err(err) = handle::Handle::mihomo().await.close_all_connections().await && let Err(err) = handle::Handle::mihomo().await.close_all_connections().await
{ {
logging!(error, Type::ProxyMode, "Failed to close all connections: {err}"); logging!(error, Type::ProxyMode, "Failed to close all connections: {err}");
} }
let enable = !enable; let requested = !current;
let patch_result = super::patch_verge( let patch_result = super::patch_verge(
&IVerge { &IVerge {
enable_system_proxy: Some(enable), enable_system_proxy: Some(requested),
..IVerge::default() ..IVerge::default()
}, },
false, false,
@ -31,11 +31,15 @@ pub async fn toggle_system_proxy() -> bool {
.await; .await;
match patch_result { match patch_result {
Ok(_) => handle::Handle::refresh_verge(), Ok(_) => {
Err(err) => logging!(error, Type::ProxyMode, "{err}"), handle::Handle::refresh_verge();
requested
}
Err(err) => {
logging!(error, Type::ProxyMode, "{err}");
current
}
} }
enable
} }
/// Toggle TUN mode on/off /// Toggle TUN mode on/off