From 14c3874eb843a0563a7a7b9c78787cd5dfb1fc15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=95=E6=9F=8F=E9=9D=92?= Date: Thu, 4 Jun 2026 20:07:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(overview):=20port=20=E5=87=AD=E6=8D=AE?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=90=8E=E7=8A=B6=E6=80=81=E4=B8=8D=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E4=BF=AE=E5=A4=8D=E5=88=B0=20beta=20(#573)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit issue #532/#573:在 Settings 填写/更新凭据但不切换提供商时,Overview 页 原有的 useEffect 不会重跑,asrConfigured 仍停留在「未配置」。 该修复曾随 #538 合入 main,但被 beta→main 合并覆盖,beta(开发主分支)上缺失, 导致用户(如 Ubuntu 24.04)配好火山引擎 ASR 后界面仍显示「未配置」。 - commands.rs: set_credential 保存/删除成功后 emit "credentials:changed" - Overview.tsx: 监听该事件调用 refreshCredentials()(复用 credentialsRequestSeq 防竞态, 比 #538 原版裸 getCredentials() 更稳) --- openless-all/app/src-tauri/src/commands.rs | 9 +++++-- openless-all/app/src/pages/Overview.tsx | 28 ++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/openless-all/app/src-tauri/src/commands.rs b/openless-all/app/src-tauri/src/commands.rs index 10deede9..80d0fee1 100644 --- a/openless-all/app/src-tauri/src/commands.rs +++ b/openless-all/app/src-tauri/src/commands.rs @@ -783,10 +783,15 @@ pub fn set_credential(window: Window, account: String, value: String) -> Result< ensure_main_window(&window)?; let acc = parse_account(&account)?; if value.is_empty() { - CredentialsVault::remove(acc).map_err(|e| e.to_string()) + CredentialsVault::remove(acc).map_err(|e| e.to_string())?; } else { - CredentialsVault::set(acc, &value).map_err(|e| e.to_string()) + CredentialsVault::set(acc, &value).map_err(|e| e.to_string())?; } + // 通知前端凭据已变更(如 Overview 页需要刷新 asrConfigured 状态)。 + // issue #532 / #573:在 Settings 填写凭据但不切换提供商时,Overview 不会重拉状态, + // 仍显示「未配置」。该修复曾随 #538 合入 main,但被 beta→main 合并覆盖,beta 上缺失。 + let _ = window.emit("credentials:changed", ()); + Ok(()) } #[tauri::command] diff --git a/openless-all/app/src/pages/Overview.tsx b/openless-all/app/src/pages/Overview.tsx index 609fbe47..9c43e3f1 100644 --- a/openless-all/app/src/pages/Overview.tsx +++ b/openless-all/app/src/pages/Overview.tsx @@ -101,6 +101,34 @@ export function Overview({ onOpenHistory }: OverviewProps) { refreshCredentials(); }, [refreshCredentials, prefs?.activeAsrProvider, prefs?.activeLlmProvider]); + // 凭据被保存后重新拉取状态(issue #532 / #573:在 Settings 中填写/更新凭据 + // 但不切换提供商时,上面的 useEffect 不会重跑,导致概览页的状态仍停留在「未配置」)。 + // 复用 refreshCredentials() 以带上 credentialsRequestSeq 防竞态。 + useEffect(() => { + let cancelled = false; + let unlisten: (() => void) | undefined; + (async () => { + try { + const { listen } = await import('@tauri-apps/api/event'); + const handle = await listen('credentials:changed', () => { + if (cancelled) return; + refreshCredentials(); + }); + if (cancelled) { + handle(); + } else { + unlisten = handle; + } + } catch { + // browser dev mock — 没有 Tauri event bridge + } + })(); + return () => { + cancelled = true; + unlisten?.(); + }; + }, [refreshCredentials]); + const metrics = useMemo(() => { const today = new Date(); today.setHours(0, 0, 0, 0);