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

View File

@@ -287,7 +287,10 @@ function get_events(options) {
($.parseJSON(xhr.responseText).msg.indexOf("too old") !== -1 ||
$.parseJSON(xhr.responseText).msg.indexOf("Bad event queue id") !== -1)) {
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') {

View File

@@ -273,7 +273,10 @@ function fast_forward_pointer() {
furthest_read = data.max_message_id;
unconditionally_send_pointer_update().then(function () {
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});
});
});
}