From fb5bf72fb97d5494e19d6b4d69ff0e5802459fbb Mon Sep 17 00:00:00 2001 From: Tunglies <77394545+Tunglies@users.noreply.github.com> Date: Sun, 2 Nov 2025 20:07:47 +0800 Subject: [PATCH] feat: add function to retrieve profile name by UID and improve error logging for profile updates --- src-tauri/src/config/profiles.rs | 16 ++++++++++++++-- src-tauri/src/core/tray/mod.rs | 6 ++---- src-tauri/src/feat/profile.rs | 9 +++++++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src-tauri/src/config/profiles.rs b/src-tauri/src/config/profiles.rs index 98886afc..f25e5990 100644 --- a/src-tauri/src/config/profiles.rs +++ b/src-tauri/src/config/profiles.rs @@ -435,8 +435,8 @@ impl IProfiles { } /// 判断profile是否是current指向的 - pub fn is_current_profile_index(&self, index: String) -> bool { - self.current == Some(index) + pub fn is_current_profile_index(&self, index: &String) -> bool { + self.current.as_ref() == Some(index) } /// 获取所有的profiles(uid,名称) @@ -455,6 +455,18 @@ impl IProfiles { }) } + /// 通过 uid 获取名称 + pub fn get_name_by_uid(&self, uid: &String) -> Option { + if let Some(items) = &self.items { + for item in items { + if item.uid.as_ref() == Some(uid) { + return item.name.clone(); + } + } + } + None + } + /// 以 app 中的 profile 列表为准,删除不再需要的文件 pub async fn cleanup_orphaned_files(&self) -> Result { let profiles_dir = dirs::app_profiles_dir()?; diff --git a/src-tauri/src/core/tray/mod.rs b/src-tauri/src/core/tray/mod.rs index 8261c98a..474b0202 100644 --- a/src-tauri/src/core/tray/mod.rs +++ b/src-tauri/src/core/tray/mod.rs @@ -673,17 +673,15 @@ async fn create_profile_menu_item( .iter() .map(|(profile_uid, profile_name)| { let app_handle = app_handle.clone(); - let profile_uid = profile_uid.clone(); - let profile_name = profile_name.clone(); async move { let is_current_profile = Config::profiles() .await .latest_ref() - .is_current_profile_index(profile_uid.clone()); + .is_current_profile_index(profile_uid); CheckMenuItem::with_id( &app_handle, format!("profiles_{profile_uid}"), - t(&profile_name).await, + t(profile_name).await, true, is_current_profile, None::<&str>, diff --git a/src-tauri/src/feat/profile.rs b/src-tauri/src/feat/profile.rs index 273022a5..2bd8512c 100644 --- a/src-tauri/src/feat/profile.rs +++ b/src-tauri/src/feat/profile.rs @@ -140,14 +140,19 @@ async fn perform_profile_update( Ok(is_current) } Err(retry_err) => { + let failed_profile_name = Config::profiles() + .await + .latest_ref() + .get_name_by_uid(uid) + .unwrap_or_default(); logging!( error, Type::Config, - "[订阅更新] 使用Clash代理更新仍然失败: {retry_err}" + "[订阅更新] 使用Clash代理更新仍然失败: {failed_profile_name} - {retry_err}" ); handle::Handle::notice_message( "update_failed_even_with_clash", - format!("{retry_err}"), + format!("{failed_profile_name} - {retry_err}"), ); Err(retry_err) }