diff --git a/zephyr/static/js/zephyr.js b/zephyr/static/js/zephyr.js index 20398f421e..5c38dfe9fa 100644 --- a/zephyr/static/js/zephyr.js +++ b/zephyr/static/js/zephyr.js @@ -5,9 +5,18 @@ var people_hash = {}; var selected_message_class = 'selected_message'; var viewport = $(window); -var app_needs_reload = 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 () { var i; var send_status = $('#send-status'); @@ -21,13 +30,13 @@ $(function () { send_status.hide(); hide_compose(); buttons.removeAttr('disabled'); - if (app_needs_reload) { + if (received.reload_pending) { reload_app(); return; } }, 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 reload_app_preserving_compose(true); 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; }); // The "message groups", i.e. blocks of messages collapsed by recipient. @@ -600,11 +600,8 @@ function get_updates() { received.failures = 0; $('#connection-error').hide(); - if (data.server_generation > server_generation && !app_needs_reload) { - // We need to set server_generation here to avoid - // pounding the server with get_updates requests. - server_generation = data.server_generation; - app_needs_reload = true; + if (data.server_generation !== received.server_generation) { + received.reload_pending = true; reload_app(); } diff --git a/zephyr/views.py b/zephyr/views.py index 2dc6ccef52..48a8615941 100644 --- a/zephyr/views.py +++ b/zephyr/views.py @@ -229,6 +229,7 @@ def return_messages_immediately(request, handler, user_profile, **kwargs): last = request.POST.get("last") failures = request.POST.get("failures") client_server_generation = request.POST.get("server_generation") + client_reload_pending = request.POST.get("reload_pending") if first is None or last is None: # When an API user is first querying the server to subscribe, # 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)) 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 # client that they should reload handler.finish(format_updates_response([], where="bottom", **kwargs))