Files
tryton/src/bus.js
T
2018-11-28 10:01:32 +01:00

87 lines
2.5 KiB
JavaScript

/* This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. */
(function() {
'use strict';
Sao.Bus = {};
// Bus Identifier
Sao.Bus.id = Sao.common.uuid4();
Sao.Bus.channels = ['client:' + Sao.Bus.id];
Sao.Bus.listen = function(last_message, wait) {
wait = wait || 1;
var session = Sao.Session.current_session;
if (!session) {
return;
}
var prm = jQuery.ajax({
headers: {
Authorization: 'Session ' + session.get_auth(),
},
contentType: 'application/json',
data: JSON.stringify({
last_message: last_message,
channels: Sao.Bus.channels
}),
dataType: 'json',
url: '/' + session.database + '/bus',
type: 'POST',
timeout: Sao.config.bus_timeout,
});
prm.done(function(response) {
if (Sao.Session.current_session != session) {
return;
}
if (response.message) {
last_message = response.message.message_id;
Sao.Bus.handle(response.message);
}
Sao.Bus.listen(last_message, 1);
});
prm.fail(function(response, status, error) {
if (Sao.Session.current_session != session) {
return;
}
if (error === "timeout") {
Sao.Bus.listen(last_message, 1);
} else if (response.status == 501) {
console.log("Bus not supported");
return;
} else {
window.setTimeout(
Sao.Bus.listen,
Math.min(wait * 1000, Sao.config.bus_timeout),
last_message, wait * 2);
}
});
};
Sao.Bus.handle = function(message) {
var notify = function(message) {
try {
if (Notification.permission != "granted") {
return;
}
} catch (e) {
(console.error || console.log).call(console, e, e.stack);
return;
}
new Notification(message.title, {
body: message.body || '',
});
};
switch (message.type) {
case 'notification':
notify(message);
break;
}
};
}());