mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
refactor: Extract unread_ops.js
This module mostly contains the mark_* functions that update the server with info about unread counts.
This commit is contained in:
115
static/js/unread_ops.js
Normal file
115
static/js/unread_ops.js
Normal file
@@ -0,0 +1,115 @@
|
||||
var unread_ops = (function () {
|
||||
|
||||
var exports = {};
|
||||
|
||||
exports.mark_all_as_read = function mark_all_as_read(cont) {
|
||||
_.each(message_list.all.all_messages(), function (msg) {
|
||||
msg.flags = msg.flags || [];
|
||||
msg.flags.push('read');
|
||||
});
|
||||
unread.declare_bankruptcy();
|
||||
unread_ui.update_unread_counts();
|
||||
|
||||
channel.post({
|
||||
url: '/json/messages/flags',
|
||||
idempotent: true,
|
||||
data: {messages: JSON.stringify([]),
|
||||
all: true,
|
||||
op: 'add',
|
||||
flag: 'read'},
|
||||
success: cont});
|
||||
};
|
||||
|
||||
// Takes a list of messages and marks them as read
|
||||
exports.mark_messages_as_read = function mark_messages_as_read(messages, options) {
|
||||
options = options || {};
|
||||
var processed = false;
|
||||
|
||||
_.each(messages, function (message) {
|
||||
if (!unread.message_unread(message)) {
|
||||
// Don't do anything if the message is already read.
|
||||
return;
|
||||
}
|
||||
if (current_msg_list === message_list.narrowed) {
|
||||
unread.messages_read_in_narrow = true;
|
||||
}
|
||||
|
||||
if (options.from !== "server") {
|
||||
message_flags.send_read(message);
|
||||
}
|
||||
|
||||
message.flags = message.flags || [];
|
||||
message.flags.push('read');
|
||||
message.unread = false;
|
||||
unread.process_read_message(message, options);
|
||||
home_msg_list.show_message_as_read(message, options);
|
||||
message_list.all.show_message_as_read(message, options);
|
||||
if (message_list.narrowed) {
|
||||
message_list.narrowed.show_message_as_read(message, options);
|
||||
}
|
||||
notifications.close_notification(message);
|
||||
processed = true;
|
||||
});
|
||||
|
||||
if (processed) {
|
||||
unread_ui.update_unread_counts();
|
||||
}
|
||||
};
|
||||
|
||||
exports.mark_message_as_read = function mark_message_as_read(message, options) {
|
||||
exports.mark_messages_as_read([message], options);
|
||||
};
|
||||
|
||||
// If we ever materially change the algorithm for this function, we
|
||||
// may need to update notifications.received_messages as well.
|
||||
exports.process_visible = function process_visible() {
|
||||
if (! notifications.window_has_focus()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (feature_flags.mark_read_at_bottom) {
|
||||
if (message_viewport.bottom_message_visible()) {
|
||||
exports.mark_current_list_as_read();
|
||||
}
|
||||
} else {
|
||||
exports.mark_messages_as_read(message_viewport.visible_messages(true));
|
||||
}
|
||||
};
|
||||
|
||||
exports.mark_current_list_as_read = function mark_current_list_as_read(options) {
|
||||
exports.mark_messages_as_read(current_msg_list.all_messages(), options);
|
||||
};
|
||||
|
||||
exports.mark_stream_as_read = function mark_stream_as_read(stream, cont) {
|
||||
channel.post({
|
||||
url: '/json/messages/flags',
|
||||
idempotent: true,
|
||||
data: {messages: JSON.stringify([]),
|
||||
all: false,
|
||||
op: 'add',
|
||||
flag: 'read',
|
||||
stream_name: stream,
|
||||
},
|
||||
success: cont});
|
||||
};
|
||||
|
||||
exports.mark_topic_as_read = function mark_topic_as_read(stream, topic, cont) {
|
||||
channel.post({
|
||||
url: '/json/messages/flags',
|
||||
idempotent: true,
|
||||
data: {messages: JSON.stringify([]),
|
||||
all: false,
|
||||
op: 'add',
|
||||
flag: 'read',
|
||||
topic_name: topic,
|
||||
stream_name: stream,
|
||||
},
|
||||
success: cont});
|
||||
};
|
||||
|
||||
|
||||
return exports;
|
||||
}());
|
||||
if (typeof module !== 'undefined') {
|
||||
module.exports = unread_ops;
|
||||
}
|
||||
Reference in New Issue
Block a user