From 8fb53c6ec256ca1c098a5a24e28ed3609dc08246 Mon Sep 17 00:00:00 2001 From: levlam Date: Tue, 11 Aug 2020 10:35:19 +0300 Subject: [PATCH] Allow to replace caption when message is copied. GitOrigin-RevId: 6e190830d66916de2deb0b371185b7db6ea42b00 --- td/generate/scheme/td_api.tl | 5 +++-- td/generate/scheme/td_api.tlo | Bin 178232 -> 178268 bytes td/telegram/MessageContent.cpp | 26 +++++++++++++------------- td/telegram/MessageCopyOptions.h | 15 ++++++++++++--- td/telegram/MessagesManager.cpp | 7 ++++++- td/telegram/Td.cpp | 4 ++-- td/telegram/cli.cpp | 3 ++- 7 files changed, 38 insertions(+), 22 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 19e6f291c..db1910923 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -1691,8 +1691,9 @@ messageSendOptions disable_notification:Bool from_background:Bool scheduling_sta //@description Options to be used when a message content is copied without a link to the original message //@send_copy True, if content of the message needs to be copied without a link to the original message. Always true if the message is forwarded to a secret chat -//@remove_caption True, if media caption of the message copy needs to be removed. Ignored if send_copy is false -messageCopyOptions send_copy:Bool remove_caption:Bool = MessageCopyOptions; +//@replace_caption True, if media caption of the message copy needs to be replaced. Ignored if send_copy is false +//@new_caption New message caption. Ignored if replace_caption is false +messageCopyOptions send_copy:Bool replace_caption:Bool new_caption:formattedText = MessageCopyOptions; //@class InputMessageContent @description The content of a message to send diff --git a/td/generate/scheme/td_api.tlo b/td/generate/scheme/td_api.tlo index 2f6476222eac5dab3f860e948f2a2f5c6d3cf6b7..1b398758e13d3cac52fe347f20e61517e6914ade 100644 GIT binary patch delta 114 zcmdn-f$Po(t_=>7ES3rE9-CbxElxmK4G$fx6hUG_xv9m)iRr1%`305!1tppJdBqGM z@tenle3+*{lxEcC;V()p$Vp62jZaQ2m@F_uV)}&%jI1nqspavL9j_{b&1<)jVcc#b I!}Mo105BCN{Qv*} delta 88 zcmccffosPHt_=>7EWdU|&DiWBX>kI=YIx{ir3exe%1tdUPE1dA&M&C+FDS{(&nspC iiQhaX dup_message_content(Td *td, DialogId dialog_id, const if (to_secret) { thumbnail_file_id = get_message_content_thumbnail_file_id(content, td); } - auto remove_caption = type == MessageContentDupType::Copy && copy_options.remove_caption; + auto replace_caption = type == MessageContentDupType::Copy && copy_options.replace_caption; switch (content->get_type()) { case MessageContentType::Animation: { auto result = make_unique(*static_cast(content)); - if (remove_caption) { - result->caption = FormattedText(); + if (replace_caption) { + result->caption = std::move(copy_options.new_caption); } if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) { return std::move(result); @@ -3980,8 +3980,8 @@ unique_ptr dup_message_content(Td *td, DialogId dialog_id, const } case MessageContentType::Audio: { auto result = make_unique(*static_cast(content)); - if (remove_caption) { - result->caption = FormattedText(); + if (replace_caption) { + result->caption = std::move(copy_options.new_caption); } if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) { return std::move(result); @@ -4001,8 +4001,8 @@ unique_ptr dup_message_content(Td *td, DialogId dialog_id, const } case MessageContentType::Document: { auto result = make_unique(*static_cast(content)); - if (remove_caption) { - result->caption = FormattedText(); + if (replace_caption) { + result->caption = std::move(copy_options.new_caption); } if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) { return std::move(result); @@ -4025,8 +4025,8 @@ unique_ptr dup_message_content(Td *td, DialogId dialog_id, const return make_unique(*static_cast(content)); case MessageContentType::Photo: { auto result = make_unique(*static_cast(content)); - if (remove_caption) { - result->caption = FormattedText(); + if (replace_caption) { + result->caption = std::move(copy_options.new_caption); } CHECK(!result->photo.photos.empty()); @@ -4106,8 +4106,8 @@ unique_ptr dup_message_content(Td *td, DialogId dialog_id, const return make_unique(*static_cast(content)); case MessageContentType::Video: { auto result = make_unique(*static_cast(content)); - if (remove_caption) { - result->caption = FormattedText(); + if (replace_caption) { + result->caption = std::move(copy_options.new_caption); } if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) { return std::move(result); @@ -4128,8 +4128,8 @@ unique_ptr dup_message_content(Td *td, DialogId dialog_id, const } case MessageContentType::VoiceNote: { auto result = make_unique(*static_cast(content)); - if (remove_caption) { - result->caption = FormattedText(); + if (replace_caption) { + result->caption = std::move(copy_options.new_caption); } result->is_listened = false; if (td->documents_manager_->has_input_media(result->file_id, thumbnail_file_id, to_secret)) { diff --git a/td/telegram/MessageCopyOptions.h b/td/telegram/MessageCopyOptions.h index 13b380615..11eaf7a96 100644 --- a/td/telegram/MessageCopyOptions.h +++ b/td/telegram/MessageCopyOptions.h @@ -6,6 +6,8 @@ // #pragma once +#include "td/telegram/MessageEntity.h" + #include "td/utils/common.h" #include "td/utils/StringBuilder.h" @@ -13,16 +15,23 @@ namespace td { struct MessageCopyOptions { bool send_copy = false; - bool remove_caption = false; + bool replace_caption = false; + FormattedText new_caption; MessageCopyOptions() = default; - MessageCopyOptions(bool send_copy, bool remove_caption): send_copy(send_copy), remove_caption(remove_caption) { + MessageCopyOptions(bool send_copy, bool remove_caption) : send_copy(send_copy), replace_caption(remove_caption) { } }; inline StringBuilder &operator<<(StringBuilder &string_builder, MessageCopyOptions copy_options) { if (copy_options.send_copy) { - string_builder << "CopyOptions[remove_caption = " << copy_options.remove_caption << "]"; + string_builder << "CopyOptions[replace_caption = " << copy_options.replace_caption; + } + if (copy_options.replace_caption) { + string_builder << ", new_caption = " << copy_options.new_caption; + } + if (copy_options.send_copy) { + string_builder << "]"; } return string_builder; } diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 0b0cd9931..d51f4a822 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -20651,7 +20651,12 @@ Result MessagesManager::process_message_copy_options( } MessageCopyOptions result; result.send_copy = true; - result.remove_caption = options->remove_caption_; + result.replace_caption = options->replace_caption_; + if (result.replace_caption) { + TRY_RESULT_ASSIGN(result.new_caption, + process_input_caption(td_->contacts_manager_.get(), dialog_id, std::move(options->new_caption_), + td_->auth_manager_->is_bot())); + } return std::move(result); } diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 4df5c772a..1247f5bed 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -5748,8 +5748,8 @@ void Td::on_request(uint64 id, td_api::forwardMessages &request) { DialogId dialog_id(request.chat_id_); auto input_message_ids = MessagesManager::get_message_ids(request.message_ids_); auto message_copy_options = - transform(input_message_ids, [copy_options = MessageCopyOptions(request.send_copy_, request.remove_caption_)]( - MessageId) { return copy_options; }); + transform(input_message_ids, [send_copy = request.send_copy_, remove_caption = request.remove_caption_]( + MessageId) { return MessageCopyOptions(send_copy, remove_caption); }); auto r_message_ids = messages_manager_->forward_messages(dialog_id, DialogId(request.from_chat_id_), std::move(input_message_ids), std::move(request.options_), false, request.as_album_, std::move(message_copy_options)); diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index bc91bad7b..d2c9848e0 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -3200,7 +3200,8 @@ class CliClient final : public Actor { td_api::object_ptr copy_options; if (op == "scopy") { - copy_options = td_api::make_object(true, Random::fast(0, 1) == 0); + copy_options = + td_api::make_object(true, Random::fast(0, 1) == 0, as_caption("_as_d")); } send_message(chat_id,