From 203301075f262f607b06bc8937958d6a90036c54 Mon Sep 17 00:00:00 2001 From: PINKIIILQWQ Date: Fri, 29 May 2026 16:46:07 +0800 Subject: [PATCH 1/2] fix: sync preferences.json when switching ASR provider --- openless-all/app/src-tauri/src/commands.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/openless-all/app/src-tauri/src/commands.rs b/openless-all/app/src-tauri/src/commands.rs index 524ee5c8..53cf2c4f 100644 --- a/openless-all/app/src-tauri/src/commands.rs +++ b/openless-all/app/src-tauri/src/commands.rs @@ -807,6 +807,12 @@ pub async fn set_active_asr_provider( return Ok(()); } CredentialsVault::set_active_asr_provider(&provider).map_err(|e| e.to_string())?; + // 同步更新偏好文件,确保 Keychain 和 preferences.json 不同步。 + // 前端 onAsrProviderChange 也会调 updatePrefs(),但那是另一条异步路径; + // 本行保证无论前端是否调了 updatePrefs,文件始终与 Keychain 一致。 + let mut prefs = coord.read_settings(); + prefs.active_asr_provider = provider.clone(); + let _ = coord.write_settings(prefs); let release_plan = local_asr_release_plan_for_provider(&provider); if provider == crate::asr::local::PROVIDER_ID { // 切到本地 ASR → 后台预加载模型,下次按 hotkey 时不必等数秒。 From 3c9612e456948e8752cc9702a25713fcd1242604 Mon Sep 17 00:00:00 2001 From: Pink Date: Sat, 30 May 2026 20:13:00 +0800 Subject: [PATCH 2/2] fix: sync preferences.json when switching LLM provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same pattern as the ASR provider fix — set_active_llm_provider now also syncs to preferences.json immediately after Keychain write, so both stores stay consistent regardless of the frontend async path. --- openless-all/app/src-tauri/src/commands.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/openless-all/app/src-tauri/src/commands.rs b/openless-all/app/src-tauri/src/commands.rs index 53cf2c4f..edb33041 100644 --- a/openless-all/app/src-tauri/src/commands.rs +++ b/openless-all/app/src-tauri/src/commands.rs @@ -812,7 +812,9 @@ pub async fn set_active_asr_provider( // 本行保证无论前端是否调了 updatePrefs,文件始终与 Keychain 一致。 let mut prefs = coord.read_settings(); prefs.active_asr_provider = provider.clone(); - let _ = coord.write_settings(prefs); + if let Err(e) = coord.write_settings(prefs) { + log::warn!("[set_active_asr_provider] sync preferences.json failed: {e}"); + } let release_plan = local_asr_release_plan_for_provider(&provider); if provider == crate::asr::local::PROVIDER_ID { // 切到本地 ASR → 后台预加载模型,下次按 hotkey 时不必等数秒。 @@ -830,8 +832,17 @@ pub async fn set_active_asr_provider( } #[tauri::command] -pub fn set_active_llm_provider(provider: String) -> Result<(), String> { - CredentialsVault::set_active_llm_provider(&provider).map_err(|e| e.to_string()) +pub fn set_active_llm_provider( + coord: CoordinatorState<'_>, + provider: String, +) -> Result<(), String> { + CredentialsVault::set_active_llm_provider(&provider).map_err(|e| e.to_string())?; + let mut prefs = coord.read_settings(); + prefs.active_llm_provider = provider.clone(); + if let Err(e) = coord.write_settings(prefs) { + log::warn!("[set_active_llm_provider] sync preferences.json failed: {e}"); + } + Ok(()) } /// 读出某个账号的实际值(用于设置页预填表单)。