aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2026-06-29 00:56:02 +0300
committerlevlam <levlam@telegram.org>2026-06-29 00:56:02 +0300
commit73aaf6fe5847ed2c5e47e577de258089ab8929dd (patch)
treef599ff265a779dec8db2a454d8f74bf15e76448a
parent8f5d91f0be7ad92ee390ca6dc2d26249f7816cc5 (diff)
Store Td pointer in FileReferenceManager.
-rw-r--r--td/telegram/FileReferenceManager.cpp19
-rw-r--r--td/telegram/FileReferenceManager.h5
-rw-r--r--td/telegram/Td.cpp5
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());
}