From dce349586c536dda60015244dffd3c7233cd8651 Mon Sep 17 00:00:00 2001 From: Tunglies <77394545+Tunglies@users.noreply.github.com> Date: Mon, 3 Nov 2025 03:17:33 +0800 Subject: [PATCH] refactor: simplify profile retrieval and remove unused template method --- src-tauri/src/cmd/profile.rs | 55 +++----------------------------- src-tauri/src/config/profiles.rs | 17 +++------- src-tauri/src/feat/backup.rs | 14 +++++--- src-tauri/src/utils/init.rs | 2 +- src/services/types.d.ts | 1 - 5 files changed, 19 insertions(+), 70 deletions(-) diff --git a/src-tauri/src/cmd/profile.rs b/src-tauri/src/cmd/profile.rs index 949ddce1..aadc6798 100644 --- a/src-tauri/src/cmd/profile.rs +++ b/src-tauri/src/cmd/profile.rs @@ -26,57 +26,10 @@ static CURRENT_SWITCHING_PROFILE: AtomicBool = AtomicBool::new(false); #[tauri::command] pub async fn get_profiles() -> CmdResult { - // 策略1: 尝试快速获取latest数据 - let latest_result = tokio::time::timeout(Duration::from_millis(500), async { - let profiles = Config::profiles().await; - let latest = profiles.latest_ref(); - IProfiles { - current: latest.current.clone(), - items: latest.items.clone(), - } - }) - .await; - - match latest_result { - Ok(profiles) => { - logging!(info, Type::Cmd, "快速获取配置列表成功"); - return Ok(profiles); - } - Err(_) => { - logging!(warn, Type::Cmd, "快速获取配置超时(500ms)"); - } - } - - // 策略2: 如果快速获取失败,尝试获取data() - let data_result = tokio::time::timeout(Duration::from_secs(2), async { - let profiles = Config::profiles().await; - let data = profiles.latest_ref(); - IProfiles { - current: data.current.clone(), - items: data.items.clone(), - } - }) - .await; - - match data_result { - Ok(profiles) => { - logging!(info, Type::Cmd, "获取draft配置列表成功"); - return Ok(profiles); - } - Err(join_err) => { - logging!( - error, - Type::Cmd, - "获取draft配置任务失败或超时: {}", - join_err - ); - } - } - - // 策略3: fallback,尝试重新创建配置 - logging!(warn, Type::Cmd, "所有获取配置策略都失败,尝试fallback"); - - Ok(IProfiles::new().await) + logging!(debug, Type::Cmd, "获取配置文件列表"); + let draft = Config::profiles().await; + let latest = draft.latest_ref(); + Ok((**latest).clone()) } /// 增强配置文件 diff --git a/src-tauri/src/config/profiles.rs b/src-tauri/src/config/profiles.rs index f25e5990..bec3683c 100644 --- a/src-tauri/src/config/profiles.rs +++ b/src-tauri/src/config/profiles.rs @@ -69,23 +69,16 @@ impl IProfiles { } Err(err) => { logging!(error, Type::Config, "{err}"); - Self::template() + Self::default() } }, Err(err) => { logging!(error, Type::Config, "{err}"); - Self::template() + Self::default() } } } - pub fn template() -> Self { - Self { - items: Some(vec![]), - ..Self::default() - } - } - pub async fn save_file(&self) -> Result<()> { help::save_yaml( &dirs::profiles_path()?, @@ -101,12 +94,12 @@ impl IProfiles { self.items = Some(vec![]); } - if let Some(current) = patch.current + if let Some(current) = &patch.current && let Some(items) = self.items.as_ref() { let some_uid = Some(current); - if items.iter().any(|e| e.uid == some_uid) { - self.current = some_uid; + if items.iter().any(|e| e.uid.as_ref() == some_uid) { + self.current = some_uid.cloned(); } } diff --git a/src-tauri/src/feat/backup.rs b/src-tauri/src/feat/backup.rs index fcc8d048..4ccdecab 100644 --- a/src-tauri/src/feat/backup.rs +++ b/src-tauri/src/feat/backup.rs @@ -241,11 +241,15 @@ pub async fn restore_local_backup(filename: String) -> Result<()> { return Err(anyhow!("Backup file not found: {}", filename)); } - let verge = Config::verge().await; - let verge_data = verge.latest_ref().clone(); - let webdav_url = verge_data.webdav_url.clone(); - let webdav_username = verge_data.webdav_username.clone(); - let webdav_password = verge_data.webdav_password.clone(); + let (webdav_url, webdav_username, webdav_password) = { + let verge = Config::verge().await; + let verge = verge.latest_ref(); + ( + verge.webdav_url.clone(), + verge.webdav_username.clone(), + verge.webdav_password.clone(), + ) + }; let file = AsyncHandler::spawn_blocking(move || std::fs::File::open(&target_path)).await??; let mut zip = zip::ZipArchive::new(file)?; diff --git a/src-tauri/src/utils/init.rs b/src-tauri/src/utils/init.rs index 61d4288c..97211210 100644 --- a/src-tauri/src/utils/init.rs +++ b/src-tauri/src/utils/init.rs @@ -365,7 +365,7 @@ async fn initialize_config_files() -> Result<()> { if let Ok(path) = dirs::profiles_path() && !path.exists() { - let template = IProfiles::template(); + let template = IProfiles::default(); help::save_yaml(&path, &template, Some("# Clash Verge")) .await .map_err(|e| anyhow::anyhow!("Failed to create profiles config: {}", e))?; diff --git a/src/services/types.d.ts b/src/services/types.d.ts index fcac1137..b5be4647 100644 --- a/src/services/types.d.ts +++ b/src/services/types.d.ts @@ -280,7 +280,6 @@ interface IProfileOption { interface IProfilesConfig { current?: string; - valid?: string[]; items?: IProfileItem[]; }