mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 15:03:34 +00:00
Use the new MessageList for storing messages
(imported from commit 38a04d2ff504aa49189997b972318af7c944d528)
This commit is contained in:
@@ -27,7 +27,7 @@ var globals =
|
|||||||
+ ' tutorial'
|
+ ' tutorial'
|
||||||
|
|
||||||
// zephyr.js
|
// zephyr.js
|
||||||
+ ' message_array message_dict get_updates_params'
|
+ ' all_msg_list narrowed_msg_list current_msg_list get_updates_params'
|
||||||
+ ' clear_table add_to_table add_messages'
|
+ ' clear_table add_to_table add_messages'
|
||||||
+ ' subject_dict people_dict same_stream_and_subject'
|
+ ' subject_dict people_dict same_stream_and_subject'
|
||||||
+ ' keep_pointer_in_view move_pointer_at_page_top_and_bottom'
|
+ ' keep_pointer_in_view move_pointer_at_page_top_and_bottom'
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ function hashchanged() {
|
|||||||
exports.initialize = function () {
|
exports.initialize = function () {
|
||||||
window.onhashchange = hashchanged;
|
window.onhashchange = hashchanged;
|
||||||
if (hashchanged()) {
|
if (hashchanged()) {
|
||||||
load_more_messages();
|
load_more_messages(current_msg_list);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -224,34 +224,28 @@ exports.activate = function (operators, opts) {
|
|||||||
// Before we clear the table, check if anything was highlighted.
|
// Before we clear the table, check if anything was highlighted.
|
||||||
var highlighted = search.something_is_highlighted();
|
var highlighted = search.something_is_highlighted();
|
||||||
|
|
||||||
// If our message id is not in range of the loaded message list, we need to fetch the messages
|
|
||||||
// around the target message time
|
|
||||||
if (message_array.length > 0 && (selected_message_id < message_array[0].id ||
|
|
||||||
selected_message_id > message_array[message_array.length - 1])) {
|
|
||||||
load_old_messages(target_id, 200, 200, function (messages) {
|
|
||||||
// We do this work inside the load_old_messages
|
|
||||||
// continuation, to shorten the window with just 1 visible message
|
|
||||||
clear_table('zfilt');
|
clear_table('zfilt');
|
||||||
add_to_table([message_dict[target_id]], 'zfilt', filter_function, 'bottom', allow_collapse);
|
narrowed_msg_list = new MessageList('zfilt');
|
||||||
// Select target_id so that we will correctly arrange messages
|
current_msg_list = narrowed_msg_list;
|
||||||
// surrounding the target message.
|
|
||||||
select_message_by_id(target_id, {then_scroll: false});
|
// If our message id is not in range of the loaded message list,
|
||||||
add_messages(messages, {add_to_home: false, append_new_messages: true});
|
// we need to fetch the messages around the target message time
|
||||||
}, true, true);
|
if (all_msg_list.get(target_id) === undefined) {
|
||||||
|
load_old_messages(target_id, 200, 200, narrowed_msg_list, function (messages) {
|
||||||
|
select_message_by_id(target_id, {then_scroll: true});
|
||||||
|
}, true, false);
|
||||||
} else {
|
} else {
|
||||||
clear_table('zfilt');
|
add_messages(all_msg_list.all(), narrowed_msg_list);
|
||||||
add_to_table(message_array, 'zfilt', filter_function, 'bottom', allow_collapse);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mark as read any messages before or at the pointer in the narrowed view
|
// Mark as read any messages before or at the pointer in the narrowed view
|
||||||
var start = parseInt(Object.keys(message_in_table.zfilt)[0], 10);
|
if (! narrowed_msg_list.empty()) {
|
||||||
var to_process = [];
|
// XXX: We shouldn't really be directly accessing the message list
|
||||||
|
var msgs = narrowed_msg_list.all();
|
||||||
var i;
|
var i;
|
||||||
if (!isNaN(start)) {
|
var to_process = [];
|
||||||
for (i = start; i <= selected_message_id; i++) {
|
for (i = 0; i < msgs.length && msgs[i].id <= selected_message_id; ++i) {
|
||||||
if (message_dict[i] !== undefined) {
|
to_process.push(msgs[i]);
|
||||||
to_process.push(message_dict[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
process_unread_counts(to_process, true);
|
process_unread_counts(to_process, true);
|
||||||
@@ -299,7 +293,7 @@ exports.by = function (operator, operand, opts) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
exports.by_subject = function (target_id) {
|
exports.by_subject = function (target_id) {
|
||||||
var original = message_dict[target_id];
|
var original = current_msg_list.get(target_id);
|
||||||
if (original.type !== 'stream') {
|
if (original.type !== 'stream') {
|
||||||
// Only stream messages have subjects, but the
|
// Only stream messages have subjects, but the
|
||||||
// user wants us to narrow in some way.
|
// user wants us to narrow in some way.
|
||||||
@@ -314,7 +308,7 @@ exports.by_subject = function (target_id) {
|
|||||||
|
|
||||||
// Called for the 'narrow by stream' hotkey.
|
// Called for the 'narrow by stream' hotkey.
|
||||||
exports.by_recipient = function (target_id) {
|
exports.by_recipient = function (target_id) {
|
||||||
var message = message_dict[target_id];
|
var message = current_msg_list.get(target_id);
|
||||||
var new_narrow, emails;
|
var new_narrow, emails;
|
||||||
switch (message.type) {
|
switch (message.type) {
|
||||||
case 'private':
|
case 'private':
|
||||||
@@ -340,6 +334,8 @@ exports.deactivate = function () {
|
|||||||
$("#zhome").addClass('focused_table');
|
$("#zhome").addClass('focused_table');
|
||||||
$("#zhome").css("opacity", 0).animate({opacity: 1});
|
$("#zhome").css("opacity", 0).animate({opacity: 1});
|
||||||
|
|
||||||
|
current_msg_list = all_msg_list;
|
||||||
|
|
||||||
$('#search_query').val('');
|
$('#search_query').val('');
|
||||||
reset_load_more_status();
|
reset_load_more_status();
|
||||||
// Includes scrolling.
|
// Includes scrolling.
|
||||||
|
|||||||
@@ -119,7 +119,8 @@ function stream_home_view_clicked(e) {
|
|||||||
|
|
||||||
// We don't want to mess with the message_array, just filter the home view
|
// We don't want to mess with the message_array, just filter the home view
|
||||||
// by the new in_home_view settings
|
// by the new in_home_view settings
|
||||||
add_messages(message_array, {add_to_home: true, append_new_messages: false, update_unread_counts: false});
|
// TODO: We should possibly just rebuild the message list
|
||||||
|
add_messages(all_msg_list, {append_new_messages: false, update_unread_counts: false});
|
||||||
|
|
||||||
$.each(hidden, function (idx, shown) {
|
$.each(hidden, function (idx, shown) {
|
||||||
$(shown).setAttribute('display', 'table');
|
$(shown).setAttribute('display', 'table');
|
||||||
@@ -133,8 +134,8 @@ function stream_home_view_clicked(e) {
|
|||||||
|
|
||||||
// If we added any messages that were unread but before the currently selected message pointer
|
// If we added any messages that were unread but before the currently selected message pointer
|
||||||
// we need to re-process them to update the unread count
|
// we need to re-process them to update the unread count
|
||||||
if (message_array.length > 0) {
|
if (! all_msg_list.empty()) {
|
||||||
process_unread_counts(message_range(message_array[0].id, selected_message_id), true);
|
process_unread_counts(message_range(all_msg_list.first().id, selected_message_id), true);
|
||||||
}
|
}
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ $(document).bind('copy', function (e) {
|
|||||||
p.html(p.html() + "<b>" + content.text() + "</b>" + "<br>");
|
p.html(p.html() + "<b>" + content.text() + "</b>" + "<br>");
|
||||||
}
|
}
|
||||||
|
|
||||||
message = message_dict[rows.id(row)];
|
message = current_msg_list.get(rows.id(row));
|
||||||
|
|
||||||
content = $('<div>').text(message.sender_full_name + ": " +
|
content = $('<div>').text(message.sender_full_name + ": " +
|
||||||
$('<div/>').html(message.content).text()
|
$('<div/>').html(message.content).text()
|
||||||
@@ -407,7 +407,7 @@ function show_actions_popover(element, id) {
|
|||||||
var elt = $(element);
|
var elt = $(element);
|
||||||
if (elt.data('popover') === undefined) {
|
if (elt.data('popover') === undefined) {
|
||||||
var args = {
|
var args = {
|
||||||
message: message_dict[id],
|
message: current_msg_list.get(id),
|
||||||
narrowed: narrow.active()
|
narrowed: narrow.active()
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -519,7 +519,7 @@ $(function () {
|
|||||||
if (viewport.scrollTop() === 0 &&
|
if (viewport.scrollTop() === 0 &&
|
||||||
have_scrolled_away_from_top) {
|
have_scrolled_away_from_top) {
|
||||||
have_scrolled_away_from_top = false;
|
have_scrolled_away_from_top = false;
|
||||||
load_more_messages();
|
load_more_messages(current_msg_list);
|
||||||
} else if (!have_scrolled_away_from_top) {
|
} else if (!have_scrolled_away_from_top) {
|
||||||
have_scrolled_away_from_top = true;
|
have_scrolled_away_from_top = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
var message_array = [];
|
var all_msg_list = new MessageList('zhome');
|
||||||
var message_dict = {};
|
var narrowed_msg_list;
|
||||||
var message_in_table = {zhome: {}, zfilt: {}};
|
var current_msg_list = all_msg_list;
|
||||||
var subject_dict = {};
|
var subject_dict = {};
|
||||||
var people_dict = {};
|
var people_dict = {};
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ function get_private_message_recipient(message, attr) {
|
|||||||
|
|
||||||
function respond_to_message(reply_type) {
|
function respond_to_message(reply_type) {
|
||||||
var message, msg_type;
|
var message, msg_type;
|
||||||
message = message_dict[selected_message_id];
|
message = current_msg_list.get(selected_message_id);
|
||||||
|
|
||||||
var stream = '';
|
var stream = '';
|
||||||
var subject = '';
|
var subject = '';
|
||||||
@@ -180,14 +180,14 @@ $(function () {
|
|||||||
keepTracking: true});
|
keepTracking: true});
|
||||||
});
|
});
|
||||||
|
|
||||||
function message_range(start, end) {
|
function message_range(msg_list, start, end) {
|
||||||
// Returns messages from the global message_dict in the specified range, inclusive
|
// Returns messages from the given message list in the specified range, inclusive
|
||||||
var result = [];
|
var result = [];
|
||||||
var i;
|
var i;
|
||||||
|
|
||||||
for (i = start; i <= end; i++) {
|
for (i = start; i <= end; i++) {
|
||||||
if (message_dict[i] !== undefined) {
|
if (msg_list.get(i) !== undefined) {
|
||||||
result.push(message_dict[i]);
|
result.push(msg_list.get(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -253,10 +253,10 @@ function update_selected_message(message, opts) {
|
|||||||
message.addClass(cls);
|
message.addClass(cls);
|
||||||
|
|
||||||
var new_selected_id = rows.id(message);
|
var new_selected_id = rows.id(message);
|
||||||
|
process_unread_counts(message_range(all_msg_list, furthest_read + 1, new_selected_id), true);
|
||||||
// Narrowing is a temporary view on top of the home view and
|
// Narrowing is a temporary view on top of the home view and
|
||||||
// doesn't affect your pointer in the home view.
|
// doesn't affect your pointer in the home view.
|
||||||
// Similarly, lurk mode does not affect your pointer.
|
// Similarly, lurk mode does not affect your pointer.
|
||||||
process_unread_counts(message_range(furthest_read + 1, new_selected_id), true);
|
|
||||||
if (! narrow.active() && lurk_stream === undefined) {
|
if (! narrow.active() && lurk_stream === undefined) {
|
||||||
persistent_message_id = new_selected_id;
|
persistent_message_id = new_selected_id;
|
||||||
if (new_selected_id > furthest_read)
|
if (new_selected_id > furthest_read)
|
||||||
@@ -332,7 +332,6 @@ function clear_table(table_name) {
|
|||||||
// mindful of memory leaks.
|
// mindful of memory leaks.
|
||||||
rows.get_table(table_name).children().detach();
|
rows.get_table(table_name).children().detach();
|
||||||
message_groups[table_name] = [];
|
message_groups[table_name] = [];
|
||||||
message_in_table[table_name] = {};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_display_time(message, prev) {
|
function add_display_time(message, prev) {
|
||||||
@@ -364,10 +363,11 @@ function add_display_time(message, prev) {
|
|||||||
' (UTC' + ((tz_offset < 0) ? '' : '+') + tz_offset + ')';
|
' (UTC' + ((tz_offset < 0) ? '' : '+') + tz_offset + ')';
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_to_table(messages, table_name, filter_function, where, allow_collapse) {
|
function add_to_table(messages, msg_list, filter_function, where, allow_collapse) {
|
||||||
if (messages.length === 0)
|
if (messages.length === 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
var table_name = msg_list.table_name;
|
||||||
var table = rows.get_table(table_name);
|
var table = rows.get_table(table_name);
|
||||||
var messages_to_render = [];
|
var messages_to_render = [];
|
||||||
var ids_where_next_is_same_sender = {};
|
var ids_where_next_is_same_sender = {};
|
||||||
@@ -389,7 +389,7 @@ function add_to_table(messages, table_name, filter_function, where, allow_collap
|
|||||||
var top_messages = [];
|
var top_messages = [];
|
||||||
$.each(top_group, function (index, id) {
|
$.each(top_group, function (index, id) {
|
||||||
rows.get(id, table_name).remove();
|
rows.get(id, table_name).remove();
|
||||||
top_messages.push(message_dict[id]);
|
top_messages.push(msg_list.get(id));
|
||||||
});
|
});
|
||||||
messages = messages.concat(top_messages);
|
messages = messages.concat(top_messages);
|
||||||
|
|
||||||
@@ -397,15 +397,13 @@ function add_to_table(messages, table_name, filter_function, where, allow_collap
|
|||||||
table.find('.recipient_row:first').remove();
|
table.find('.recipient_row:first').remove();
|
||||||
} else {
|
} else {
|
||||||
last_message_id = rows.id(table.find('tr[zid]:last'));
|
last_message_id = rows.id(table.find('tr[zid]:last'));
|
||||||
prev = message_dict[last_message_id];
|
prev = msg_list.get(last_message_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
$.each(messages, function (index, message) {
|
$.each(messages, function (index, message) {
|
||||||
if (! filter_function(message))
|
if (! filter_function(message))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
message_in_table[table_name][message.id] = true;
|
|
||||||
|
|
||||||
message.include_recipient = false;
|
message.include_recipient = false;
|
||||||
message.include_bookend = false;
|
message.include_bookend = false;
|
||||||
if (same_recipient(prev, message) && allow_collapse) {
|
if (same_recipient(prev, message) && allow_collapse) {
|
||||||
@@ -517,8 +515,8 @@ function case_insensitive_find(term, array) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function add_message_metadata(message, dummy) {
|
function add_message_metadata(message, dummy) {
|
||||||
if (message_dict[message.id]) {
|
if (all_msg_list.get(message.id)) {
|
||||||
return message_dict[message.id];
|
return all_msg_list.get(message.id);
|
||||||
}
|
}
|
||||||
get_updates_params.last = Math.max(get_updates_params.last || 0, message.id);
|
get_updates_params.last = Math.max(get_updates_params.last || 0, message.id);
|
||||||
|
|
||||||
@@ -567,65 +565,68 @@ function add_message_metadata(message, dummy) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
message_dict[message.id] = message;
|
|
||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_messages_helper(messages, table, center_message_id,
|
function add_messages_helper(messages, msg_list, center_message_id,
|
||||||
predicate, allow_collapse, append_new_messages) {
|
predicate, allow_collapse, append_new_messages) {
|
||||||
// center_message_id is guaranteed to be between the top and bottom
|
// center_message_id is guaranteed to be between the top and bottom
|
||||||
var top_messages = $.grep(messages, function (elem, idx) {
|
var top_messages = $.grep(messages, function (elem, idx) {
|
||||||
return (elem.id < center_message_id && ! message_in_table[table][elem.id]);
|
return (elem.id < center_message_id && msg_list.get(elem.id) === undefined);
|
||||||
});
|
});
|
||||||
var bottom_messages = $.grep(messages, function (elem, idx) {
|
var bottom_messages = $.grep(messages, function (elem, idx) {
|
||||||
return (elem.id >= center_message_id && ! message_in_table[table][elem.id]);
|
return (elem.id >= center_message_id && msg_list.get(elem.id) === undefined);
|
||||||
});
|
});
|
||||||
if (table === "zhome" && append_new_messages) {
|
|
||||||
message_array = top_messages.concat(message_array).concat(bottom_messages);
|
if (append_new_messages) {
|
||||||
|
msg_list.prepend(top_messages);
|
||||||
|
msg_list.append(bottom_messages);
|
||||||
}
|
}
|
||||||
add_to_table(top_messages, table, predicate, "top", allow_collapse);
|
|
||||||
add_to_table(bottom_messages, table, predicate, "bottom", allow_collapse);
|
add_to_table(top_messages, msg_list, predicate, "top", allow_collapse);
|
||||||
|
add_to_table(bottom_messages, msg_list, predicate, "bottom", allow_collapse);
|
||||||
return top_messages.length > 0;
|
return top_messages.length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function add_messages(messages, opts) {
|
function add_messages(messages, msg_list, opts) {
|
||||||
var prepended = false;
|
var prepended = false;
|
||||||
if (!messages)
|
if (!messages)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
opts = $.extend({}, {update_unread_counts: true}, opts);
|
opts = $.extend({}, {update_unread_counts: true, append_new_messages: true}, opts);
|
||||||
|
|
||||||
util.destroy_loading_indicator($('#page_loading_indicator'));
|
util.destroy_loading_indicator($('#page_loading_indicator'));
|
||||||
util.destroy_first_run_message();
|
util.destroy_first_run_message();
|
||||||
messages = $.map(messages, add_message_metadata);
|
messages = $.map(messages, add_message_metadata);
|
||||||
|
|
||||||
if (opts.add_to_home) {
|
var predicate, allow_collapse, center_message_id;
|
||||||
if (add_messages_helper(messages, "zhome", persistent_message_id,
|
if (msg_list === all_msg_list) {
|
||||||
narrow.in_home, true, opts.append_new_messages)
|
predicate = narrow.in_home;
|
||||||
&& !narrow.active()) {
|
allow_collapse = true;
|
||||||
|
center_message_id = persistent_message_id;
|
||||||
|
} else {
|
||||||
|
predicate = narrow.predicate();
|
||||||
|
allow_collapse = narrow.allow_collapse();
|
||||||
|
center_message_id = selected_message_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (add_messages_helper(messages, msg_list, center_message_id,
|
||||||
|
predicate, allow_collapse, opts.append_new_messages)) {
|
||||||
prepended = true;
|
prepended = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opts.update_unread_counts) {
|
if (msg_list === all_msg_list && opts.update_unread_counts) {
|
||||||
process_unread_counts(messages, false);
|
process_unread_counts(messages, false);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (narrow.active()) {
|
|
||||||
if (add_messages_helper(messages, "zfilt", selected_message_id,
|
|
||||||
narrow.predicate(), narrow.allow_collapse(), opts.append_new_messages)) {
|
|
||||||
prepended = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we received the initially selected message, select it on the client side,
|
// If we received the initially selected message, select it on the client side,
|
||||||
// but not if the user has already selected another one during load.
|
// but not if the user has already selected another one during load.
|
||||||
if ((selected_message_id === -1) && (message_dict.hasOwnProperty(initial_pointer))) {
|
if ((selected_message_id === -1) && (msg_list.get(initial_pointer) !== undefined)) {
|
||||||
select_message_by_id(initial_pointer, {then_scroll: true});
|
select_message_by_id(initial_pointer, {then_scroll: true});
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((selected_message_id === -1) && ! have_initial_messages) {
|
if ((selected_message_id === -1) && ! have_initial_messages) {
|
||||||
select_message_by_id(message_array[0].id, {then_scroll: false});
|
select_message_by_id(msg_list.first().id, {then_scroll: false});
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we prepended messages, then we need to scroll back to the pointer.
|
// If we prepended messages, then we need to scroll back to the pointer.
|
||||||
@@ -691,7 +692,10 @@ function get_updates(options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (data.messages.length !== 0) {
|
if (data.messages.length !== 0) {
|
||||||
add_messages(data.messages, {add_to_home: true, append_new_messages: true});
|
add_messages(data.messages, all_msg_list);
|
||||||
|
if (narrowed_msg_list !== undefined) {
|
||||||
|
add_messages(data.messages, narrowed_msg_list);
|
||||||
|
}
|
||||||
notifications.received_messages(data.messages);
|
notifications.received_messages(data.messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -739,7 +743,7 @@ function get_updates(options) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function load_old_messages(anchor, num_before, num_after, cont, for_narrow,
|
function load_old_messages(anchor, num_before, num_after, msg_list, cont, for_narrow,
|
||||||
cont_will_add_messages) {
|
cont_will_add_messages) {
|
||||||
if (for_narrow === undefined) {
|
if (for_narrow === undefined) {
|
||||||
for_narrow = false;
|
for_narrow = false;
|
||||||
@@ -760,7 +764,7 @@ function load_old_messages(anchor, num_before, num_after, cont, for_narrow,
|
|||||||
$('#connection-error').hide();
|
$('#connection-error').hide();
|
||||||
|
|
||||||
if (messages.length !== 0 && !cont_will_add_messages) {
|
if (messages.length !== 0 && !cont_will_add_messages) {
|
||||||
add_messages(messages, {add_to_home: !for_narrow, append_new_messages: true});
|
add_messages(messages, msg_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cont !== undefined) {
|
if (cont !== undefined) {
|
||||||
@@ -778,8 +782,8 @@ function load_old_messages(anchor, num_before, num_after, cont, for_narrow,
|
|||||||
// The server occationally returns no data during a
|
// The server occationally returns no data during a
|
||||||
// restart. Ignore those responses and try again
|
// restart. Ignore those responses and try again
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
load_old_messages(anchor, num_before, num_after, cont, for_narrow,
|
load_old_messages(anchor, num_before, num_after, msg_list,
|
||||||
cont_will_add_messages);
|
cont, for_narrow, cont_will_add_messages);
|
||||||
}, 0);
|
}, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -800,8 +804,8 @@ function load_old_messages(anchor, num_before, num_after, cont, for_narrow,
|
|||||||
// We might want to be more clever here
|
// We might want to be more clever here
|
||||||
$('#connection-error').show();
|
$('#connection-error').show();
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
load_old_messages(anchor, num_before, num_after, cont, for_narrow,
|
load_old_messages(anchor, num_before, num_after, msg_list,
|
||||||
cont_will_add_messages);
|
cont, for_narrow, cont_will_add_messages);
|
||||||
}, 5000);
|
}, 5000);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -813,7 +817,7 @@ $(function () {
|
|||||||
// catch the user up
|
// catch the user up
|
||||||
if (messages.length !== 1) {
|
if (messages.length !== 1) {
|
||||||
var latest_id = messages[messages.length-1].id;
|
var latest_id = messages[messages.length-1].id;
|
||||||
load_old_messages(latest_id, 0, 400, load_more);
|
load_old_messages(latest_id, 0, 400, all_msg_list, load_more);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// now start subscribing to updates
|
// now start subscribing to updates
|
||||||
@@ -821,7 +825,7 @@ $(function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (have_initial_messages) {
|
if (have_initial_messages) {
|
||||||
load_old_messages(initial_pointer, 200, 200, load_more);
|
load_old_messages(initial_pointer, 200, 200, all_msg_list, load_more);
|
||||||
} else {
|
} else {
|
||||||
get_updates();
|
get_updates();
|
||||||
}
|
}
|
||||||
@@ -842,26 +846,20 @@ function reset_load_more_status() {
|
|||||||
have_scrolled_away_from_top = true;
|
have_scrolled_away_from_top = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function load_more_messages() {
|
function load_more_messages(msg_list) {
|
||||||
var batch_size = 400;
|
var batch_size = 400;
|
||||||
var table, oldest_message_id;
|
var oldest_message_id;
|
||||||
if (!load_more_enabled) {
|
if (!load_more_enabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ui.show_loading_more_messages_indicator();
|
ui.show_loading_more_messages_indicator();
|
||||||
load_more_enabled = false;
|
load_more_enabled = false;
|
||||||
table = narrow.active() ? "zfilt" : "zhome";
|
if (msg_list.first() === undefined) {
|
||||||
oldest_message_id = rows.id(rows.get_table(table).find("tr[zid]:first"));
|
|
||||||
if (isNaN(oldest_message_id)) {
|
|
||||||
if (selected_message_id === -1) {
|
|
||||||
// If we arrived on the page via a #narrow URL, selected_message_id
|
|
||||||
// will still be -1, so use the initial_pointer as our anchor
|
|
||||||
oldest_message_id = initial_pointer;
|
oldest_message_id = initial_pointer;
|
||||||
} else {
|
} else {
|
||||||
oldest_message_id = selected_message_id;
|
oldest_message_id = msg_list.first().id;
|
||||||
}
|
}
|
||||||
}
|
load_old_messages(oldest_message_id, batch_size, 0, msg_list,
|
||||||
load_old_messages(oldest_message_id, batch_size, 0,
|
|
||||||
function (messages) {
|
function (messages) {
|
||||||
ui.hide_loading_more_messages_indicator();
|
ui.hide_loading_more_messages_indicator();
|
||||||
if (messages.length === batch_size + 1) {
|
if (messages.length === batch_size + 1) {
|
||||||
|
|||||||
Reference in New Issue
Block a user