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()); }