From 54909ad713627196f0ea6163dd623cc1d61c1df4 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 22 May 2020 03:58:36 +0300 Subject: [PATCH] Improve message_count updating. GitOrigin-RevId: 365ac733fc40c06fc959376246c9c4b2b1987a10 --- td/telegram/MessagesManager.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 70199e65..bee6c03c 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -7870,7 +7870,7 @@ void MessagesManager::on_get_history(DialogId dialog_id, MessageId from_message_ CHECK(offset < 0 || from_the_end); CHECK(!from_message_id.is_scheduled()); - // it is likely that there is no more history messages on the server + // it is likely that there are no more history messages on the server bool have_full_history = from_the_end && narrow_cast(messages.size()) < limit; Dialog *d = get_dialog(dialog_id); @@ -7925,7 +7925,7 @@ void MessagesManager::on_get_history(DialogId dialog_id, MessageId from_message_ MessageId first_received_message_id = get_message_id(messages.back(), false); if (first_received_message_id >= from_message_id && d->first_database_message_id.is_valid() && first_received_message_id >= d->first_database_message_id) { - // it is likely that there is no more history messages on the server + // it is likely that there are no more history messages on the server have_full_history = true; } } @@ -8193,18 +8193,20 @@ void MessagesManager::on_get_dialog_messages_search_result(DialogId dialog_id, c MessageId first_added_message_id; if (messages.empty()) { - // messages may be empty because there is no more messages or they can't be found due to global limit - // anyway pretend that there is no more messages + // messages may be empty because there are no more messages or they can't be found due to global limit + // anyway pretend that there are no more messages first_added_message_id = MessageId::min(); } auto &result = it->second.second; CHECK(result.empty()); + int32 added_message_count = 0; for (auto &message : messages) { auto new_full_message_id = on_get_message(std::move(message), false, false, false, false, false, "search call messages"); if (new_full_message_id != FullMessageId()) { result.push_back(new_full_message_id); + added_message_count++; } auto message_id = new_full_message_id.get_message_id(); @@ -8212,6 +8214,11 @@ void MessagesManager::on_get_dialog_messages_search_result(DialogId dialog_id, c first_added_message_id = message_id; } } + if (total_count < added_message_count) { + LOG(ERROR) << "Receive total_count = " << total_count << ", but added " << added_message_count + << " messages out of " << messages.size(); + total_count = added_message_count; + } if (G()->parameters().use_message_db) { bool update_state = false; @@ -8248,7 +8255,7 @@ void MessagesManager::on_get_dialog_messages_search_result(DialogId dialog_id, c CHECK(result.empty()); MessageId first_added_message_id; if (messages.empty()) { - // messages may be empty because there is no more messages or they can't be found due to global limit + // messages may be empty because there are no more messages or they can't be found due to global limit // anyway pretend that there is no more messages first_added_message_id = MessageId::min(); } @@ -16964,8 +16971,9 @@ void MessagesManager::on_search_dialog_messages_db_result(int64 random_id, Dialo int32 result_size = narrow_cast(res.size()); bool from_the_end = from_message_id == MessageId::max() || (offset < 0 && (result_size == 0 || res[0] < from_message_id)); - if (message_count < result_size || (message_count > result_size && from_the_end && - first_db_message_id == MessageId::min() && result_size < limit + offset)) { + if ((message_count != -1 && message_count < result_size) || + (message_count > result_size && from_the_end && first_db_message_id == MessageId::min() && + result_size < limit + offset)) { LOG(INFO) << "Fix found message count in " << dialog_id << " from " << message_count << " to " << result_size; message_count = result_size; if (filter_type == SearchMessagesFilter::UnreadMention) { @@ -28617,7 +28625,7 @@ void MessagesManager::update_dialog_pos(Dialog *d, const char *source, bool need } } if (new_order == DEFAULT_ORDER && !d->is_empty) { - LOG(INFO) << "There is no known messages in the chat, just leave it where it is"; + LOG(INFO) << "There are no known messages in the chat, just leave it where it is"; new_order = d->order; } }