2019-11-02 00:06:25 +01:00
|
|
|
const FetchStatus = function () {
|
2018-03-09 22:04:07 +01:00
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
const self = {};
|
2018-03-09 22:04:07 +01:00
|
|
|
|
2019-11-02 00:06:25 +01:00
|
|
|
let loading_older = false;
|
|
|
|
let loading_newer = false;
|
|
|
|
let found_oldest = false;
|
|
|
|
let found_newest = false;
|
|
|
|
let history_limited = false;
|
2020-05-30 17:34:07 +02:00
|
|
|
let expected_max_message_id = 0;
|
|
|
|
|
|
|
|
function max_id_for_messages(messages) {
|
|
|
|
let max_id = 0;
|
|
|
|
for (const msg of messages) {
|
|
|
|
max_id = Math.max(max_id, msg.id);
|
|
|
|
}
|
|
|
|
return max_id;
|
|
|
|
}
|
2018-03-09 22:04:07 +01:00
|
|
|
|
2020-06-15 12:47:11 +02:00
|
|
|
self.start_older_batch = function (opts) {
|
2018-03-09 22:04:07 +01:00
|
|
|
loading_older = true;
|
2020-06-15 12:47:11 +02:00
|
|
|
if (opts.update_loading_indicator) {
|
|
|
|
message_scroll.show_loading_older();
|
|
|
|
}
|
2018-03-09 22:04:07 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
self.finish_older_batch = function (opts) {
|
|
|
|
loading_older = false;
|
|
|
|
found_oldest = opts.found_oldest;
|
2018-12-13 00:53:35 +01:00
|
|
|
history_limited = opts.history_limited;
|
2020-06-15 12:47:11 +02:00
|
|
|
if (opts.update_loading_indicator) {
|
|
|
|
message_scroll.hide_loading_older();
|
|
|
|
}
|
2018-03-09 22:04:07 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
self.can_load_older_messages = function () {
|
|
|
|
return !loading_older && !found_oldest;
|
|
|
|
};
|
|
|
|
|
2020-06-13 12:26:36 +02:00
|
|
|
self.has_found_oldest = function () {
|
|
|
|
return found_oldest;
|
|
|
|
};
|
|
|
|
|
2018-12-13 00:53:35 +01:00
|
|
|
self.history_limited = function () {
|
|
|
|
return history_limited;
|
|
|
|
};
|
|
|
|
|
2020-06-15 11:53:00 +02:00
|
|
|
self.start_newer_batch = function (opts) {
|
2018-03-09 22:04:07 +01:00
|
|
|
loading_newer = true;
|
2020-06-15 11:53:00 +02:00
|
|
|
if (opts.update_loading_indicator) {
|
|
|
|
message_scroll.show_loading_newer();
|
|
|
|
}
|
2018-03-09 22:04:07 +01:00
|
|
|
};
|
|
|
|
|
2020-05-30 17:34:07 +02:00
|
|
|
self.finish_newer_batch = function (messages, opts) {
|
|
|
|
const found_max_message_id = max_id_for_messages(messages);
|
|
|
|
if (opts.found_newest && expected_max_message_id > found_max_message_id) {
|
|
|
|
opts.found_newest = false;
|
|
|
|
}
|
2018-03-09 22:04:07 +01:00
|
|
|
loading_newer = false;
|
|
|
|
found_newest = opts.found_newest;
|
2020-06-15 11:53:00 +02:00
|
|
|
if (opts.update_loading_indicator) {
|
|
|
|
message_scroll.hide_loading_newer();
|
|
|
|
}
|
2018-03-09 22:04:07 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
self.can_load_newer_messages = function () {
|
|
|
|
return !loading_newer && !found_newest;
|
|
|
|
};
|
|
|
|
|
2018-05-03 19:44:11 +02:00
|
|
|
self.has_found_newest = function () {
|
|
|
|
return found_newest;
|
|
|
|
};
|
|
|
|
|
2020-05-30 17:34:07 +02:00
|
|
|
self.update_expected_max_message_id = function (messages) {
|
|
|
|
expected_max_message_id = Math.max(expected_max_message_id,
|
|
|
|
max_id_for_messages(messages));
|
|
|
|
};
|
|
|
|
|
2018-03-09 22:04:07 +01:00
|
|
|
return self;
|
|
|
|
|
|
|
|
};
|
2019-10-25 09:45:13 +02:00
|
|
|
module.exports = FetchStatus;
|
2018-05-28 08:04:36 +02:00
|
|
|
window.FetchStatus = FetchStatus;
|