feat: add function to retrieve profile name by UID and improve error logging for profile updates

This commit is contained in:
Tunglies
2025-11-02 20:07:47 +08:00
Unverified
parent 85244a8f86
commit fb5bf72fb9
3 changed files with 23 additions and 8 deletions

View File

@@ -435,8 +435,8 @@ impl IProfiles {
} }
/// 判断profile是否是current指向的 /// 判断profile是否是current指向的
pub fn is_current_profile_index(&self, index: String) -> bool { pub fn is_current_profile_index(&self, index: &String) -> bool {
self.current == Some(index) self.current.as_ref() == Some(index)
} }
/// 获取所有的profiles(uid名称) /// 获取所有的profiles(uid名称)
@@ -455,6 +455,18 @@ impl IProfiles {
}) })
} }
/// 通过 uid 获取名称
pub fn get_name_by_uid(&self, uid: &String) -> Option<String> {
if let Some(items) = &self.items {
for item in items {
if item.uid.as_ref() == Some(uid) {
return item.name.clone();
}
}
}
None
}
/// 以 app 中的 profile 列表为准,删除不再需要的文件 /// 以 app 中的 profile 列表为准,删除不再需要的文件
pub async fn cleanup_orphaned_files(&self) -> Result<CleanupResult> { pub async fn cleanup_orphaned_files(&self) -> Result<CleanupResult> {
let profiles_dir = dirs::app_profiles_dir()?; let profiles_dir = dirs::app_profiles_dir()?;

View File

@@ -673,17 +673,15 @@ async fn create_profile_menu_item(
.iter() .iter()
.map(|(profile_uid, profile_name)| { .map(|(profile_uid, profile_name)| {
let app_handle = app_handle.clone(); let app_handle = app_handle.clone();
let profile_uid = profile_uid.clone();
let profile_name = profile_name.clone();
async move { async move {
let is_current_profile = Config::profiles() let is_current_profile = Config::profiles()
.await .await
.latest_ref() .latest_ref()
.is_current_profile_index(profile_uid.clone()); .is_current_profile_index(profile_uid);
CheckMenuItem::with_id( CheckMenuItem::with_id(
&app_handle, &app_handle,
format!("profiles_{profile_uid}"), format!("profiles_{profile_uid}"),
t(&profile_name).await, t(profile_name).await,
true, true,
is_current_profile, is_current_profile,
None::<&str>, None::<&str>,

View File

@@ -140,14 +140,19 @@ async fn perform_profile_update(
Ok(is_current) Ok(is_current)
} }
Err(retry_err) => { Err(retry_err) => {
let failed_profile_name = Config::profiles()
.await
.latest_ref()
.get_name_by_uid(uid)
.unwrap_or_default();
logging!( logging!(
error, error,
Type::Config, Type::Config,
"[订阅更新] 使用Clash代理更新仍然失败: {retry_err}" "[订阅更新] 使用Clash代理更新仍然失败: {failed_profile_name} - {retry_err}"
); );
handle::Handle::notice_message( handle::Handle::notice_message(
"update_failed_even_with_clash", "update_failed_even_with_clash",
format!("{retry_err}"), format!("{failed_profile_name} - {retry_err}"),
); );
Err(retry_err) Err(retry_err)
} }