From 2a5d29cdb2ca5f4828fe32643a7a79202ad50ff4 Mon Sep 17 00:00:00 2001 From: Tunglies <77394545+Tunglies@users.noreply.github.com> Date: Mon, 29 Jun 2026 05:19:38 +0800 Subject: [PATCH] fix: defer runtime config init until after window --- src-tauri/src/config/config.rs | 9 +++++++++ src-tauri/src/utils/resolve/mod.rs | 16 +++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/config/config.rs b/src-tauri/src/config/config.rs index 448f2dfeb..9c147ac6e 100644 --- a/src-tauri/src/config/config.rs +++ b/src-tauri/src/config/config.rs @@ -63,6 +63,11 @@ impl Config { /// 初始化订阅 pub async fn init_config() -> Result<()> { + Self::init_config_before_window().await?; + Self::init_runtime_config().await + } + + pub async fn init_config_before_window() -> Result<()> { Self::ensure_default_profile_items().await?; let verge = Self::verge().await.latest_arc(); @@ -85,6 +90,10 @@ impl Config { logging_error!(Type::Core, verge_data.save_file().await); } + Ok(()) + } + + pub async fn init_runtime_config() -> Result<()> { let validation_result = Self::generate_and_validate().await?; if let Some((msg_type, msg_content)) = validation_result { diff --git a/src-tauri/src/utils/resolve/mod.rs b/src-tauri/src/utils/resolve/mod.rs index a05f1bc56..515f59d21 100644 --- a/src-tauri/src/utils/resolve/mod.rs +++ b/src-tauri/src/utils/resolve/mod.rs @@ -53,9 +53,12 @@ pub fn resolve_setup_async() { #[cfg(target_os = "macos")] resolve_dock_show().await; init_startup_script().await; - init_verge_config().await; - Config::verify_config_initialization().await; + let config_initialized = init_verge_config_before_window().await; init_window().await; + if config_initialized { + init_verge_config().await; + } + Config::verify_config_initialization().await; let core_init = AsyncHandler::spawn(|| async { init_service_manager().await; @@ -172,7 +175,14 @@ pub(super) async fn init_tray() { } pub(super) async fn init_verge_config() { - logging_error!(Type::Setup, Config::init_config().await); + logging_error!(Type::Setup, Config::init_runtime_config().await); +} + +pub(super) async fn init_verge_config_before_window() -> bool { + let result = Config::init_config_before_window().await; + let success = result.is_ok(); + logging_error!(Type::Setup, result); + success } pub(super) async fn init_service_manager() {