perf: migrate fs method to async (#6071)

* perf(profiles): migrate file handling to async and improve error handling

* refactor(profiles): simplify cleanup_orphaned_files and adjust CleanupResult structure
This commit is contained in:
Tunglies 2026-01-25 15:20:12 +08:00 committed by GitHub
parent c7462716e5
commit 13dc3feb9f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -35,8 +35,8 @@ pub struct IProfilePreview<'a> {
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
pub struct CleanupResult { pub struct CleanupResult {
pub total_files: usize, pub total_files: usize,
pub deleted_files: Vec<String>, pub deleted_files: usize,
pub failed_deletions: Vec<String>, pub failed_deletions: usize,
} }
macro_rules! patch { macro_rules! patch {
@ -371,15 +371,11 @@ impl IProfiles {
} }
/// 以 app 中的 profile 列表为准,删除不再需要的文件 /// 以 app 中的 profile 列表为准,删除不再需要的文件
pub async fn cleanup_orphaned_files(&self) -> Result<CleanupResult> { pub async fn cleanup_orphaned_files(&self) -> Result<()> {
let profiles_dir = dirs::app_profiles_dir()?; let profiles_dir = dirs::app_profiles_dir()?;
if !profiles_dir.exists() { if !profiles_dir.exists() {
return Ok(CleanupResult { return Ok(());
total_files: 0,
deleted_files: vec![],
failed_deletions: vec![],
});
} }
// 获取所有 active profile 的文件名集合 // 获取所有 active profile 的文件名集合
@ -390,11 +386,11 @@ impl IProfiles {
// 扫描 profiles 目录下的所有文件 // 扫描 profiles 目录下的所有文件
let mut total_files = 0; let mut total_files = 0;
let mut deleted_files = vec![]; let mut deleted_files = 0;
let mut failed_deletions = vec![]; let mut failed_deletions = 0;
for entry in std::fs::read_dir(&profiles_dir)? { let mut dir_entries = tokio::fs::read_dir(&profiles_dir).await?;
let entry = entry?; while let Some(entry) = dir_entries.next_entry().await? {
let path = entry.path(); let path = entry.path();
if !path.is_file() { if !path.is_file() {
@ -416,11 +412,11 @@ impl IProfiles {
if !active_files.contains(file_name) { if !active_files.contains(file_name) {
match path.to_path_buf().remove_if_exists().await { match path.to_path_buf().remove_if_exists().await {
Ok(_) => { Ok(_) => {
deleted_files.push(file_name.into()); deleted_files += 1;
logging!(debug, Type::Config, "已清理冗余文件: {file_name}"); logging!(debug, Type::Config, "已清理冗余文件: {file_name}");
} }
Err(e) => { Err(e) => {
failed_deletions.push(format!("{file_name}: {e}").into()); failed_deletions += 1;
logging!(warn, Type::Config, "Warning: 清理文件失败: {file_name} - {e}"); logging!(warn, Type::Config, "Warning: 清理文件失败: {file_name} - {e}");
} }
} }
@ -439,11 +435,11 @@ impl IProfiles {
Type::Config, Type::Config,
"Profile 文件清理完成: 总文件数={}, 删除文件数={}, 失败数={}", "Profile 文件清理完成: 总文件数={}, 删除文件数={}, 失败数={}",
result.total_files, result.total_files,
result.deleted_files.len(), result.deleted_files,
result.failed_deletions.len() result.failed_deletions
); );
Ok(result) Ok(())
} }
/// 不删除全局扩展配置 /// 不删除全局扩展配置