From c66b95eb9f1899773fb0f489dea686fb83ecb377 Mon Sep 17 00:00:00 2001 From: levlam Date: Wed, 2 Mar 2022 14:16:06 +0300 Subject: [PATCH] Store Td pointer in DownloadManagerCallback instead of get_actor_unsafe. --- td/telegram/DownloadManagerCallback.h | 36 +++++++++++++-------------- td/telegram/Td.cpp | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/td/telegram/DownloadManagerCallback.h b/td/telegram/DownloadManagerCallback.h index a5761200a..4a6c84dd3 100644 --- a/td/telegram/DownloadManagerCallback.h +++ b/td/telegram/DownloadManagerCallback.h @@ -22,54 +22,53 @@ namespace td { class DownloadManagerCallback final : public DownloadManager::Callback { public: - explicit DownloadManagerCallback(ActorShared<> parent) : parent_(std::move(parent)) { + DownloadManagerCallback(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) { } void update_counters(DownloadManager::Counters counters) final { - send_closure(G()->td(), &Td::send_update, counters.get_update_file_downloads_object()); + send_closure(td_->actor_id(td_), &Td::send_update, counters.get_update_file_downloads_object()); } void update_file_removed(FileId file_id) final { - send_closure(G()->td(), &Td::send_update, + send_closure(td_->actor_id(td_), &Td::send_update, td_api::make_object(file_id.get())); } void start_file(FileId file_id, int8 priority, ActorShared download_manager) final { - send_closure(G()->file_manager(), &FileManager::download, file_id, - make_download_file_callback(std::move(download_manager)), priority, + send_closure(td_->file_manager_actor_, &FileManager::download, file_id, + make_download_file_callback(td_, std::move(download_manager)), priority, FileManager::KEEP_DOWNLOAD_OFFSET, FileManager::IGNORE_DOWNLOAD_LIMIT); } void pause_file(FileId file_id) final { - send_closure(G()->file_manager(), &FileManager::download, file_id, nullptr, 0, FileManager::KEEP_DOWNLOAD_OFFSET, - FileManager::KEEP_DOWNLOAD_LIMIT); + send_closure(td_->file_manager_actor_, &FileManager::download, file_id, nullptr, 0, + FileManager::KEEP_DOWNLOAD_OFFSET, FileManager::KEEP_DOWNLOAD_LIMIT); } void delete_file(FileId file_id) final { - send_closure(G()->file_manager(), &FileManager::delete_file, file_id, Promise(), + send_closure(td_->file_manager_actor_, &FileManager::delete_file, file_id, Promise(), "download manager callback"); } FileId dup_file_id(FileId file_id) final { - auto td = G()->td().get_actor_unsafe(); - return td->file_manager_->dup_file_id(file_id); + return td_->file_manager_->dup_file_id(file_id); } FileView get_file_view(FileId file_id) final { - auto td = G()->td().get_actor_unsafe(); - return td->file_manager_->get_file_view(file_id); + return td_->file_manager_->get_file_view(file_id); } td_api::object_ptr get_file_download_object(FileId file_id, FileSourceId file_source_id, int32 add_date, int32 complete_date, bool is_paused) { - auto td = G()->td().get_actor_unsafe(); - return td_api::make_object(td->file_manager_->get_file_view(file_id).file_id().get(), - td->file_reference_manager_->get_message_object(file_source_id), + return td_api::make_object(td_->file_manager_->get_file_view(file_id).file_id().get(), + td_->file_reference_manager_->get_message_object(file_source_id), add_date, complete_date, is_paused); } private: + Td *td_; ActorShared<> parent_; static std::shared_ptr make_download_file_callback( - ActorShared download_manager) { + Td *td, ActorShared download_manager) { class Impl final : public FileManager::DownloadCallback { public: - explicit Impl(ActorShared download_manager) : download_manager_(std::move(download_manager)) { + Impl(Td *td, ActorShared download_manager) + : td_(td), download_manager_(std::move(download_manager)) { } void on_progress(FileId file_id) final { send_update(file_id, false); @@ -82,6 +81,7 @@ class DownloadManagerCallback final : public DownloadManager::Callback { } private: + Td *td_; ActorShared download_manager_; void send_update(FileId file_id, bool is_paused) const { @@ -92,7 +92,7 @@ class DownloadManagerCallback final : public DownloadManager::Callback { // TODO: handle deleted state? } }; - return std::make_shared(std::move(download_manager)); + return std::make_shared(td, std::move(download_manager)); } }; diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 00cdec6a4..d2f4bbda7 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -3971,7 +3971,7 @@ void Td::init_managers() { G()->set_contacts_manager(contacts_manager_actor_.get()); country_info_manager_ = make_unique(this, create_reference()); country_info_manager_actor_ = register_actor("CountryInfoManager", country_info_manager_.get()); - download_manager_ = DownloadManager::create(td::make_unique(create_reference())); + download_manager_ = DownloadManager::create(td::make_unique(this, create_reference())); download_manager_actor_ = register_actor("DownloadManager", download_manager_.get()); game_manager_ = make_unique(this, create_reference()); game_manager_actor_ = register_actor("GameManager", game_manager_.get());