aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlevlam <levlam@telegram.org>2026-07-08 18:09:21 +0300
committerlevlam <levlam@telegram.org>2026-07-08 18:09:21 +0300
commitc0763c3ad6970e78d714bbeea45930b47dd949a9 (patch)
tree43af18eb0c421fb92d7f6fa9faff1930820bed79
parentade9fd34de64f306ea546527079f8feaab1c3c0d (diff)
Fix animation uploading.
-rw-r--r--td/telegram/BusinessConnectionManager.cpp19
-rw-r--r--td/telegram/BusinessConnectionManager.h10
-rw-r--r--td/telegram/MessageContent.cpp6
-rw-r--r--td/telegram/MessageContent.h2
-rw-r--r--td/telegram/MessageQueryManager.cpp2
-rw-r--r--td/telegram/MessagesManager.cpp2
-rw-r--r--td/telegram/QuickReplyManager.cpp2
7 files changed, 23 insertions, 20 deletions
diff --git a/td/telegram/BusinessConnectionManager.cpp b/td/telegram/BusinessConnectionManager.cpp
index 231f6cbf7..52f816aae 100644
--- a/td/telegram/BusinessConnectionManager.cpp
+++ b/td/telegram/BusinessConnectionManager.cpp
@@ -133,6 +133,7 @@ struct BusinessConnectionManager::PendingMessage {
bool disable_notification_ = false;
bool invert_media_ = false;
bool disable_web_page_preview_ = false;
+ bool is_in_album_ = false;
void init_file_upload_ids(Td *td) {
CHECK(file_upload_id_ == FileUploadId());
@@ -1226,7 +1227,7 @@ Result<InputMessageContent> BusinessConnectionManager::process_input_message_con
unique_ptr<BusinessConnectionManager::PendingMessage> BusinessConnectionManager::create_business_message_to_send(
BusinessConnectionId business_connection_id, DialogId dialog_id, MessageInputReplyTo &&input_reply_to,
bool disable_notification, bool protect_content, MessageEffectId effect_id, unique_ptr<ReplyMarkup> &&reply_markup,
- InputMessageContent &&input_content) const {
+ InputMessageContent &&input_content, bool is_in_album) const {
auto content = dup_message_content(td_, td_->dialog_manager_->get_my_dialog_id(), input_content.content.get(),
MessageContentDupType::Send, MessageCopyOptions());
auto message = make_unique<PendingMessage>();
@@ -1243,6 +1244,7 @@ unique_ptr<BusinessConnectionManager::PendingMessage> BusinessConnectionManager:
message->ttl_ = input_content.ttl;
message->send_emoji_ = std::move(input_content.emoji);
message->random_id_ = Random::secure_int64();
+ message->is_in_album_ = is_in_album;
message->init_file_upload_ids(td_);
return message;
}
@@ -1259,9 +1261,9 @@ void BusinessConnectionManager::send_message(BusinessConnectionId business_conne
TRY_RESULT_PROMISE(promise, message_reply_markup,
get_reply_markup(std::move(reply_markup), DialogType::User, false, true, false));
- auto message = create_business_message_to_send(std::move(business_connection_id), dialog_id,
- std::move(input_reply_to), disable_notification, protect_content,
- effect_id, std::move(message_reply_markup), std::move(input_content));
+ auto message = create_business_message_to_send(
+ std::move(business_connection_id), dialog_id, std::move(input_reply_to), disable_notification, protect_content,
+ effect_id, std::move(message_reply_markup), std::move(input_content), false);
do_send_message(std::move(message), std::move(promise));
}
@@ -1519,7 +1521,7 @@ void BusinessConnectionManager::do_upload_media(BeingUploadedMedia &&being_uploa
file_upload_id, thumbnail_file_upload_id, message->ttl_, message->send_emoji_, true)
.media_);
CHECK(input_media != nullptr);
- if (is_uploaded_input_media(input_media)) {
+ if (is_uploaded_input_media(input_media, message->is_in_album_)) {
UploadMediaResult result;
result.message_ = std::move(being_uploaded_media.message_);
result.input_media_ = std::move(input_media);
@@ -1617,7 +1619,7 @@ void BusinessConnectionManager::do_send_message_album(int64 request_id, Business
auto &message_content = message_contents[media_pos];
auto message =
create_business_message_to_send(business_connection_id, dialog_id, input_reply_to.clone(), disable_notification,
- protect_content, effect_id, nullptr, std::move(message_content));
+ protect_content, effect_id, nullptr, std::move(message_content), true);
auto input_media = std::move(get_message_content_input_media(message->content_.get(), td_, message->ttl_,
message->send_emoji_, td_->auth_manager_->is_bot(), -1)
.media_);
@@ -1804,7 +1806,7 @@ void BusinessConnectionManager::edit_business_message_text(
get_input_message_content(DialogId(), std::move(input_message_content), td_, true));
auto message =
create_business_message_to_send(business_connection_id, dialog_id, MessageInputReplyTo(), false, false,
- MessageEffectId(), std::move(new_reply_markup), std::move(content));
+ MessageEffectId(), std::move(new_reply_markup), std::move(content), false);
message->message_id_ = message_id;
return do_send_message(std::move(message), std::move(promise));
@@ -1880,7 +1882,8 @@ void BusinessConnectionManager::edit_business_message_media(
get_inline_reply_markup(std::move(reply_markup), td_->auth_manager_->is_bot(), true));
auto message = create_business_message_to_send(business_connection_id, dialog_id, MessageInputReplyTo(), false, false,
- MessageEffectId(), std::move(new_reply_markup), std::move(content));
+ MessageEffectId(), std::move(new_reply_markup), std::move(content),
+ new_message_content_type != td_api::inputMessageAnimation::ID);
message->message_id_ = message_id;
do_send_message(std::move(message), std::move(promise));
diff --git a/td/telegram/BusinessConnectionManager.h b/td/telegram/BusinessConnectionManager.h
index f86964e84..77d86bc66 100644
--- a/td/telegram/BusinessConnectionManager.h
+++ b/td/telegram/BusinessConnectionManager.h
@@ -189,12 +189,10 @@ class BusinessConnectionManager final : public Actor {
Result<InputMessageContent> process_input_message_content(
td_api::object_ptr<td_api::InputMessageContent> &&input_message_content);
- unique_ptr<PendingMessage> create_business_message_to_send(BusinessConnectionId business_connection_id,
- DialogId dialog_id, MessageInputReplyTo &&input_reply_to,
- bool disable_notification, bool protect_content,
- MessageEffectId effect_id,
- unique_ptr<ReplyMarkup> &&reply_markup,
- InputMessageContent &&input_content) const;
+ unique_ptr<PendingMessage> create_business_message_to_send(
+ BusinessConnectionId business_connection_id, DialogId dialog_id, MessageInputReplyTo &&input_reply_to,
+ bool disable_notification, bool protect_content, MessageEffectId effect_id,
+ unique_ptr<ReplyMarkup> &&reply_markup, InputMessageContent &&input_content, bool is_in_album) const;
void do_send_message(unique_ptr<PendingMessage> &&message,
Promise<td_api::object_ptr<td_api::businessMessage>> &&promise);
diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp
index a1afdec3d..29fd349fd 100644
--- a/td/telegram/MessageContent.cpp
+++ b/td/telegram/MessageContent.cpp
@@ -5934,12 +5934,14 @@ telegram_api::object_ptr<telegram_api::InputMedia> get_message_content_input_med
is_optional, text->web_page_url);
}
-bool is_uploaded_input_media(telegram_api::object_ptr<telegram_api::InputMedia> &input_media) {
+bool is_uploaded_input_media(telegram_api::object_ptr<telegram_api::InputMedia> &input_media, bool disallow_animation) {
CHECK(input_media != nullptr);
LOG(DEBUG) << "Have " << to_string(input_media);
switch (input_media->get_id()) {
case telegram_api::inputMediaUploadedDocument::ID:
- static_cast<telegram_api::inputMediaUploadedDocument *>(input_media.get())->nosound_video_ = true;
+ if (disallow_animation) {
+ static_cast<telegram_api::inputMediaUploadedDocument *>(input_media.get())->nosound_video_ = true;
+ }
// fallthrough
case telegram_api::inputMediaUploadedPhoto::ID:
case telegram_api::inputMediaDocumentExternal::ID:
diff --git a/td/telegram/MessageContent.h b/td/telegram/MessageContent.h
index 1a54efbd8..0ba471207 100644
--- a/td/telegram/MessageContent.h
+++ b/td/telegram/MessageContent.h
@@ -166,7 +166,7 @@ InputMedia get_message_content_input_media(const MessageContent *content, Td *td
telegram_api::object_ptr<telegram_api::InputMedia> get_message_content_input_media_web_page(
const Td *td, const MessageContent *content);
-bool is_uploaded_input_media(telegram_api::object_ptr<telegram_api::InputMedia> &input_media);
+bool is_uploaded_input_media(telegram_api::object_ptr<telegram_api::InputMedia> &input_media, bool disallow_animation);
void delete_message_content_thumbnail(Td *td, MessageContent *content, int32 media_pos);
diff --git a/td/telegram/MessageQueryManager.cpp b/td/telegram/MessageQueryManager.cpp
index 40a098acd..8c954cc4a 100644
--- a/td/telegram/MessageQueryManager.cpp
+++ b/td/telegram/MessageQueryManager.cpp
@@ -2331,7 +2331,7 @@ void MessageQueryManager::do_upload_cover(FileUploadId file_upload_id, BeingUplo
auto input_media = being_uploaded_cover.cover_.get_input_media(td_, std::move(input_file));
CHECK(input_media != nullptr);
- if (is_uploaded_input_media(input_media)) {
+ if (is_uploaded_input_media(input_media, true)) {
return being_uploaded_cover.promise_.set_value(Unit());
} else {
td_->create_handler<UploadCoverQuery>(std::move(being_uploaded_cover.promise_))
diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp
index 75222e7d7..81e0c9418 100644
--- a/td/telegram/MessagesManager.cpp
+++ b/td/telegram/MessagesManager.cpp
@@ -22039,7 +22039,7 @@ void MessagesManager::on_message_media_uploaded(DialogId dialog_id, const Messag
auto is_edit = message_id.is_any_server();
if ((!is_edit && m->media_album_id != 0) || media_pos != -1) {
CHECK(input_media.rich_message_ == nullptr);
- if (!is_uploaded_input_media(input_media.media_)) {
+ if (!is_uploaded_input_media(input_media.media_, m->media_album_id != 0)) {
auto file_upload_id = get_message_send_file_upload_id(dialog_id, m, media_pos);
auto thumbnail_file_upload_id = get_message_send_thumbnail_file_upload_id(dialog_id, m, media_pos);
auto cover_file_ids = get_message_content_cover_any_file_ids(td_, m->content.get());
diff --git a/td/telegram/QuickReplyManager.cpp b/td/telegram/QuickReplyManager.cpp
index d3381183d..d877b8009 100644
--- a/td/telegram/QuickReplyManager.cpp
+++ b/td/telegram/QuickReplyManager.cpp
@@ -2545,7 +2545,7 @@ void QuickReplyManager::on_message_media_uploaded(const QuickReplyMessage *m, in
auto is_edit = message_id.is_any_server();
if ((!is_edit && m->media_album_id != 0) || media_pos != -1) {
CHECK(input_media.media_ != nullptr);
- if (!is_uploaded_input_media(input_media.media_)) {
+ if (!is_uploaded_input_media(input_media.media_, m->media_album_id != 0)) {
td_->create_handler<UploadQuickReplyMediaQuery>()->send(m, media_pos, m->edit_generation,
std::move(input_media.media_));
} else {