From c4c37bf29124fed5e53ad30b1500b449aea1c21c Mon Sep 17 00:00:00 2001 From: Sline Date: Wed, 22 Oct 2025 19:28:00 +0800 Subject: [PATCH] feat(tray): close all connections (#5165) --- UPDATELOG.md | 1 + src-tauri/src/core/tray/mod.rs | 21 ++++++++++++++++++++- src/locales/en.json | 1 + src/locales/zh.json | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/UPDATELOG.md b/UPDATELOG.md index 75515df75..7d240f2f1 100644 --- a/UPDATELOG.md +++ b/UPDATELOG.md @@ -12,6 +12,7 @@ - 新增本地备份功能 - 主界面“当前节点”卡片新增自动延迟检测开关(默认关闭) - 允许独立控制订阅自动更新 +- 托盘 `更多` 中新增 `关闭所有连接` 按钮 ### 🚀 优化改进 diff --git a/src-tauri/src/core/tray/mod.rs b/src-tauri/src/core/tray/mod.rs index a776a9f5e..0248bc46d 100644 --- a/src-tauri/src/core/tray/mod.rs +++ b/src-tauri/src/core/tray/mod.rs @@ -840,6 +840,7 @@ async fn create_tray_menu( let proxies_text = t("Proxies").await; let system_proxy_text = t("System Proxy").await; let tun_mode_text = t("TUN Mode").await; + let close_all_connections_text = t("Close All Connections").await; let lightweight_mode_text = t("LightWeight Mode").await; let copy_env_text = t("Copy Env").await; let conf_dir_text = t("Conf Dir").await; @@ -949,6 +950,14 @@ async fn create_tray_menu( hotkeys.get("toggle_tun_mode").map(|s| s.as_str()), )?; + let close_all_connections = &MenuItem::with_id( + app_handle, + "close_all_connections", + close_all_connections_text, + true, + None::<&str>, + )?; + let lighteweight_mode = &CheckMenuItem::with_id( app_handle, "entry_lightweight_mode", @@ -1021,7 +1030,12 @@ async fn create_tray_menu( "more", more_text, true, - &[restart_clash, restart_app, app_version], + &[ + close_all_connections, + restart_clash, + restart_app, + app_version, + ], )?; let quit = &MenuItem::with_id(app_handle, "quit", exit_text, true, Some("CmdOrControl+Q"))?; @@ -1091,6 +1105,11 @@ fn on_menu_event(_: &AppHandle, event: MenuEvent) { "tun_mode" => { feat::toggle_tun_mode(None).await; } + "close_all_connections" => { + if let Err(err) = handle::Handle::mihomo().await.close_all_connections().await { + log::error!(target: "app", "Failed to close all connections from tray: {err}"); + } + } "copy_env" => feat::copy_clash_env().await, "open_app_dir" => { let _ = cmd::open_app_dir().await; diff --git a/src/locales/en.json b/src/locales/en.json index a39be05cb..ca44d3fb8 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -182,6 +182,7 @@ "Table View": "Table View", "List View": "List View", "Close All": "Close All", + "Close All Connections": "Close All Connections", "Upload": "Upload", "Download": "Download", "Download Speed": "Download Speed", diff --git a/src/locales/zh.json b/src/locales/zh.json index 2ccdec105..e1ffa04c3 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -182,6 +182,7 @@ "Table View": "表格视图", "List View": "列表视图", "Close All": "关闭全部", + "Close All Connections": "关闭所有连接", "Upload": "上传", "Download": "下载", "Download Speed": "下载速度",