diff --git a/src-tauri/src/app_update.rs b/src-tauri/src/app_update.rs index d2d4208..52ebe3d 100644 --- a/src-tauri/src/app_update.rs +++ b/src-tauri/src/app_update.rs @@ -130,6 +130,7 @@ pub(crate) async fn check_app_update( state: tauri::State<'_, AppUpdateState>, gui_config_state: tauri::State<'_, GuiConfigState>, ) -> Result { + let _detection_guard = VERSION_SOURCE_DETECTION_LOCK.lock().await; let config = gui_config_state.snapshot()?; let proxy_url = config.proxy_url.clone(); let client = build_http_client_with_proxy( diff --git a/src-tauri/src/core_runtime.rs b/src-tauri/src/core_runtime.rs index 3e8b646..99d9da5 100644 --- a/src-tauri/src/core_runtime.rs +++ b/src-tauri/src/core_runtime.rs @@ -5,6 +5,7 @@ pub(crate) async fn check_latest_core( app: tauri::AppHandle, gui_config_state: tauri::State<'_, GuiConfigState>, ) -> Result { + let _detection_guard = VERSION_SOURCE_DETECTION_LOCK.lock().await; let platform = current_core_platform()?; let config = gui_config_state.snapshot()?; let proxy_url = config.proxy_url.clone(); diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 14e79a5..84bc7d4 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -111,6 +111,7 @@ const CORE_INSTALL_PROGRESS_EVENT: &str = "core-install-progress"; const CORE_STATUS_EVENT: &str = "core-status-changed"; const CONFIG_FILES_CHANGED_EVENT: &str = "config-files-changed"; const VERSION_DOWNLOAD_SOURCE_CHANGED_EVENT: &str = "version-download-source-changed"; +static VERSION_SOURCE_DETECTION_LOCK: tokio::sync::Mutex<()> = tokio::sync::Mutex::const_new(()); #[cfg(target_os = "windows")] const WINDOWS_CLOSE_REQUEST_EVENT: &str = "windows-close-requested"; const CORE_METADATA_FILE: &str = "cpa-gui-meta.json"; diff --git a/src/pages/VersionManagementPage.tsx b/src/pages/VersionManagementPage.tsx index 1664187..732f4e6 100644 --- a/src/pages/VersionManagementPage.tsx +++ b/src/pages/VersionManagementPage.tsx @@ -245,7 +245,9 @@ export function VersionManagementPage() { cachedLatestError = ''; setLatest(null); showToast(t('kernel.versions.gitcodeSwitchSuccess'), 'success'); - await Promise.allSettled([checkAppUpdate(), checkLatest(true)]); + setVersionSourceSaving(false); + await checkAppUpdate(); + await checkLatest(true); } catch (error) { await loadVersionSourceSettings(); setVersionSourceError(t('kernel.versions.gitcodeSaveFailed', { error: String(error) })); @@ -269,7 +271,9 @@ export function VersionManagementPage() { cachedLatestError = ''; setLatest(null); showToast(t('kernel.versions.customMirrorAdded'), 'success'); - await Promise.allSettled([checkAppUpdate(), checkLatest(true)]); + setVersionSourceSaving(false); + await checkAppUpdate(); + await checkLatest(true); } catch (error) { const message = t('kernel.versions.customMirrorAddFailed', { error: String(error) }); setVersionSourceError(message); @@ -289,8 +293,10 @@ export function VersionManagementPage() { }); setVersionSource(settings); showToast(t('kernel.versions.customMirrorRemoved'), 'success'); + setVersionSourceSaving(false); if (wasSelected) { - await Promise.allSettled([checkAppUpdate(), checkLatest(true)]); + await checkAppUpdate(); + await checkLatest(true); } } catch (error) { const message = t('kernel.versions.customMirrorRemoveFailed', { error: String(error) }); @@ -618,7 +624,7 @@ export function VersionManagementPage() {