Skip to content
Snippets Groups Projects
Commit 0b581f5a authored by tsm-odoo's avatar tsm-odoo
Browse files

[IMP] bus: throttle update bus presence method


Before this commit, the `updateBusPresence` method could have been
called many times in a row, resulting in many `update_presence` messages
being sent through the socket. This commit solves this issue by throttling
this method in order for it to only be called once in `UPDATE_BUS_PRESENCE_DELAY`
seconds.

closes odoo/odoo#102251

Signed-off-by: default avatarSébastien Theys (seb) <seb@odoo.com>
parent 8a435032
No related branches found
No related tags found
No related merge requests found
......@@ -17,23 +17,26 @@ export const imStatusService = {
start(env, { bus_service, multi_tab, presence }) {
const imStatusModelToIds = {};
let updateBusPresenceTimeout;
const throttledUpdateBusPresence = _.throttle(
function updateBusPresence() {
clearTimeout(updateBusPresenceTimeout);
if (!multi_tab.isOnMainTab()) {
return;
}
const now = new Date().getTime();
bus_service.send("update_presence", {
inactivity_period: now - presence.getLastPresence(),
im_status_ids_by_model: { ...imStatusModelToIds },
});
updateBusPresenceTimeout = browser.setTimeout(throttledUpdateBusPresence, UPDATE_BUS_PRESENCE_DELAY);
},
UPDATE_BUS_PRESENCE_DELAY
);
function updateBusPresence() {
clearTimeout(updateBusPresenceTimeout);
if (!multi_tab.isOnMainTab()) {
return;
}
const now = new Date().getTime();
bus_service.send("update_presence", {
inactivity_period: now - presence.getLastPresence(),
im_status_ids_by_model: { ...imStatusModelToIds },
});
updateBusPresenceTimeout = browser.setTimeout(updateBusPresence, UPDATE_BUS_PRESENCE_DELAY);
}
// wait for im_status model/ids to be registered before starting.
browser.setTimeout(updateBusPresence, 250);
multi_tab.bus.addEventListener('become_main_tab', updateBusPresence);
bus_service.addEventListener('reconnect', updateBusPresence);
browser.setTimeout(throttledUpdateBusPresence, 250);
multi_tab.bus.addEventListener('become_main_tab', throttledUpdateBusPresence);
bus_service.addEventListener('reconnect', throttledUpdateBusPresence);
multi_tab.bus.addEventListener('no_longer_main_tab', () => clearTimeout(updateBusPresenceTimeout));
bus_service.addEventListener('disconnect', () => clearTimeout(updateBusPresenceTimeout));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment