diff options
| author | levlam <levlam@telegram.org> | 2026-06-29 00:56:02 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2026-06-29 00:56:02 +0300 |
| commit | 73aaf6fe5847ed2c5e47e577de258089ab8929dd (patch) | |
| tree | f599ff265a779dec8db2a454d8f74bf15e76448a | |
| parent | 8f5d91f0be7ad92ee390ca6dc2d26249f7816cc5 (diff) | |
Store Td pointer in FileReferenceManager.
| -rw-r--r-- | td/telegram/FileReferenceManager.cpp | 19 | ||||
| -rw-r--r-- | td/telegram/FileReferenceManager.h | 5 | ||||
| -rw-r--r-- | td/telegram/Td.cpp | 5 |
3 files changed, 14 insertions, 15 deletions
diff --git a/td/telegram/FileReferenceManager.cpp b/td/telegram/FileReferenceManager.cpp index 762afd9f2..317b12767 100644 --- a/td/telegram/FileReferenceManager.cpp +++ b/td/telegram/FileReferenceManager.cpp @@ -43,7 +43,7 @@ namespace td { int VERBOSITY_NAME(file_references) = VERBOSITY_NAME(INFO); -FileReferenceManager::FileReferenceManager(ActorShared<> parent) : parent_(std::move(parent)) { +FileReferenceManager::FileReferenceManager(Td *td, ActorShared<> parent) : td_(td), parent_(std::move(parent)) { } FileReferenceManager::~FileReferenceManager() { @@ -108,7 +108,6 @@ bool FileReferenceManager::process_file_reference_error(const Status &status, bo const vector<FileId> &cover_file_ids, const vector<string> &cover_file_references, bool expect_index, std::function<void(size_t pos)> on_error) { - auto *td_ = G()->td().get_actor_unsafe(); if (td_->auth_manager_->is_bot() || !is_file_reference_error(status)) { return false; } @@ -150,7 +149,6 @@ bool FileReferenceManager::process_file_reference_error(const Status &status, co const vector<FileId> &cover_file_ids, const vector<string> &cover_file_references, bool expect_index, std::function<void(size_t pos)> on_error) { - auto *td_ = G()->td().get_actor_unsafe(); if (td_->auth_manager_->is_bot() || !is_file_reference_error(status)) { return false; } @@ -641,7 +639,7 @@ FileReferenceManager::Destination FileReferenceManager::on_query_result(Destinat } void FileReferenceManager::repair_file_reference(NodeId node_id, Promise<> promise) { - auto main_file_id = G()->td().get_actor_unsafe()->file_manager_->get_file_view(node_id).get_main_file_id(); + auto main_file_id = td_->file_manager_->get_file_view(node_id).get_main_file_id(); VLOG(file_references) << "Repair file reference for file " << node_id << "/" << main_file_id; node_id = main_file_id; auto &node = add_node(node_id); @@ -656,20 +654,20 @@ void FileReferenceManager::repair_file_reference(NodeId node_id, Promise<> promi } void FileReferenceManager::reload_photo(PhotoSizeSource source, Promise<Unit> promise) { + TRY_STATUS_PROMISE(promise, G()->close_status()); switch (source.get_type("reload_photo")) { case PhotoSizeSource::Type::DialogPhotoBig: case PhotoSizeSource::Type::DialogPhotoSmall: case PhotoSizeSource::Type::DialogPhotoBigLegacy: case PhotoSizeSource::Type::DialogPhotoSmallLegacy: - send_closure(G()->dialog_manager(), &DialogManager::reload_dialog_info, source.dialog_photo().dialog_id, - std::move(promise)); + td_->dialog_manager_->reload_dialog_info(source.dialog_photo().dialog_id, std::move(promise)); break; case PhotoSizeSource::Type::StickerSetThumbnail: case PhotoSizeSource::Type::StickerSetThumbnailLegacy: case PhotoSizeSource::Type::StickerSetThumbnailVersion: - send_closure(G()->stickers_manager(), &StickersManager::reload_sticker_set, - StickerSetId(source.sticker_set_thumbnail().sticker_set_id), - source.sticker_set_thumbnail().sticker_set_access_hash, std::move(promise)); + td_->stickers_manager_->reload_sticker_set(StickerSetId(source.sticker_set_thumbnail().sticker_set_id), + source.sticker_set_thumbnail().sticker_set_access_hash, + std::move(promise)); break; case PhotoSizeSource::Type::Legacy: case PhotoSizeSource::Type::FullLegacy: @@ -699,8 +697,7 @@ td_api::object_ptr<td_api::message> FileReferenceManager::get_message_object(Fil td_api::object_ptr<td_api::message> result; file_sources_[index].visit(overloaded( [&](const FileSourceMessage &source) { - result = G()->td().get_actor_unsafe()->messages_manager_->get_message_object(source.message_full_id, - "FileReferenceManager"); + result = td_->messages_manager_->get_message_object(source.message_full_id, "FileReferenceManager"); }, [&](const auto &source) { LOG(ERROR) << "Unsupported file source"; })); return result; diff --git a/td/telegram/FileReferenceManager.h b/td/telegram/FileReferenceManager.h index 114ecf609..054f6bde6 100644 --- a/td/telegram/FileReferenceManager.h +++ b/td/telegram/FileReferenceManager.h @@ -42,7 +42,7 @@ extern int VERBOSITY_NAME(file_references); class FileReferenceManager final : public Actor { public: - explicit FileReferenceManager(ActorShared<> parent); + FileReferenceManager(Td *td, ActorShared<> parent); FileReferenceManager(const FileReferenceManager &) = delete; FileReferenceManager &operator=(const FileReferenceManager &) = delete; FileReferenceManager(FileReferenceManager &&) = delete; @@ -102,7 +102,7 @@ class FileReferenceManager final : public Actor { td_api::object_ptr<td_api::message> get_message_object(FileSourceId file_source_id) const; - static void reload_photo(PhotoSizeSource source, Promise<Unit> promise); + void reload_photo(PhotoSizeSource source, Promise<Unit> promise); bool add_file_source(NodeId node_id, FileSourceId file_source_id, const char *source); @@ -248,6 +248,7 @@ class FileReferenceManager final : public Actor { WaitFreeHashMap<NodeId, unique_ptr<Node>, FileIdHash> nodes_; + Td *td_; ActorShared<> parent_; Node &add_node(NodeId node_id); diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 042a4b322..866464da1 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -1108,7 +1108,8 @@ void Td::init_file_manager() { } void reload_photo(PhotoSizeSource source, Promise<Unit> promise) final { - FileReferenceManager::reload_photo(std::move(source), std::move(promise)); + send_closure(G()->file_reference_manager(), &FileReferenceManager::reload_photo, std::move(source), + std::move(promise)); } bool keep_exact_remote_location() final { @@ -1128,7 +1129,7 @@ void Td::init_file_manager() { file_manager_->init_actor(); G()->set_file_manager(file_manager_actor_.get()); - file_reference_manager_ = make_unique<FileReferenceManager>(create_reference()); + file_reference_manager_ = make_unique<FileReferenceManager>(this, create_reference()); file_reference_manager_actor_ = register_actor("FileReferenceManager", file_reference_manager_.get()); G()->set_file_reference_manager(file_reference_manager_actor_.get()); } |
