mirror of
https://github.com/zulip/zulip.git
synced 2025-11-07 23:43:43 +00:00
Fix client continuously calling get_updates when a reload is pending.
(imported from commit 2c29c8b892e7843f4d75178cc683bf48f7a5cdf5)
This commit is contained in:
@@ -5,9 +5,18 @@ var people_hash = {};
|
|||||||
|
|
||||||
var selected_message_class = 'selected_message';
|
var selected_message_class = 'selected_message';
|
||||||
var viewport = $(window);
|
var viewport = $(window);
|
||||||
var app_needs_reload = false;
|
|
||||||
var reloading_app = false;
|
var reloading_app = false;
|
||||||
|
|
||||||
|
var selected_message_id = -1; /* to be filled in on document.ready */
|
||||||
|
var selected_message; // = get_message_row(selected_message_id)
|
||||||
|
var received = {
|
||||||
|
first: -1,
|
||||||
|
last: -1,
|
||||||
|
failures: 0,
|
||||||
|
server_generation: -1, /* to be filled in on document.ready */
|
||||||
|
reload_pending: false
|
||||||
|
};
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
var i;
|
var i;
|
||||||
var send_status = $('#send-status');
|
var send_status = $('#send-status');
|
||||||
@@ -21,13 +30,13 @@ $(function () {
|
|||||||
send_status.hide();
|
send_status.hide();
|
||||||
hide_compose();
|
hide_compose();
|
||||||
buttons.removeAttr('disabled');
|
buttons.removeAttr('disabled');
|
||||||
if (app_needs_reload) {
|
if (received.reload_pending) {
|
||||||
reload_app();
|
reload_app();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
error: function (xhr, error_type) {
|
error: function (xhr, error_type) {
|
||||||
if (error_type !== 'timeout' && app_needs_reload) {
|
if (error_type !== 'timeout' && received.reload_pending) {
|
||||||
// The error might be due to the server changing
|
// The error might be due to the server changing
|
||||||
reload_app_preserving_compose(true);
|
reload_app_preserving_compose(true);
|
||||||
return;
|
return;
|
||||||
@@ -63,15 +72,6 @@ $(function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
var selected_message_id = -1; /* to be filled in on document.ready */
|
|
||||||
var selected_message; // = get_message_row(selected_message_id)
|
|
||||||
var received = {
|
|
||||||
first: -1,
|
|
||||||
last: -1,
|
|
||||||
failures: 0,
|
|
||||||
server_generation: -1 /* to be filled in on document.ready */
|
|
||||||
};
|
|
||||||
|
|
||||||
$(function () { received.server_generation = server_generation; });
|
$(function () { received.server_generation = server_generation; });
|
||||||
|
|
||||||
// The "message groups", i.e. blocks of messages collapsed by recipient.
|
// The "message groups", i.e. blocks of messages collapsed by recipient.
|
||||||
@@ -600,11 +600,8 @@ function get_updates() {
|
|||||||
received.failures = 0;
|
received.failures = 0;
|
||||||
$('#connection-error').hide();
|
$('#connection-error').hide();
|
||||||
|
|
||||||
if (data.server_generation > server_generation && !app_needs_reload) {
|
if (data.server_generation !== received.server_generation) {
|
||||||
// We need to set server_generation here to avoid
|
received.reload_pending = true;
|
||||||
// pounding the server with get_updates requests.
|
|
||||||
server_generation = data.server_generation;
|
|
||||||
app_needs_reload = true;
|
|
||||||
reload_app();
|
reload_app();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -229,6 +229,7 @@ def return_messages_immediately(request, handler, user_profile, **kwargs):
|
|||||||
last = request.POST.get("last")
|
last = request.POST.get("last")
|
||||||
failures = request.POST.get("failures")
|
failures = request.POST.get("failures")
|
||||||
client_server_generation = request.POST.get("server_generation")
|
client_server_generation = request.POST.get("server_generation")
|
||||||
|
client_reload_pending = request.POST.get("reload_pending")
|
||||||
if first is None or last is None:
|
if first is None or last is None:
|
||||||
# When an API user is first querying the server to subscribe,
|
# When an API user is first querying the server to subscribe,
|
||||||
# there's no reason to reply immediately.
|
# there's no reason to reply immediately.
|
||||||
@@ -271,7 +272,9 @@ def return_messages_immediately(request, handler, user_profile, **kwargs):
|
|||||||
handler.finish(format_updates_response([], where="bottom", **kwargs))
|
handler.finish(format_updates_response([], where="bottom", **kwargs))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if client_server_generation is not None and int(client_server_generation) != SERVER_GENERATION:
|
if (client_server_generation is not None
|
||||||
|
and int(client_server_generation) != SERVER_GENERATION
|
||||||
|
and not client_reload_pending):
|
||||||
# No messages, but still return immediately to inform the
|
# No messages, but still return immediately to inform the
|
||||||
# client that they should reload
|
# client that they should reload
|
||||||
handler.finish(format_updates_response([], where="bottom", **kwargs))
|
handler.finish(format_updates_response([], where="bottom", **kwargs))
|
||||||
|
|||||||
Reference in New Issue
Block a user