From 7dffe5aabec9832cc277b149c665df7d223d6b7d Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 3 Sep 2021 09:07:18 +0300 Subject: [PATCH] Use Promise instead of RequestActor in getBackgrounds. --- td/telegram/BackgroundManager.cpp | 11 ++++++----- td/telegram/BackgroundManager.h | 8 ++++---- td/telegram/Td.cpp | 20 ++------------------ 3 files changed, 12 insertions(+), 27 deletions(-) diff --git a/td/telegram/BackgroundManager.cpp b/td/telegram/BackgroundManager.cpp index f4057c5ab..e5346d78f 100644 --- a/td/telegram/BackgroundManager.cpp +++ b/td/telegram/BackgroundManager.cpp @@ -411,8 +411,9 @@ void BackgroundManager::tear_down() { parent_.reset(); } -void BackgroundManager::get_backgrounds(Promise &&promise) { - pending_get_backgrounds_queries_.push_back(std::move(promise)); +void BackgroundManager::get_backgrounds(bool for_dark_theme, + Promise> &&promise) { + pending_get_backgrounds_queries_.emplace_back(for_dark_theme, std::move(promise)); if (pending_get_backgrounds_queries_.size() == 1) { auto request_promise = PromiseCreator::lambda( [actor_id = actor_id(this)](Result> result) { @@ -1142,7 +1143,7 @@ void BackgroundManager::on_get_backgrounds(Resultget_id() == telegram_api::account_wallPapersNotModified::ID) { for (auto &promise : promises) { - promise.set_value(Unit()); + promise.second.set_value(get_backgrounds_object(promise.first)); } return; } @@ -1166,7 +1167,7 @@ void BackgroundManager::on_get_backgrounds(Result parent); - void get_backgrounds(Promise &&promise); + void get_backgrounds(bool for_dark_theme, Promise> &&promise); Result get_background_url(const string &name, td_api::object_ptr background_type) const; @@ -53,8 +53,6 @@ class BackgroundManager final : public Actor { td_api::object_ptr get_background_object(BackgroundId background_id, bool for_dark_theme, const BackgroundType *type) const; - td_api::object_ptr get_backgrounds_object(bool for_dark_theme) const; - std::pair on_get_background( BackgroundId expected_background_id, const string &expected_background_name, telegram_api::object_ptr wallpaper_ptr, bool replace_type); @@ -110,6 +108,8 @@ class BackgroundManager final : public Actor { td_api::object_ptr get_update_selected_background_object(bool for_dark_theme) const; + td_api::object_ptr get_backgrounds_object(bool for_dark_theme) const; + void send_update_selected_background(bool for_dark_theme) const; void set_max_local_background_id(BackgroundId background_id); @@ -170,7 +170,7 @@ class BackgroundManager final : public Actor { vector> installed_backgrounds_; - vector> pending_get_backgrounds_queries_; + vector>>> pending_get_backgrounds_queries_; std::shared_ptr upload_background_file_callback_; diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index e2f91ba92..62492a0b3 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -2846,23 +2846,6 @@ class GetSupportUserRequest final : public RequestActor<> { } }; -class GetBackgroundsRequest final : public RequestOnceActor { - bool for_dark_theme_; - - void do_run(Promise &&promise) final { - td->background_manager_->get_backgrounds(std::move(promise)); - } - - void do_send_result() final { - send_result(td->background_manager_->get_backgrounds_object(for_dark_theme_)); - } - - public: - GetBackgroundsRequest(ActorShared td, uint64 request_id, bool for_dark_theme) - : RequestOnceActor(std::move(td), request_id), for_dark_theme_(for_dark_theme) { - } -}; - class SearchBackgroundRequest final : public RequestActor<> { string name_; @@ -8041,7 +8024,8 @@ void Td::on_request(uint64 id, const td_api::getSupportUser &request) { void Td::on_request(uint64 id, const td_api::getBackgrounds &request) { CHECK_IS_USER(); - CREATE_REQUEST(GetBackgroundsRequest, request.for_dark_theme_); + CREATE_REQUEST_PROMISE(); + background_manager_->get_backgrounds(request.for_dark_theme_, std::move(promise)); } void Td::on_request(uint64 id, td_api::getBackgroundUrl &request) {