From dbd97d862f50bb11b309c59754095b639b4d7021 Mon Sep 17 00:00:00 2001
From: lzt404 <2596933790@qq.com>
Date: Fri, 14 Aug 2026 01:37:35 +0800
Subject: [PATCH] fix(core): show processing state during automatic startup
- track automatic core startup in shared runtime state
- expose the starting state through CoreStatus
- disable core controls while startup is in progress
- clear the processing state after startup succeeds or fails
- add regression tests for startup state handling
---
src-tauri/src/core_runtime.rs | 6 +++++-
src-tauri/src/main.rs | 33 +++++++++++++++++++++++++++--
src-tauri/src/tests/core_runtime.rs | 8 +++++++
src-tauri/src/tests/platform.rs | 1 +
src/coreRuntime.tsx | 1 +
src/pages/Kernel.tsx | 15 +++++++------
6 files changed, 54 insertions(+), 10 deletions(-)
diff --git a/src-tauri/src/core_runtime.rs b/src-tauri/src/core_runtime.rs
index 77c80a5..fa79a91 100644
--- a/src-tauri/src/core_runtime.rs
+++ b/src-tauri/src/core_runtime.rs
@@ -802,6 +802,7 @@ pub(crate) fn current_core_status(
let install_dir = core_install_dir()?;
let binary_path = find_core_binary(&install_dir);
let installed = binary_path.is_some();
+ let starting = process_state.is_some_and(CoreProcessState::is_starting);
let managed_pid = process_state.and_then(|state| state.managed_pid());
let management_port_open = management_port.map(is_management_port_open);
let process_id = match managed_pid {
@@ -814,7 +815,9 @@ pub(crate) fn current_core_status(
let running = process_id.is_some() && management_port_open.unwrap_or(true);
let current_version = read_core_metadata(&install_dir).map(|metadata| metadata.version);
- let message = if !installed {
+ let message = if starting {
+ "CPA 内核正在启动".to_string()
+ } else if !installed {
"未安装 CPA 内核,请先安装最新版".to_string()
} else if running {
"CPA 内核正在运行".to_string()
@@ -825,6 +828,7 @@ pub(crate) fn current_core_status(
Ok(CoreStatus {
installed,
running,
+ starting,
managed: managed_pid.is_some(),
process_id,
current_version,
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index d1a6962..d618cab 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -39,7 +39,6 @@ use objc2::MainThreadMarker;
use objc2_app_kit::NSEvent;
use serde::{Deserialize, Serialize};
use sha2::{Digest, Sha256};
-#[cfg(target_os = "windows")]
use std::sync::atomic::{AtomicBool, Ordering};
#[cfg(target_os = "macos")]
use std::sync::Arc;
@@ -276,6 +275,7 @@ struct AppUpdateInner {
#[derive(Default)]
struct CoreProcessState {
child: Mutex