From 6a3241dc1281f52cb3f4bd29b6e3fb3959dce422 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 1 May 2018 21:12:00 +0300 Subject: [PATCH] Add dummy calc_new_unread_count_from_last_unread. GitOrigin-RevId: eb66e452c3e99344180493491d588e0871b3fd91 --- td/telegram/MessagesManager.cpp | 31 ++++++++++++++++++++++++++----- td/telegram/MessagesManager.h | 5 +++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 01dbf8e1..54e27d77 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -8781,12 +8781,12 @@ bool MessagesManager::read_message_content(Dialog *d, Message *m, bool is_local_ return false; } -int32 MessagesManager::calc_new_unread_count(Dialog *d, MessageId max_message_id, MessageType type, - int32 hint_unread_count) { - if (d->is_empty) { - return 0; - } +int32 MessagesManager::calc_new_unread_count_from_last_unread(Dialog *d, MessageId max_message_id, MessageType type) { + return -1; +} +int32 MessagesManager::calc_new_unread_count_from_the_end(Dialog *d, MessageId max_message_id, MessageType type, + int32 hint_unread_count) { int32 unread_count = 0; MessagesConstIterator it(d, MessageId::max()); while (*it != nullptr && (*it)->message_id.get() > max_message_id.get()) { @@ -8821,6 +8821,27 @@ int32 MessagesManager::calc_new_unread_count(Dialog *d, MessageId max_message_id return unread_count; } +int32 MessagesManager::calc_new_unread_count(Dialog *d, MessageId max_message_id, MessageType type, + int32 hint_unread_count) { + if (d->is_empty) { + return 0; + } + + if (!d->last_read_inbox_message_id.is_valid()) { + return calc_new_unread_count_from_the_end(d, max_message_id, type, hint_unread_count); + } + + if (!d->last_message_id.is_valid() || + (d->last_message_id.get() - max_message_id.get() > max_message_id.get() - d->last_read_inbox_message_id.get())) { + int32 unread_count = calc_new_unread_count_from_last_unread(d, max_message_id, type); + return unread_count >= 0 ? unread_count + : calc_new_unread_count_from_the_end(d, max_message_id, type, hint_unread_count); + } else { + int32 unread_count = calc_new_unread_count_from_the_end(d, max_message_id, type, hint_unread_count); + return unread_count >= 0 ? unread_count : calc_new_unread_count_from_last_unread(d, max_message_id, type); + } +} + void MessagesManager::read_history_inbox(DialogId dialog_id, MessageId max_message_id, int32 unread_count, const char *source) { if (td_->auth_manager_->is_bot()) { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index aa37d3f8..23a81646 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -2080,6 +2080,11 @@ class MessagesManager : public Actor { void read_message_contents_on_server(DialogId dialog_id, vector message_ids, uint64 logevent_id); + static int32 calc_new_unread_count_from_last_unread(Dialog *d, MessageId max_message_id, MessageType type); + + static int32 calc_new_unread_count_from_the_end(Dialog *d, MessageId max_message_id, MessageType type, + int32 hint_unread_count); + static int32 calc_new_unread_count(Dialog *d, MessageId max_message_id, MessageType type, int32 hint_unread_count); void read_history_inbox(DialogId dialog_id, MessageId max_message_id, int32 unread_count, const char *source);