From 2d2446ae77ae20e2e78695b47f70726b2e5b1d95 Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 19 Nov 2022 11:21:41 +0300 Subject: [PATCH] Improve updating of reply info. --- td/telegram/MessageReplyInfo.cpp | 23 ++++++++++++----------- td/telegram/MessagesManager.cpp | 2 +- td/telegram/UpdatesManager.cpp | 28 +++++++++++++++++++--------- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/td/telegram/MessageReplyInfo.cpp b/td/telegram/MessageReplyInfo.cpp index 0b436becd..2a289354f 100644 --- a/td/telegram/MessageReplyInfo.cpp +++ b/td/telegram/MessageReplyInfo.cpp @@ -118,10 +118,6 @@ bool MessageReplyInfo::update_max_message_ids(MessageId other_max_message_id, MessageId other_last_read_inbox_message_id, MessageId other_last_read_outbox_message_id) { bool result = false; - if (other_max_message_id > max_message_id) { - max_message_id = other_max_message_id; - result = true; - } if (other_last_read_inbox_message_id > last_read_inbox_message_id) { last_read_inbox_message_id = other_last_read_inbox_message_id; result = true; @@ -130,13 +126,18 @@ bool MessageReplyInfo::update_max_message_ids(MessageId other_max_message_id, last_read_outbox_message_id = other_last_read_outbox_message_id; result = true; } - if (last_read_inbox_message_id > max_message_id) { - max_message_id = last_read_inbox_message_id; - result = true; - } - if (last_read_outbox_message_id > max_message_id) { - max_message_id = last_read_outbox_message_id; - result = true; + if (other_max_message_id.is_valid() || + (!other_last_read_inbox_message_id.is_valid() && !other_last_read_outbox_message_id.is_valid())) { + if (other_max_message_id < last_read_inbox_message_id) { + other_max_message_id = last_read_inbox_message_id; + } + if (other_max_message_id < last_read_outbox_message_id) { + other_max_message_id = last_read_outbox_message_id; + } + if (other_max_message_id != max_message_id) { + max_message_id = other_max_message_id; + result = true; + } } return result; } diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index f263b5200..34a1a4f50 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -21428,7 +21428,7 @@ Status MessagesManager::view_messages(DialogId dialog_id, MessageId top_thread_m return Status::OK(); } - if (top_thread_message_id.is_valid()) { + if (top_thread_message_id.is_valid() && max_message_id.is_valid()) { MessageId prev_last_read_inbox_message_id; MessageId max_thread_message_id; Message *top_m = get_message_force(d, top_thread_message_id, "view_messages 2"); diff --git a/td/telegram/UpdatesManager.cpp b/td/telegram/UpdatesManager.cpp index fa6d0a2ab..8956c631a 100644 --- a/td/telegram/UpdatesManager.cpp +++ b/td/telegram/UpdatesManager.cpp @@ -2939,22 +2939,32 @@ void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { - td_->messages_manager_->on_update_read_message_comments( - DialogId(ChannelId(update->channel_id_)), MessageId(ServerMessageId(update->top_msg_id_)), MessageId(), - MessageId(ServerMessageId(update->read_max_id_)), MessageId()); + auto last_read_inbox_message_id = MessageId(ServerMessageId(update->read_max_id_)); + if (!last_read_inbox_message_id.is_valid()) { + LOG(ERROR) << "Receive " << to_string(update); + return; + } + td_->messages_manager_->on_update_read_message_comments(DialogId(ChannelId(update->channel_id_)), + MessageId(ServerMessageId(update->top_msg_id_)), MessageId(), + last_read_inbox_message_id, MessageId()); if ((update->flags_ & telegram_api::updateReadChannelDiscussionInbox::BROADCAST_ID_MASK) != 0) { - td_->messages_manager_->on_update_read_message_comments( - DialogId(ChannelId(update->broadcast_id_)), MessageId(ServerMessageId(update->broadcast_post_)), MessageId(), - MessageId(ServerMessageId(update->read_max_id_)), MessageId()); + td_->messages_manager_->on_update_read_message_comments(DialogId(ChannelId(update->broadcast_id_)), + MessageId(ServerMessageId(update->broadcast_post_)), + MessageId(), last_read_inbox_message_id, MessageId()); } promise.set_value(Unit()); } void UpdatesManager::on_update(tl_object_ptr update, Promise &&promise) { - td_->messages_manager_->on_update_read_message_comments( - DialogId(ChannelId(update->channel_id_)), MessageId(ServerMessageId(update->top_msg_id_)), MessageId(), - MessageId(), MessageId(ServerMessageId(update->read_max_id_))); + auto last_read_outbox_message_id = MessageId(ServerMessageId(update->read_max_id_)); + if (!last_read_outbox_message_id.is_valid()) { + LOG(ERROR) << "Receive " << to_string(update); + return; + } + td_->messages_manager_->on_update_read_message_comments(DialogId(ChannelId(update->channel_id_)), + MessageId(ServerMessageId(update->top_msg_id_)), MessageId(), + MessageId(), last_read_outbox_message_id); promise.set_value(Unit()); }