From f26abcd2a98d4d4bcd2dacfaa2bca3e36fc4ee58 Mon Sep 17 00:00:00 2001 From: Slinetrac Date: Tue, 23 Dec 2025 10:55:30 +0800 Subject: [PATCH] fix(backup): reload config.yaml and profiles.yaml after restore to avoid stale memory overwrite #5909 Closes #5909 --- Changelog.md | 1 + src-tauri/src/feat/backup.rs | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index b388fa1da..0b2531d63 100644 --- a/Changelog.md +++ b/Changelog.md @@ -6,6 +6,7 @@ - 修复 Monaco 编辑器内右键菜单显示异常 - 修复设置代理端口时检查端口占用 - 修复 Monaco 编辑器初始化卡 Loading +- 修复恢复备份时 `config.yaml` / `profiles.yaml` 文件内字段未正确恢复
✨ 新增功能 diff --git a/src-tauri/src/feat/backup.rs b/src-tauri/src/feat/backup.rs index 9b4d187bd..0f61b5be9 100644 --- a/src-tauri/src/feat/backup.rs +++ b/src-tauri/src/feat/backup.rs @@ -1,5 +1,5 @@ use crate::{ - config::{Config, IVerge}, + config::{Config, IClashTemp, IProfiles, IVerge}, core::backup, process::AsyncHandler, utils::{ @@ -25,6 +25,7 @@ pub struct LocalBackupFile { } /// Load restored verge.yaml from disk, merge back WebDAV creds, save, and sync memory. +/// Also reload other restored configs so restarts won't overwrite them. async fn finalize_restored_verge_config( webdav_url: Option, webdav_username: Option, @@ -38,6 +39,20 @@ async fn finalize_restored_verge_config( restored.webdav_password = webdav_password; restored.save_file().await?; + let restored_clash = IClashTemp::new().await; + let clash_draft = Config::clash().await; + clash_draft.edit_draft(|d| { + *d = restored_clash.clone(); + }); + clash_draft.apply(); + + let restored_profiles = IProfiles::new().await; + let profiles_draft = Config::profiles().await; + profiles_draft.edit_draft(|d| { + *d = restored_profiles.clone(); + }); + profiles_draft.apply(); + let verge_draft = Config::verge().await; verge_draft.edit_draft(|d| { *d = restored.clone();