feat: config vaults desktop — VaultConfig, add_vault, remove_vault, list_vaults
CI / lint (push) Successful in 24s
CI / security (push) Successful in 13s
CI / test (push) Successful in 29s
CI / build (push) Successful in 12s
CI / e2e (push) Failing after 14s
Desktop Build / build-windows (push) Has been cancelled
Desktop Build / build-linux (push) Has been cancelled

- AppConfig: nouveau champ vaults: Vec<VaultConfig> (name + path)
- spawn_backend: passe VAULT_N_NAME / VAULT_N_PATH en variables d'env
- Commandes Tauri: add_vault, remove_vault, list_vaults
- Nécessite restart_backend() pour appliquer les changements
This commit is contained in:
2026-07-26 17:32:32 -04:00
parent 85e2912d62
commit 73d798015d
+49 -3
View File
@@ -16,9 +16,16 @@ struct BackendProcess {
restarting: Mutex<bool>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
struct VaultConfig {
name: String,
path: String,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
struct AppConfig {
vault_path: Option<String>,
vaults: Vec<VaultConfig>,
window_x: Option<f64>,
window_y: Option<f64>,
window_width: Option<f64>,
@@ -29,6 +36,7 @@ impl Default for AppConfig {
fn default() -> Self {
Self {
vault_path: None,
vaults: Vec::new(),
window_x: None,
window_y: None,
window_width: Some(1200.0),
@@ -123,9 +131,19 @@ fn spawn_backend(exe_dir: &PathBuf) -> Result<Child, String> {
let data_dir = app_data_dir();
let _ = fs::create_dir_all(data_dir.join("data"));
let child = Command::new(&python)
.current_dir(&data_dir)
.env("PYTHONPATH", exe_dir)
let mut cmd = Command::new(&python);
cmd.current_dir(&data_dir)
.env("PYTHONPATH", exe_dir);
// Pass vault config as env vars (VAULT_1_NAME, VAULT_1_PATH, etc.)
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);
}
let child = cmd
.args([
"-m", "uvicorn",
"backend.main:app",
@@ -235,6 +253,31 @@ fn get_system_theme(app: tauri::AppHandle) -> String {
}
}
#[tauri::command]
fn add_vault(name: String, path: String) -> Result<(), String> {
let mut config = load_config();
// Avoid duplicates
config.vaults.retain(|v| v.name != name);
config.vaults.push(VaultConfig { name: name.clone(), path });
save_config(&config);
info!("Vault added: {} — restart backend to apply", name);
Ok(())
}
#[tauri::command]
fn remove_vault(name: String) -> Result<(), String> {
let mut config = load_config();
config.vaults.retain(|v| v.name != name);
save_config(&config);
info!("Vault removed: {} — restart backend to apply", name);
Ok(())
}
#[tauri::command]
fn list_vaults() -> Vec<VaultConfig> {
load_config().vaults
}
#[tauri::command]
fn restart_backend(state: tauri::State<BackendProcess>) -> Result<String, String> {
let mut restarting = state.restarting.lock().map_err(|e| e.to_string())?;
@@ -393,6 +436,9 @@ fn main() {
check_backend_health,
save_window_state,
get_window_state,
add_vault,
remove_vault,
list_vaults,
])
.setup(move |app| {
// Restore window position/size