From 49257a026c471c1d8adff166cfe9daccc484c51f Mon Sep 17 00:00:00 2001 From: oomeow Date: Sat, 1 Aug 2026 23:19:26 +0800 Subject: [PATCH] fix: app freeze when emit refresh proxy config event (#7662) --- src-tauri/src/core/handle.rs | 4 ++++ src-tauri/src/core/notification.rs | 2 ++ src-tauri/src/feat/profile.rs | 3 +-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src-tauri/src/core/handle.rs b/src-tauri/src/core/handle.rs index 977ee63b0..f89c4e877 100644 --- a/src-tauri/src/core/handle.rs +++ b/src-tauri/src/core/handle.rs @@ -47,6 +47,10 @@ impl Handle { Self::send_event(FrontendEvent::RefreshProfiles); } + pub fn refresh_proxy_config() { + Self::send_event(FrontendEvent::RefreshProxyConfig); + } + /// Push a Run State snapshot to the frontend. /// /// Sent on every transition, so the frontend does not have to poll to notice that the Core diff --git a/src-tauri/src/core/notification.rs b/src-tauri/src/core/notification.rs index f6ebadabd..4f2c5931a 100644 --- a/src-tauri/src/core/notification.rs +++ b/src-tauri/src/core/notification.rs @@ -9,6 +9,7 @@ pub enum FrontendEvent<'a> { RefreshClash, RefreshVerge, RefreshProfiles, + RefreshProxyConfig, NoticeMessage { status: &'a str, message: String }, ProfileChanged { current_profile_id: &'a String }, TimerUpdated { profile_index: &'a String }, @@ -32,6 +33,7 @@ impl NotificationSystem { FrontendEvent::RefreshClash => ("verge://refresh-clash-config", Ok(json!("yes"))), FrontendEvent::RefreshVerge => ("verge://refresh-verge-config", Ok(json!("yes"))), FrontendEvent::RefreshProfiles => ("verge://refresh-profiles", Ok(json!("yes"))), + FrontendEvent::RefreshProxyConfig => ("verge://refresh-proxy-config", Ok(serde_json::Value::Null)), FrontendEvent::NoticeMessage { status, message } => { ("verge://notice-message", serde_json::to_value((status, message))) } diff --git a/src-tauri/src/feat/profile.rs b/src-tauri/src/feat/profile.rs index 1b410b7fd..e263aa3db 100644 --- a/src-tauri/src/feat/profile.rs +++ b/src-tauri/src/feat/profile.rs @@ -7,7 +7,6 @@ use crate::{ use anyhow::{Result, bail}; use clash_verge_logging::{Type, logging, logging_error}; use smartstring::alias::String; -use tauri::Emitter as _; /// Toggle proxy profile pub async fn toggle_proxy_profile(profile_index: String) { @@ -42,7 +41,7 @@ pub async fn switch_proxy_node(group_name: &str, proxy_name: &str) { Ok(_) => { logging!(info, Type::Tray, "切换代理成功: {} -> {}", group_name, proxy_name); record_switched_node(group_name, proxy_name).await; - let _ = handle::Handle::app_handle().emit("verge://refresh-proxy-config", ()); + handle::Handle::refresh_proxy_config(); let _ = tray::Tray::global().update_menu().await; return; }