Explicitly attach messages to the next in on_get_history.

This commit is contained in:
levlam 2023-05-11 19:21:58 +03:00
parent 042c75df63
commit 87b658f2e2
2 changed files with 13 additions and 23 deletions

View File

@ -9977,10 +9977,13 @@ void MessagesManager::on_get_history(DialogId dialog_id, MessageId from_message_
}
auto full_message_id =
on_get_message(std::move(message), false, is_channel_message, false, false, have_next, "get history");
on_get_message(std::move(message), false, is_channel_message, false, false, false, "get history");
auto message_id = full_message_id.get_message_id();
if (message_id.is_valid()) {
CHECK(message_id == expected_message_id);
if (have_next) {
d->ordered_messages.attach_message_to_next(message_id, "on_get_history");
}
if (!last_added_message_id.is_valid()) {
last_added_message_id = message_id;
}
@ -23248,9 +23251,12 @@ void MessagesManager::on_get_history_from_database(DialogId dialog_id, MessageId
auto old_message = get_message(d, message->message_id);
Message *m = old_message ? old_message
: add_message_to_dialog(d, std::move(message), true, false, have_next, false, &need_update,
: add_message_to_dialog(d, std::move(message), true, false, false, false, &need_update,
&need_update_dialog_pos, "on_get_history_from_database");
if (m != nullptr) {
if (have_next) {
d->ordered_messages.attach_message_to_next(m->message_id, "on_get_history");
}
first_added_message_id = m->message_id;
if (!last_added_message_id.is_valid()) {
last_added_message_id = m->message_id;
@ -34449,14 +34455,6 @@ MessagesManager::Message *MessagesManager::add_message_to_dialog(Dialog *d, uniq
}
}
}
if (!auto_attach && !from_database && !td_->auth_manager_->is_bot()) {
if (have_previous) {
CHECK(!have_next);
d->ordered_messages.attach_message_to_previous(message_id, source);
} else if (have_next) {
d->ordered_messages.attach_message_to_next(message_id, source);
}
}
if (!from_database && (from_update || message->edit_date >= m->edit_date)) {
const int32 INDEX_MASK_MASK = ~(message_search_filter_index_mask(MessageSearchFilter::UnreadMention) |
message_search_filter_index_mask(MessageSearchFilter::UnreadReaction));

View File

@ -24,7 +24,7 @@ void OrderedMessages::insert(MessageId message_id, bool auto_attach, bool have_p
if (!is_attached && !have_previous && !have_next) {
auto it = get_iterator(message_id);
if (*it != nullptr && (*it)->have_next_) {
// need to drop a connection between messages
// need to drop the connection between messages
auto previous_message = *it;
CHECK(previous_message->message_id_ < message_id);
++it;
@ -52,6 +52,10 @@ void OrderedMessages::insert(MessageId message_id, bool auto_attach, bool have_p
auto message = make_unique<OrderedMessage>();
message->message_id_ = message_id;
message->random_y_ = random_y;
if (is_attached) {
message->have_previous_ = have_previous;
message->have_next_ = have_next;
}
unique_ptr<OrderedMessage> *left = &message->left_;
unique_ptr<OrderedMessage> *right = &message->right_;
@ -71,18 +75,6 @@ void OrderedMessages::insert(MessageId message_id, bool auto_attach, bool have_p
CHECK(*left == nullptr);
CHECK(*right == nullptr);
*v = std::move(message);
if (!is_attached) {
if (have_next) {
CHECK(!have_previous);
attach_message_to_next(message_id, source);
} else if (have_previous) {
attach_message_to_previous(message_id, source);
}
} else {
(*v)->have_previous_ = have_previous;
(*v)->have_next_ = have_next;
}
}
void OrderedMessages::erase(MessageId message_id, bool only_from_memory) {