feat: enhance AppConfig loading to merge default providers and set API key

This commit is contained in:
asepharyana
2026-07-12 02:21:08 +07:00
parent c948869d35
commit a98fdb0c7b
2 changed files with 14 additions and 2 deletions
+6
View File
@@ -280,6 +280,12 @@ fn handle_overlay_enter(state: &mut AppStateRest) -> Vec<Action> {
let model = cfg.default_model.clone().unwrap_or_else(|| "claude-opus-4-8".to_string()); let model = cfg.default_model.clone().unwrap_or_else(|| "claude-opus-4-8".to_string());
state.settings.provider = provider.clone(); state.settings.provider = provider.clone();
state.settings.model = model.clone(); state.settings.model = model.clone();
// Set API key from provider's default if not already configured
if state.settings.api_key.is_none() || state.settings.api_key.as_deref() == Some("") {
if let Some(ref key) = cfg.default_api_key {
state.settings.api_key = Some(key.clone());
}
}
let _ = state.settings.save(); let _ = state.settings.save();
state.push_toast(crate::app::state::types::Toast::new( state.push_toast(crate::app::state::types::Toast::new(
crate::app::state::types::ToastKind::Success, crate::app::state::types::ToastKind::Success,
+8 -2
View File
@@ -60,9 +60,15 @@ impl AppConfig {
pub fn load() -> Self { pub fn load() -> Self {
let store = super::store::Store::new(); let store = super::store::Store::new();
let path = store.base_dir.join("app_config.json"); let path = store.base_dir.join("app_config.json");
std::fs::read_to_string(path) let mut cfg: AppConfig = std::fs::read_to_string(path)
.ok() .ok()
.and_then(|s| serde_json::from_str(&s).ok()) .and_then(|s| serde_json::from_str(&s).ok())
.unwrap_or_default() .unwrap_or_default();
// Merge any default providers not present in the loaded config
let defaults = Self::default();
for (name, provider) in defaults.providers {
cfg.providers.entry(name).or_insert(provider);
}
cfg
} }
} }