From fef67252d1600e2bea1ae982b9cb81dab09b90d2 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 7 Apr 2020 23:11:44 +0300 Subject: [PATCH] Reload ChannelFull before getting channel statistics if needed. GitOrigin-RevId: 0730f4a8411bf2e5e2841bc95f1960b6619742c6 --- td/telegram/ContactsManager.cpp | 22 ++++++++++++++++++++++ td/telegram/ContactsManager.h | 2 ++ 2 files changed, 24 insertions(+) diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index eedc5c45..ed6b0745 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -5727,6 +5727,28 @@ void ContactsManager::get_channel_statistics_dc_id(DialogId dialog_id, Promisestats_dc_id.is_exact()) { + auto input_channel = get_input_channel(channel_id); + CHECK(input_channel != nullptr); + auto query_promise = PromiseCreator::lambda( + [actor_id = actor_id(this), channel_id, promise = std::move(promise)](Result result) mutable { + send_closure(actor_id, &ContactsManager::get_channel_statistics_dc_id_impl, channel_id, std::move(promise)); + }); + + send_get_channel_full_query(channel_full, channel_id, std::move(input_channel), std::move(query_promise), + "get_channel_statistics_dc_id"); + return; + } + + promise.set_value(DcId(channel_full->stats_dc_id)); +} + +void ContactsManager::get_channel_statistics_dc_id_impl(ChannelId channel_id, Promise &&promise) { + if (G()->close_flag()) { + return promise.set_error(Status::Error(500, "Request aborted")); + } + + auto channel_full = get_channel_full(channel_id, "get_channel_statistics_dc_id_impl"); if (channel_full == nullptr) { return promise.set_error(Status::Error(400, "Chat full info not found")); } diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index f16920f7..ffe34550 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -1340,6 +1340,8 @@ class ContactsManager : public Actor { void get_channel_statistics_dc_id(DialogId dialog_id, Promise &&promise); + void get_channel_statistics_dc_id_impl(ChannelId channel_id, Promise &&promise); + void send_get_broadcast_stats_query(DcId dc_id, ChannelId channel_id, bool is_dark, Promise> &&promise);