From a9ba8f5a6c68036e37226083b6e157c107191255 Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 22 Mar 2023 19:52:06 +0300 Subject: [PATCH] Reload promo data sequentially. --- td/telegram/AuthManager.cpp | 2 +- td/telegram/Td.cpp | 16 +++++++++++++++- td/telegram/Td.h | 7 ++++++- td/telegram/net/ConnectionCreator.cpp | 4 ++-- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/td/telegram/AuthManager.cpp b/td/telegram/AuthManager.cpp index c17adc1e8..667b57c2c 100644 --- a/td/telegram/AuthManager.cpp +++ b/td/telegram/AuthManager.cpp @@ -1044,7 +1044,7 @@ void AuthManager::on_get_authorization(tl_object_ptron_online_updated(false, true); if (!is_bot()) { td_->schedule_get_terms_of_service(0); - td_->schedule_get_promo_data(0); + td_->reload_promo_data(); G()->td_db()->get_binlog_pmc()->set("fetched_marks_as_unread", "1"); } else { td_->set_is_bot_online(true); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 120a85ddb..4489a11b4 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -2555,6 +2555,7 @@ void Td::on_alarm_timeout(int64 alarm_id) { } if (alarm_id == PROMO_DATA_ALARM_ID) { if (!close_flag_ && !auth_manager_->is_bot()) { + reloading_promo_data_ = true; auto promise = PromiseCreator::lambda( [actor_id = actor_id(this)](Result> result) { send_closure(actor_id, &Td::on_get_promo_data, std::move(result), false); @@ -2646,6 +2647,7 @@ void Td::on_get_promo_data(Resultclose_flag()) { return; } + reloading_promo_data_ = false; if (r_promo_data.is_error()) { LOG(ERROR) << "Receive error for GetPromoData: " << r_promo_data.error(); @@ -2677,9 +2679,21 @@ void Td::on_get_promo_data(Resultunix_time()); } +void Td::reload_promo_data() { + if (reloading_promo_data_) { + need_reload_promo_data_ = true; + return; + } + schedule_get_promo_data(0); +} + void Td::schedule_get_promo_data(int32 expires_in) { expires_in = expires_in <= 0 ? 0 : clamp(expires_in, 60, 86400); if (!close_flag_ && auth_manager_->is_authorized() && !auth_manager_->is_bot()) { @@ -3693,7 +3707,7 @@ void Td::init(Parameters parameters, Result r_opened_datab } else { updates_manager_->get_difference("init"); schedule_get_terms_of_service(0); - schedule_get_promo_data(0); + reload_promo_data(); } complete_pending_preauthentication_requests([](int32 id) { return true; }); diff --git a/td/telegram/Td.h b/td/telegram/Td.h index 4e629ec83..f86b15674 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -116,7 +116,7 @@ class Td final : public Actor { void schedule_get_terms_of_service(int32 expires_in); - void schedule_get_promo_data(int32 expires_in); + void reload_promo_data(); void on_update(BufferSlice &&update, uint64 auth_key_id); @@ -313,6 +313,9 @@ class Td final : public Actor { bool can_ignore_background_updates_ = false; + bool reloading_promo_data_ = false; + bool need_reload_promo_data_ = false; + bool is_online_ = false; bool is_bot_online_ = false; NetQueryRef update_status_query_; @@ -375,6 +378,8 @@ class Td final : public Actor { std::shared_ptr old_context_; + void schedule_get_promo_data(int32 expires_in); + static int *get_log_verbosity_level(Slice name); template diff --git a/td/telegram/net/ConnectionCreator.cpp b/td/telegram/net/ConnectionCreator.cpp index 2a40518fe..da9ecf0a8 100644 --- a/td/telegram/net/ConnectionCreator.cpp +++ b/td/telegram/net/ConnectionCreator.cpp @@ -419,7 +419,7 @@ void ConnectionCreator::enable_proxy_impl(int32 proxy_id) { void ConnectionCreator::disable_proxy_impl() { if (active_proxy_id_ == 0) { send_closure(G()->messages_manager(), &MessagesManager::remove_sponsored_dialog); - send_closure(G()->td(), &Td::schedule_get_promo_data, 0); + send_closure(G()->td(), &Td::reload_promo_data); return; } CHECK(proxies_.count(active_proxy_id_) == 1); @@ -454,7 +454,7 @@ void ConnectionCreator::on_proxy_changed(bool from_db) { if (active_proxy_id_ == 0 || !from_db) { send_closure(G()->messages_manager(), &MessagesManager::remove_sponsored_dialog); } - send_closure(G()->td(), &Td::schedule_get_promo_data, 0); + send_closure(G()->td(), &Td::reload_promo_data); loop(); }