From 08f97e9e29a151d04adfaf5955e5116725c2de5d Mon Sep 17 00:00:00 2001 From: bruno Date: Sun, 26 Jul 2026 22:08:20 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20s=C3=A9parer=20vaults=20et=20dirs=20dan?= =?UTF-8?q?s=20la=20config=20=E2=80=94=20type=20VAULT=20vs=20DIR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AppConfig: ajout dirs: Vec distinct de vaults: Vec - spawn_backend: passe VAULT_N_* et DIR_N_* séparément (backend les supporte déjà) - Config par défaut: 'Bruno' → %USERPROFILE% (type DIR), 'Obsidian' → voute_obsidian (type VAULT) - Commandes: add_dir, remove_dir, list_dirs --- desktop/src/main.rs | 50 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 4 deletions(-) diff --git a/desktop/src/main.rs b/desktop/src/main.rs index c48d542..1d29ca5 100644 --- a/desktop/src/main.rs +++ b/desktop/src/main.rs @@ -22,10 +22,17 @@ struct VaultConfig { path: String, } +#[derive(Debug, Serialize, Deserialize, Clone)] +struct DirConfig { + name: String, + path: String, +} + #[derive(Debug, Serialize, Deserialize, Clone)] struct AppConfig { vault_path: Option, vaults: Vec, + dirs: Vec, window_x: Option, window_y: Option, window_width: Option, @@ -37,6 +44,7 @@ impl Default for AppConfig { Self { vault_path: None, vaults: Vec::new(), + dirs: Vec::new(), window_x: None, window_y: None, window_width: Some(1200.0), @@ -135,13 +143,18 @@ fn spawn_backend(exe_dir: &PathBuf) -> Result { cmd.current_dir(&data_dir) .env("PYTHONPATH", exe_dir); - // Pass vault config as env vars (VAULT_1_NAME, VAULT_1_PATH, etc.) + // Pass vault config as env vars (VAULT_N_NAME, VAULT_N_PATH, DIR_N_NAME, DIR_N_PATH) let config = load_config(); for (i, vault) in config.vaults.iter().enumerate() { let n = i + 1; cmd.env(format!("VAULT_{}_NAME", n), &vault.name); cmd.env(format!("VAULT_{}_PATH", n), &vault.path); } + for (i, dir) in config.dirs.iter().enumerate() { + let n = i + 1; + cmd.env(format!("DIR_{}_NAME", n), &dir.name); + cmd.env(format!("DIR_{}_PATH", n), &dir.path); + } let child = cmd .args([ @@ -278,6 +291,30 @@ fn list_vaults() -> Vec { load_config().vaults } +#[tauri::command] +fn add_dir(name: String, path: String) -> Result<(), String> { + let mut config = load_config(); + config.dirs.retain(|d| d.name != name); + config.dirs.push(DirConfig { name: name.clone(), path }); + save_config(&config); + info!("Dir added: {} — restart backend to apply", name); + Ok(()) +} + +#[tauri::command] +fn remove_dir(name: String) -> Result<(), String> { + let mut config = load_config(); + config.dirs.retain(|d| d.name != name); + save_config(&config); + info!("Dir removed: {} — restart backend to apply", name); + Ok(()) +} + +#[tauri::command] +fn list_dirs() -> Vec { + load_config().dirs +} + #[tauri::command] fn restart_backend(state: tauri::State) -> Result { let mut restarting = state.restarting.lock().map_err(|e| e.to_string())?; @@ -405,11 +442,13 @@ fn main() { } } - config.vaults = vec![ - VaultConfig { - name: "Dossier".to_string(), + config.dirs = vec![ + DirConfig { + name: "Bruno".to_string(), path: userprofile.clone(), }, + ]; + config.vaults = vec![ VaultConfig { name: "Obsidian".to_string(), path: vault_dir.to_string_lossy().to_string(), @@ -469,6 +508,9 @@ fn main() { add_vault, remove_vault, list_vaults, + add_dir, + remove_dir, + list_dirs, ]) .setup(move |app| { // Restore window position/size