Explicitly attach messages to the next in on_get_history.
This commit is contained in:
parent
042c75df63
commit
87b658f2e2
@ -9977,10 +9977,13 @@ void MessagesManager::on_get_history(DialogId dialog_id, MessageId from_message_
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto full_message_id =
|
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();
|
auto message_id = full_message_id.get_message_id();
|
||||||
if (message_id.is_valid()) {
|
if (message_id.is_valid()) {
|
||||||
CHECK(message_id == expected_message_id);
|
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()) {
|
if (!last_added_message_id.is_valid()) {
|
||||||
last_added_message_id = message_id;
|
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);
|
auto old_message = get_message(d, message->message_id);
|
||||||
Message *m = old_message ? old_message
|
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");
|
&need_update_dialog_pos, "on_get_history_from_database");
|
||||||
if (m != nullptr) {
|
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;
|
first_added_message_id = m->message_id;
|
||||||
if (!last_added_message_id.is_valid()) {
|
if (!last_added_message_id.is_valid()) {
|
||||||
last_added_message_id = m->message_id;
|
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)) {
|
if (!from_database && (from_update || message->edit_date >= m->edit_date)) {
|
||||||
const int32 INDEX_MASK_MASK = ~(message_search_filter_index_mask(MessageSearchFilter::UnreadMention) |
|
const int32 INDEX_MASK_MASK = ~(message_search_filter_index_mask(MessageSearchFilter::UnreadMention) |
|
||||||
message_search_filter_index_mask(MessageSearchFilter::UnreadReaction));
|
message_search_filter_index_mask(MessageSearchFilter::UnreadReaction));
|
||||||
|
@ -24,7 +24,7 @@ void OrderedMessages::insert(MessageId message_id, bool auto_attach, bool have_p
|
|||||||
if (!is_attached && !have_previous && !have_next) {
|
if (!is_attached && !have_previous && !have_next) {
|
||||||
auto it = get_iterator(message_id);
|
auto it = get_iterator(message_id);
|
||||||
if (*it != nullptr && (*it)->have_next_) {
|
if (*it != nullptr && (*it)->have_next_) {
|
||||||
// need to drop a connection between messages
|
// need to drop the connection between messages
|
||||||
auto previous_message = *it;
|
auto previous_message = *it;
|
||||||
CHECK(previous_message->message_id_ < message_id);
|
CHECK(previous_message->message_id_ < message_id);
|
||||||
++it;
|
++it;
|
||||||
@ -52,6 +52,10 @@ void OrderedMessages::insert(MessageId message_id, bool auto_attach, bool have_p
|
|||||||
auto message = make_unique<OrderedMessage>();
|
auto message = make_unique<OrderedMessage>();
|
||||||
message->message_id_ = message_id;
|
message->message_id_ = message_id;
|
||||||
message->random_y_ = random_y;
|
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> *left = &message->left_;
|
||||||
unique_ptr<OrderedMessage> *right = &message->right_;
|
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(*left == nullptr);
|
||||||
CHECK(*right == nullptr);
|
CHECK(*right == nullptr);
|
||||||
*v = std::move(message);
|
*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) {
|
void OrderedMessages::erase(MessageId message_id, bool only_from_memory) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user