From 082cb0327d1ba972ce1c3fe699ccab4dfd2b1044 Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 26 Feb 2026 18:08:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20enforce=20OMO=20=E2=86=94=20OMO=20Slim?= =?UTF-8?q?=20cross-category=20mutual=20exclusion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When activating an OMO provider, deactivate all OMO Slim providers in the same transaction and delete the Slim config file, and vice versa. This prevents both plugin variants from being active simultaneously. --- src-tauri/src/database/dao/providers.rs | 13 +++++++++++++ src-tauri/src/services/provider/mod.rs | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/src-tauri/src/database/dao/providers.rs b/src-tauri/src/database/dao/providers.rs index 4f4259e95..bf0a44361 100644 --- a/src-tauri/src/database/dao/providers.rs +++ b/src-tauri/src/database/dao/providers.rs @@ -375,6 +375,19 @@ impl Database { params![app_type, category], ) .map_err(|e| AppError::Database(e.to_string()))?; + // OMO ↔ OMO Slim mutually exclusive: deactivate the opposite category + let opposite = match category { + "omo" => Some("omo-slim"), + "omo-slim" => Some("omo"), + _ => None, + }; + if let Some(opp) = opposite { + tx.execute( + "UPDATE providers SET is_current = 0 WHERE app_type = ?1 AND category = ?2", + params![app_type, opp], + ) + .map_err(|e| AppError::Database(e.to_string()))?; + } let updated = tx .execute( "UPDATE providers SET is_current = 1 WHERE id = ?1 AND app_type = ?2 AND category = ?3", diff --git a/src-tauri/src/services/provider/mod.rs b/src-tauri/src/services/provider/mod.rs index fdd9daa51..bde2dd925 100644 --- a/src-tauri/src/services/provider/mod.rs +++ b/src-tauri/src/services/provider/mod.rs @@ -513,6 +513,8 @@ impl ProviderService { state, &crate::services::omo::STANDARD, )?; + // OMO ↔ OMO Slim mutually exclusive: remove Slim config + let _ = crate::services::OmoService::delete_config_file(&crate::services::omo::SLIM); return Ok(SwitchResult::default()); } @@ -522,6 +524,10 @@ impl ProviderService { .db .set_omo_provider_current(app_type.as_str(), id, "omo-slim")?; crate::services::OmoService::write_config_to_file(state, &crate::services::omo::SLIM)?; + // OMO ↔ OMO Slim mutually exclusive: remove Standard config + let _ = crate::services::OmoService::delete_config_file( + &crate::services::omo::STANDARD, + ); return Ok(SwitchResult::default()); }