Skip to content

Commit 9c27ddc

Browse files
committed
[IMP] server: improve reactivity of rebuilds on typing
1 parent 4f0d554 commit 9c27ddc

File tree

3 files changed

+29
-14
lines changed

3 files changed

+29
-14
lines changed

server/src/core/odoo.rs

+1-9
Original file line numberDiff line numberDiff line change
@@ -1425,15 +1425,7 @@ impl Odoo {
14251425

14261426
pub fn update_file_index(session: &mut SessionInfo, path: PathBuf, is_save: bool, is_open: bool, force_delay: bool) {
14271427
if path.extension().is_some() && path.extension().unwrap() == "py" {
1428-
if !force_delay && (is_open || (is_save && session.sync_odoo.config.refresh_mode == RefreshMode::OnSave)) {
1429-
let _ = SyncOdoo::_unload_path(session, &path, false);
1430-
Odoo::search_symbols_to_rebuild(session, &path.sanitize());
1431-
SyncOdoo::process_rebuilds(session);
1432-
} else {
1433-
if force_delay || session.sync_odoo.config.refresh_mode == RefreshMode::Adaptive {
1434-
SessionInfo::request_update_file_index(session, &path, force_delay);
1435-
}
1436-
}
1428+
SessionInfo::request_update_file_index(session, &path, is_save, force_delay);
14371429
}
14381430
}
14391431

server/src/server.rs

+1
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,7 @@ impl Server {
468468
if DEBUG_THREADS {
469469
info!("Sending notification to main thread : {}", n.method);
470470
}
471+
self.interrupt_rebuild_boolean.store(true, std::sync::atomic::Ordering::SeqCst);
471472
self.sender_s_to_main.send(Message::Notification(n)).unwrap();
472473
}
473474
_ => {

server/src/threads.rs

+27-5
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,33 @@ impl <'a> SessionInfo<'a> {
8181
}
8282
}
8383

84-
pub fn request_update_file_index(session: &mut SessionInfo, path: &PathBuf, forced_delay: bool) {
85-
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) {
86-
let _ = SyncOdoo::_unload_path(session, &path, false);
87-
Odoo::search_symbols_to_rebuild(session, &path.sanitize());
88-
SyncOdoo::process_rebuilds(session);
84+
/*
85+
* Request an update of the file in the index.
86+
* path: path of the file
87+
* process_now: indicate if the current action is due to a save action
88+
* forced_delay: indicate that we want to force a delay
89+
*/
90+
pub fn request_update_file_index(session: &mut SessionInfo, path: &PathBuf, is_save: bool, forced_delay: bool) {
91+
if (!forced_delay || session.delayed_process_sender.is_none()) && !session.sync_odoo.need_rebuild {
92+
if session.sync_odoo.config.refresh_mode == RefreshMode::OnSave {
93+
if is_save {
94+
let _ = SyncOdoo::_unload_path(session, &path, false);
95+
Odoo::search_symbols_to_rebuild(session, &path.sanitize());
96+
SyncOdoo::process_rebuilds(session);
97+
}
98+
return;
99+
}
100+
if session.sync_odoo.config.refresh_mode == RefreshMode::Adaptive &&
101+
session.sync_odoo.get_rebuild_queue_size() < 10 {
102+
let _ = SyncOdoo::_unload_path(session, &path, false);
103+
Odoo::search_symbols_to_rebuild(session, &path.sanitize());
104+
SyncOdoo::process_rebuilds(session);
105+
} else {
106+
if forced_delay {
107+
session.sync_odoo.watched_file_updates.store(session.sync_odoo.watched_file_updates.load(Ordering::SeqCst) + 1, Ordering::SeqCst);
108+
}
109+
let _ = session.delayed_process_sender.as_ref().unwrap().send(DelayedProcessingMessage::UPDATE_FILE_INDEX(UpdateFileIndexData { path: path.clone(), time: std::time::Instant::now(), forced_delay}));
110+
}
89111
} else {
90112
if forced_delay {
91113
session.sync_odoo.watched_file_updates.store(session.sync_odoo.watched_file_updates.load(Ordering::SeqCst) + 1, Ordering::SeqCst);

0 commit comments

Comments
 (0)