From dbc7ffcca52c4e4d0d8e678475b3c15439b7ab1f Mon Sep 17 00:00:00 2001 From: levlam Date: Mon, 11 Oct 2021 10:03:34 +0300 Subject: [PATCH] Force unread count recalculation after each loaded chat list slice. --- td/telegram/MessagesManager.cpp | 19 ++++++------------- td/telegram/MessagesManager.h | 2 +- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 6f2ce0898..a11692326 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -11550,7 +11550,7 @@ void MessagesManager::on_get_secret_chat_total_count(DialogListId dialog_list_id } } -void MessagesManager::recalc_unread_count(DialogListId dialog_list_id, int32 old_dialog_total_count) { +void MessagesManager::recalc_unread_count(DialogListId dialog_list_id, int32 old_dialog_total_count, bool force) { if (G()->close_flag() || td_->auth_manager_->is_bot() || !G()->parameters().use_message_db) { return; } @@ -11558,7 +11558,7 @@ void MessagesManager::recalc_unread_count(DialogListId dialog_list_id, int32 old auto *list_ptr = get_dialog_list(dialog_list_id); CHECK(list_ptr != nullptr); auto &list = *list_ptr; - if (!list.need_unread_count_recalc_) { + if (!list.need_unread_count_recalc_ && !force) { return; } LOG(INFO) << "Recalculate unread counts in " << dialog_list_id; @@ -11635,7 +11635,7 @@ void MessagesManager::recalc_unread_count(DialogListId dialog_list_id, int32 old } } else { if (list.server_dialog_total_count_ == -1) { - // recalc_unread_count is called only after getDialogs request; it is unneeded to call it again + // recalc_unread_count is called only after getDialogs request; it is unneeded to call getDialogs again repair_server_dialog_total_count(dialog_list_id); } @@ -14399,8 +14399,6 @@ void MessagesManager::on_get_dialogs(FolderId folder_id, vectorlast_server_dialog_date_ == MIN_DIALOG_DATE; if (from_dialog_list && total_count < narrow_cast(dialogs.size())) { LOG(ERROR) << "Receive chat total_count = " << total_count << ", but " << dialogs.size() << " chats"; total_count = narrow_cast(dialogs.size()); @@ -14683,11 +14681,6 @@ void MessagesManager::on_get_dialogs(FolderId folder_id, vector result) { if (result.is_ok()) { - send_closure(actor_id, &MessagesManager::recalc_unread_count, DialogListId(folder_id), -1); + send_closure(actor_id, &MessagesManager::recalc_unread_count, DialogListId(folder_id), -1, true); } })); auto lock = multipromise.get_promise(); @@ -15933,7 +15926,7 @@ void MessagesManager::preload_folder_dialog_list(FolderId folder_id) { // otherwise load more dialogs from the server load_folder_dialog_list(folder_id, MAX_GET_DIALOGS, false); } else { - recalc_unread_count(DialogListId(folder_id)); + recalc_unread_count(DialogListId(folder_id), -1, false); } } @@ -35339,7 +35332,7 @@ void MessagesManager::update_list_last_dialog_date(DialogList &list) { } if (list.list_last_dialog_date_ == MAX_DIALOG_DATE) { - recalc_unread_count(list.dialog_list_id, old_dialog_total_count); + recalc_unread_count(list.dialog_list_id, old_dialog_total_count, true); } LOG(INFO) << "After updating last dialog date in " << list.dialog_list_id << " to " << list.list_last_dialog_date_ diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index f65ba0c97..e482e0fc4 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2376,7 +2376,7 @@ class MessagesManager final : public Actor { void on_get_secret_chat_total_count(DialogListId dialog_list_id, int32 total_count); - void recalc_unread_count(DialogListId dialog_list_id, int32 old_dialog_total_count = -1); + void recalc_unread_count(DialogListId dialog_list_id, int32 old_dialog_total_count, bool force); td_api::object_ptr get_update_chat_filters_object() const;