diff --git a/server/src/core/odoo.rs b/server/src/core/odoo.rs index d04b1950..cce1f818 100644 --- a/server/src/core/odoo.rs +++ b/server/src/core/odoo.rs @@ -1421,15 +1421,7 @@ impl Odoo { pub fn update_file_index(session: &mut SessionInfo, path: PathBuf, is_save: bool, is_open: bool, force_delay: bool) { if path.extension().is_some() && path.extension().unwrap() == "py" { - if !force_delay && (is_open || (is_save && session.sync_odoo.config.refresh_mode == RefreshMode::OnSave)) { - let _ = SyncOdoo::_unload_path(session, &path, false); - Odoo::search_symbols_to_rebuild(session, &path.sanitize()); - SyncOdoo::process_rebuilds(session); - } else { - if force_delay || session.sync_odoo.config.refresh_mode == RefreshMode::Adaptive { - SessionInfo::request_update_file_index(session, &path, force_delay); - } - } + SessionInfo::request_update_file_index(session, &path, is_save, force_delay); } } diff --git a/server/src/server.rs b/server/src/server.rs index 4b111fe9..f1be9de2 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -468,6 +468,7 @@ impl Server { if DEBUG_THREADS { info!("Sending notification to main thread : {}", n.method); } + self.interrupt_rebuild_boolean.store(true, std::sync::atomic::Ordering::SeqCst); self.sender_s_to_main.send(Message::Notification(n)).unwrap(); } _ => { diff --git a/server/src/threads.rs b/server/src/threads.rs index 043c5d11..adc6b73e 100644 --- a/server/src/threads.rs +++ b/server/src/threads.rs @@ -79,11 +79,33 @@ impl <'a> SessionInfo<'a> { } } - pub fn request_update_file_index(session: &mut SessionInfo, path: &PathBuf, forced_delay: bool) { - if !forced_delay && (session.delayed_process_sender.is_none() || !session.sync_odoo.need_rebuild && session.sync_odoo.config.refresh_mode == RefreshMode::Adaptive && session.sync_odoo.get_rebuild_queue_size() < 10) { - let _ = SyncOdoo::_unload_path(session, &path, false); - Odoo::search_symbols_to_rebuild(session, &path.sanitize()); - SyncOdoo::process_rebuilds(session); + /* + * Request an update of the file in the index. + * path: path of the file + * process_now: indicate if the current action is due to a save action + * forced_delay: indicate that we want to force a delay + */ + pub fn request_update_file_index(session: &mut SessionInfo, path: &PathBuf, is_save: bool, forced_delay: bool) { + if (!forced_delay || session.delayed_process_sender.is_none()) && !session.sync_odoo.need_rebuild { + if session.sync_odoo.config.refresh_mode == RefreshMode::OnSave { + if is_save { + let _ = SyncOdoo::_unload_path(session, &path, false); + Odoo::search_symbols_to_rebuild(session, &path.sanitize()); + SyncOdoo::process_rebuilds(session); + } + return; + } + if session.sync_odoo.config.refresh_mode == RefreshMode::Adaptive && + session.sync_odoo.get_rebuild_queue_size() < 10 { + let _ = SyncOdoo::_unload_path(session, &path, false); + Odoo::search_symbols_to_rebuild(session, &path.sanitize()); + SyncOdoo::process_rebuilds(session); + } else { + if forced_delay { + session.sync_odoo.watched_file_updates.store(session.sync_odoo.watched_file_updates.load(Ordering::SeqCst) + 1, Ordering::SeqCst); + } + let _ = session.delayed_process_sender.as_ref().unwrap().send(DelayedProcessingMessage::UPDATE_FILE_INDEX(UpdateFileIndexData { path: path.clone(), time: std::time::Instant::now(), forced_delay})); + } } else { if forced_delay { session.sync_odoo.watched_file_updates.store(session.sync_odoo.watched_file_updates.load(Ordering::SeqCst) + 1, Ordering::SeqCst);