From 318b7f645079eec1d28516fcef8edad45d6b6ec7 Mon Sep 17 00:00:00 2001 From: stefiosif Date: Sun, 1 Feb 2026 23:23:27 +0200 Subject: [PATCH] Hold config state from the generated schedule; avoids desync issues when changing configs and re-exporting data without generating new schedule --- src-tauri/src/lib.rs | 15 ++++++++------- src/routes/components/schedule/generate.svelte | 3 +-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 61d1441..7e157aa 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -22,6 +22,7 @@ pub mod workload; struct AppState { schedule: Mutex, tracker: Mutex, + config: Mutex, } /// argument to this must be the rota state including all @@ -34,8 +35,8 @@ fn generate( ) -> Result { let mut schedule = MonthlySchedule::new(); let mut tracker = WorkloadTracker::default(); - let scheduler = - Scheduler::new_with_config(UserConfig::try_from(config).map_err(|e| e.to_string())?); + let config = UserConfig::try_from(config).map_err(|e| e.to_string())?; + let scheduler = Scheduler::new_with_config(config.clone()); scheduler .run(&mut schedule, &mut tracker) @@ -49,21 +50,20 @@ fn generate( let mut internal_schedule = state.schedule.lock().unwrap(); let mut internal_tracker = state.tracker.lock().unwrap(); + let mut internal_config = state.config.lock().unwrap(); *internal_schedule = schedule.clone(); *internal_tracker = tracker.clone(); + *internal_config = config.clone(); Ok(schedule) } #[tauri::command] -fn export(config: UserConfigDTO, state: tauri::State<'_, AppState>) -> Result<(), String> { - let config = UserConfig::try_from(config) - .inspect_err(|e| error!("{e}")) - .map_err(|e| e.to_string())?; - +fn export(state: tauri::State<'_, AppState>) -> Result<(), String> { let schedule = state.schedule.lock().unwrap(); let tracker = state.tracker.lock().unwrap(); + let config = state.config.lock().unwrap(); schedule .export(FileType::Docx, &config, &tracker) @@ -88,6 +88,7 @@ pub fn run() { .manage(AppState { schedule: Mutex::new(MonthlySchedule::new()), tracker: Mutex::new(WorkloadTracker::default()), + config: Mutex::new(UserConfig::default()), }) .plugin( tauri_plugin_log::Builder::new() diff --git a/src/routes/components/schedule/generate.svelte b/src/routes/components/schedule/generate.svelte index 442c88f..38ab18a 100644 --- a/src/routes/components/schedule/generate.svelte +++ b/src/routes/components/schedule/generate.svelte @@ -48,11 +48,10 @@ } async function export_file() { - let config = rota.toDTO(); let schedule = rota.solution; try { - await invoke("export", { config, schedule }); + await invoke("export", { schedule }); } catch (error) { console.error("Error:", error); }