diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 90571e422..c0d6347fb 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -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)); diff --git a/td/telegram/OrderedMessage.cpp b/td/telegram/OrderedMessage.cpp index 12a359852..b5709fa85 100644 --- a/td/telegram/OrderedMessage.cpp +++ b/td/telegram/OrderedMessage.cpp @@ -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(); 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 *left = &message->left_; unique_ptr *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) {