From 60e5854fcf4a3877146e80b9e5ad5c76d45d0be7 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 26 Feb 2019 03:41:49 +0300 Subject: [PATCH] Send updateChatOnlineMemberCount whenever dialog is opened. GitOrigin-RevId: e85a9f04705da10e6b148d0d4c1b843241620c42 --- td/telegram/MessagesManager.cpp | 20 ++++++++++++++++++++ td/telegram/MessagesManager.h | 3 +++ 2 files changed, 23 insertions(+) diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 7af01043f..f4df68ffc 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -12833,6 +12833,18 @@ void MessagesManager::open_dialog(Dialog *d) { default: UNREACHABLE(); } + + if (!td_->auth_manager_->is_bot()) { + auto online_count_it = dialog_online_member_counts_.find(d->dialog_id); + if (online_count_it != dialog_online_member_counts_.end()) { + auto &info = online_count_it->second; + CHECK(!info.is_update_sent); + if (Time::now() - info.updated_time < ONLINE_MEMBER_COUNT_CACHE_EXPIRE_TIME) { + info.is_update_sent = true; + send_update_chat_online_member_count(d->dialog_id, info.online_member_count); + } + } + } } void MessagesManager::close_dialog(Dialog *d) { @@ -12883,6 +12895,14 @@ void MessagesManager::close_dialog(Dialog *d) { default: UNREACHABLE(); } + + if (!td_->auth_manager_->is_bot()) { + auto online_count_it = dialog_online_member_counts_.find(d->dialog_id); + if (online_count_it != dialog_online_member_counts_.end()) { + auto &info = online_count_it->second; + info.is_update_sent = false; + } + } } tl_object_ptr MessagesManager::get_chat_type_object(DialogId dialog_id) const { diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 512f06f7c..b18bd262d 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -1240,6 +1240,9 @@ class MessagesManager : public Actor { static constexpr int32 USERNAME_CACHE_EXPIRE_TIME = 3 * 86400; static constexpr int32 USERNAME_CACHE_EXPIRE_TIME_SHORT = 900; + static constexpr int32 ONLINE_MEMBER_COUNT_CACHE_EXPIRE_TIME = 30 * 60; + static constexpr int32 ONLINE_MEMBER_COUNT_UPDATE_TIME = 5 * 60; + static constexpr int32 MAX_RESEND_DELAY = 86400; // seconds, some resonable limit static constexpr int32 MAX_PRELOADED_DIALOGS = 1000;