Refactor reload.js to allow saving only some state when reloading.

The reload state is now divided into 3 different components:
  pointer, narrow, compose
This commit is contained in:
Dylan Dumesnil
2015-11-28 18:00:00 -08:00
committed by Tim Abbott
parent 9a3331acaf
commit 24b63f30ba
3 changed files with 61 additions and 38 deletions

View File

@@ -13,13 +13,14 @@ exports.is_in_progress = function () {
return reload_in_progress; return reload_in_progress;
}; };
function preserve_state(send_after_reload) { function preserve_state(send_after_reload, save_pointer, save_narrow, save_compose) {
if (send_after_reload === undefined) { if (send_after_reload === undefined) {
send_after_reload = 0; send_after_reload = 0;
} }
var url = "#reload:send_after_reload=" + Number(send_after_reload); var url = "#reload:send_after_reload=" + Number(send_after_reload);
url += "+csrf_token=" + encodeURIComponent(csrf_token); url += "+csrf_token=" + encodeURIComponent(csrf_token);
if (save_compose) {
if (compose.composing() === 'stream') { if (compose.composing() === 'stream') {
url += "+msg_type=stream"; url += "+msg_type=stream";
url += "+stream=" + encodeURIComponent(compose.stream_name()); url += "+stream=" + encodeURIComponent(compose.stream_name());
@@ -32,11 +33,16 @@ function preserve_state(send_after_reload) {
if (compose.composing()) { if (compose.composing()) {
url += "+msg=" + encodeURIComponent(compose.message_content()); url += "+msg=" + encodeURIComponent(compose.message_content());
} }
}
if (save_pointer) {
var pointer = home_msg_list.selected_id(); var pointer = home_msg_list.selected_id();
if (pointer !== -1) { if (pointer !== -1) {
url += "+pointer=" + pointer; url += "+pointer=" + pointer;
} }
}
if (save_narrow) {
var row = home_msg_list.selected_row(); var row = home_msg_list.selected_row();
if (!narrow.active()) { if (!narrow.active()) {
if (row.length > 0) { if (row.length > 0) {
@@ -54,6 +60,7 @@ function preserve_state(send_after_reload) {
url += "+narrow_offset=" + narrow_row.offset().top; url += "+narrow_offset=" + narrow_row.offset().top;
} }
} }
}
var oldhash = window.location.hash; var oldhash = window.location.hash;
if (oldhash.length !== 0 && oldhash[0] === '#') { if (oldhash.length !== 0 && oldhash[0] === '#') {
@@ -159,12 +166,12 @@ function cleanup_before_reload() {
} }
} }
function do_reload_app(send_after_reload, save_state, message) { function do_reload_app(send_after_reload, save_pointer, save_narrow, save_compose, message) {
if (reload_in_progress) { return; } if (reload_in_progress) { return; }
// TODO: we should completely disable the UI here // TODO: we should completely disable the UI here
if (save_state) { if (save_pointer || save_narrow || save_compose) {
preserve_state(send_after_reload); preserve_state(send_after_reload, save_pointer, save_narrow, save_compose);
} }
if (message === undefined) { if (message === undefined) {
@@ -186,12 +193,18 @@ function do_reload_app(send_after_reload, save_state, message) {
exports.initiate = function (options) { exports.initiate = function (options) {
options = _.defaults({}, options, { options = _.defaults({}, options, {
immediate: false, immediate: false,
save_state: true, save_pointer: true,
save_narrow: true,
save_compose: true,
send_after_reload: false send_after_reload: false
}); });
if (options.immediate) { if (options.immediate) {
do_reload_app(options.send_after_reload, options.save_state, options.message); do_reload_app(options.send_after_reload,
options.save_pointer,
options.save_narrow,
options.save_compose,
options.message);
} }
if (reload_pending) { if (reload_pending) {
@@ -209,7 +222,11 @@ exports.initiate = function (options) {
var compose_done_handler, compose_started_handler; var compose_done_handler, compose_started_handler;
function reload_from_idle () { function reload_from_idle () {
do_reload_app(false, options.save_state, options.message); do_reload_app(false,
options.save_pointer,
options.save_narrow,
options.save_compose,
options.message);
} }
// Make sure we always do a reload eventually // Make sure we always do a reload eventually

View File

@@ -287,7 +287,10 @@ function get_events(options) {
($.parseJSON(xhr.responseText).msg.indexOf("too old") !== -1 || ($.parseJSON(xhr.responseText).msg.indexOf("too old") !== -1 ||
$.parseJSON(xhr.responseText).msg.indexOf("Bad event queue id") !== -1)) { $.parseJSON(xhr.responseText).msg.indexOf("Bad event queue id") !== -1)) {
page_params.event_queue_expired = true; page_params.event_queue_expired = true;
reload.initiate({immediate: true, save_state: false}); reload.initiate({immediate: true,
save_pointer: false,
save_narrow: false,
save_compose: false});
} }
if (error_type === 'abort') { if (error_type === 'abort') {

View File

@@ -273,7 +273,10 @@ function fast_forward_pointer() {
furthest_read = data.max_message_id; furthest_read = data.max_message_id;
unconditionally_send_pointer_update().then(function () { unconditionally_send_pointer_update().then(function () {
ui.change_tab_to('#home'); ui.change_tab_to('#home');
reload.initiate({immediate: true, save_state: false}); reload.initiate({immediate: true,
save_pointer: false,
save_narrow: false,
save_compose: false});
}); });
}); });
} }