aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2026-06-28 22:27:02 +0300
committerlevlam <levlam@telegram.org>2026-06-28 22:27:02 +0300
commit213f7141c60236c0fc2d8384f14e91701e3344a1 (patch)
treeadf6f11f13716f16a66e6c19b74842ae24e5e997
parente9e18e20cc87c6d197cdbf3405fa4e76c0ba6300 (diff)
Use process_file_reference_error in MessagesManager.
-rw-r--r--td/telegram/MessagesManager.cpp109
1 files changed, 22 insertions, 87 deletions
diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp
index 0216008a6..273239c65 100644
--- a/td/telegram/MessagesManager.cpp
+++ b/td/telegram/MessagesManager.cpp
@@ -1498,30 +1498,12 @@ class SendMultiMediaQuery final : public Td::ResultHandler {
return;
}
LOG(INFO) << "Receive error for SendMultiMedia: " << status;
- if (!td_->auth_manager_->is_bot() && FileReferenceManager::is_file_reference_error(status)) {
- auto source = FileReferenceManager::get_file_reference_error_source(status);
- auto pos = source.pos_;
- if (source.is_cover_) {
- if (1 <= pos && pos <= cover_file_ids_.size() && cover_file_ids_[pos - 1].is_valid()) {
- VLOG(file_references) << "Receive " << status << " for cover " << cover_file_ids_[pos - 1];
- td_->file_manager_->delete_file_reference(cover_file_ids_[pos - 1], cover_file_references_[pos - 1]);
- td_->messages_manager_->on_send_media_group_file_reference_error(dialog_id_, std::move(random_ids_));
- return;
- } else {
- LOG(ERROR) << "Receive file reference error " << status << ", but cover_file_ids = " << cover_file_ids_
- << ", message_count = " << cover_file_ids_.size();
- }
- } else {
- if (1 <= pos && pos <= file_upload_ids_.size() && file_upload_ids_[pos - 1].is_valid()) {
- VLOG(file_references) << "Receive " << status << " for " << file_upload_ids_[pos - 1];
- td_->file_manager_->delete_file_reference(file_upload_ids_[pos - 1].get_file_id(), file_references_[pos - 1]);
- td_->messages_manager_->on_send_media_group_file_reference_error(dialog_id_, std::move(random_ids_));
- return;
- } else {
- LOG(ERROR) << "Receive file reference error " << status << ", but file_upload_ids = " << file_upload_ids_
- << ", message_count = " << file_upload_ids_.size();
- }
- }
+ if (td_->file_reference_manager_->process_file_reference_error(
+ status, false, file_upload_ids_, file_references_, cover_file_ids_, cover_file_references_, true,
+ [&](size_t pos) mutable {
+ td_->messages_manager_->on_send_media_group_file_reference_error(dialog_id_, std::move(random_ids_));
+ })) {
+ return;
}
auto star_count = MessagesManager::get_required_paid_message_star_count(status.code(), status.message());
if (star_count > 0) {
@@ -1660,34 +1642,10 @@ class SendMediaQuery final : public Td::ResultHandler {
// do not send error, message will be re-sent after restart
return;
}
- if (!td_->auth_manager_->is_bot() && FileReferenceManager::is_file_reference_error(status)) {
- auto source = FileReferenceManager::get_file_reference_error_source(status);
- auto pos = source.pos_;
- if (pos > 0) {
- pos--;
- }
- if (source.is_cover_) {
- if (pos < cover_file_ids_.size() && pos < cover_file_references_.size()) {
- VLOG(file_references) << "Receive " << status << " for cover " << cover_file_ids_[pos];
- td_->file_manager_->delete_file_reference(cover_file_ids_[pos], cover_file_references_[pos]);
- td_->messages_manager_->on_send_message_file_error(random_id_, pos, {-1});
- return;
- } else {
- LOG(ERROR) << "Receive file reference error " << pos << ", but cover_file_ids = " << cover_file_ids_
- << ", file_references = " << cover_file_references_;
- }
- } else {
- if (pos < file_upload_ids_.size() && pos < file_references_.size() && !was_uploaded_ &&
- file_upload_ids_[pos].is_valid()) {
- VLOG(file_references) << "Receive " << status << " for " << file_upload_ids_[pos];
- td_->file_manager_->delete_file_reference(file_upload_ids_[pos].get_file_id(), file_references_[pos]);
- td_->messages_manager_->on_send_message_file_error(random_id_, pos, {-1});
- return;
- } else {
- LOG(ERROR) << "Receive file reference error " << pos << ", but file_upload_ids = " << file_upload_ids_
- << ", was_uploaded = " << was_uploaded_ << ", file_references = " << file_references_;
- }
- }
+ if (td_->file_reference_manager_->process_file_reference_error(
+ status, was_uploaded_, file_upload_ids_, file_references_, cover_file_ids_, cover_file_references_, false,
+ [&](size_t pos) mutable { td_->messages_manager_->on_send_message_file_error(random_id_, pos, {-1}); })) {
+ return;
}
if (was_uploaded_) {
if (was_thumbnail_uploaded_) {
@@ -1778,17 +1736,12 @@ class UploadMediaQuery final : public Td::ResultHandler {
return;
}
td_->dialog_manager_->on_get_dialog_error(dialog_id_, status, "UploadMediaQuery");
- if (!td_->auth_manager_->is_bot() && FileReferenceManager::is_file_reference_error(status)) {
- auto source = FileReferenceManager::get_file_reference_error_source(status);
- if (source.is_cover_ && source.pos_ <= 1 && cover_file_id_.is_valid()) {
- VLOG(file_references) << "Receive " << status << " for cover " << cover_file_id_;
- td_->file_manager_->delete_file_reference(cover_file_id_, cover_file_reference_);
- td_->messages_manager_->on_upload_message_media_file_parts_missing(dialog_id_, message_id_, media_pos_,
- edit_generation_, {-1});
- return;
- } else {
- LOG(ERROR) << "Receive file reference error for UploadMediaQuery";
- }
+ if (td_->file_reference_manager_->process_file_reference_error(
+ status, true, {}, {}, {cover_file_id_}, {cover_file_reference_}, false, [&](size_t pos) mutable {
+ td_->messages_manager_->on_upload_message_media_file_parts_missing(dialog_id_, message_id_, media_pos_,
+ edit_generation_, {-1});
+ })) {
+ return;
}
if (was_uploaded_) {
if (was_thumbnail_uploaded_) {
@@ -23254,30 +23207,12 @@ void MessagesManager::on_message_media_edited(
} else {
const auto &error = result.error();
LOG(INFO) << "Failed to edit " << message_id << " in " << dialog_id << ": " << error;
- if (!td_->auth_manager_->is_bot() && FileReferenceManager::is_file_reference_error(error)) {
- auto source = FileReferenceManager::get_file_reference_error_source(error);
- auto pos = source.pos_;
- if (pos > 0) {
- pos--;
- }
- if (source.is_cover_) {
- if (pos < cover_file_ids.size() && pos < cover_file_references.size()) {
- VLOG(file_references) << "Receive " << error << " for cover " << cover_file_ids[pos];
- td_->file_manager_->delete_file_reference(cover_file_ids[pos], cover_file_references[pos]);
- return on_send_message_file_error(dialog_id, m, edited_message->content_.get(), file_upload_ids, pos, {-1});
- } else {
- LOG(ERROR) << "Receive file reference error, but have no cover_file_id";
- }
- } else {
- if (pos < file_upload_ids.size() && pos < file_references.size() && !was_uploaded &&
- file_upload_ids[pos].is_valid()) {
- VLOG(file_references) << "Receive " << error << " for " << file_upload_ids[pos];
- td_->file_manager_->delete_file_reference(file_upload_ids[pos].get_file_id(), file_references[pos]);
- return on_send_message_file_error(dialog_id, m, edited_message->content_.get(), file_upload_ids, pos, {-1});
- } else {
- LOG(ERROR) << "Receive file reference error, but have no file_id";
- }
- }
+ if (td_->file_reference_manager_->process_file_reference_error(
+ error, was_uploaded, file_upload_ids, file_references, cover_file_ids, cover_file_references, false,
+ [&](size_t pos) mutable {
+ on_send_message_file_error(dialog_id, m, edited_message->content_.get(), file_upload_ids, pos, {-1});
+ })) {
+ return;
}
if (was_uploaded) {
CHECK(file_upload_ids.size() == 1u);