mirror of
https://github.com/zulip/zulip.git
synced 2025-11-07 23:43:43 +00:00
Add a watchdog for your laptop waking up that wakes up polling more promptly.
Without this, if you suspend and resume you wait up to 90 seconds for long polling to retry. (imported from commit 5e964c357f395d30107af5b2c934949058c0d3a8)
This commit is contained in:
@@ -445,8 +445,10 @@ function add_messages(data) {
|
||||
update_autocomplete();
|
||||
}
|
||||
|
||||
var get_updates_xhr;
|
||||
var get_updates_timeout;
|
||||
function get_updates() {
|
||||
$.ajax({
|
||||
get_updates_xhr = $.ajax({
|
||||
type: 'POST',
|
||||
url: 'get_updates',
|
||||
data: received,
|
||||
@@ -457,7 +459,7 @@ function get_updates() {
|
||||
$('#connection-error').hide();
|
||||
|
||||
add_messages(data);
|
||||
setTimeout(get_updates, 0);
|
||||
get_updates_timeout = setTimeout(get_updates, 0);
|
||||
},
|
||||
error: function (xhr, error_type, exn) {
|
||||
if (error_type === 'timeout') {
|
||||
@@ -475,13 +477,27 @@ function get_updates() {
|
||||
}
|
||||
|
||||
var retry_sec = Math.min(90, Math.exp(received.failures/2));
|
||||
setTimeout(get_updates, retry_sec*1000);
|
||||
get_updates_timeout = setTimeout(get_updates, retry_sec*1000);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(get_updates);
|
||||
|
||||
var watchdog_time = $.now();
|
||||
setInterval(function() {
|
||||
var new_time = $.now();
|
||||
if ((new_time - watchdog_time) > 20000) { // 20 seconds.
|
||||
// Our app's JS wasn't running (the machine was probably
|
||||
// asleep). Now that we're running again, immediately poll for
|
||||
// new updates.
|
||||
get_updates_xhr.abort();
|
||||
clearTimeout(get_updates_timeout);
|
||||
get_updates();
|
||||
}
|
||||
watchdog_time = new_time;
|
||||
}, 5000);
|
||||
|
||||
function at_top_of_viewport() {
|
||||
return ($(window).scrollTop() === 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user