Move caption out of MessageExtendedMedia.
This commit is contained in:
parent
960f407045
commit
96d29d141a
@ -44,7 +44,8 @@ bool operator==(const InputInvoice &lhs, const InputInvoice &rhs) {
|
||||
lhs.start_parameter_ == rhs.start_parameter_ && are_invoice_equal(lhs.invoice_, rhs.invoice_) &&
|
||||
lhs.payload_ == rhs.payload_ && lhs.provider_token_ == rhs.provider_token_ &&
|
||||
lhs.provider_data_ == rhs.provider_data_ && lhs.extended_media_ == rhs.extended_media_ &&
|
||||
lhs.total_amount_ == rhs.total_amount_ && lhs.receipt_message_id_ == rhs.receipt_message_id_;
|
||||
lhs.extended_media_caption_ == rhs.extended_media_caption_ && lhs.total_amount_ == rhs.total_amount_ &&
|
||||
lhs.receipt_message_id_ == rhs.receipt_message_id_;
|
||||
}
|
||||
|
||||
bool operator!=(const InputInvoice &lhs, const InputInvoice &rhs) {
|
||||
@ -63,8 +64,10 @@ InputInvoice::InputInvoice(tl_object_ptr<telegram_api::messageMediaInvoice> &&me
|
||||
// payload_ = string();
|
||||
// provider_token_ = string();
|
||||
// provider_data_ = string();
|
||||
extended_media_ =
|
||||
MessageExtendedMedia(td, std::move(message_invoice->extended_media_), std::move(message), owner_dialog_id);
|
||||
extended_media_ = MessageExtendedMedia(td, std::move(message_invoice->extended_media_), owner_dialog_id);
|
||||
if (!extended_media_.is_empty()) {
|
||||
extended_media_caption_ = std::move(message);
|
||||
}
|
||||
if (message_invoice->total_amount_ <= 0 || !check_currency_amount(message_invoice->total_amount_)) {
|
||||
LOG(ERROR) << "Receive invalid total amount " << message_invoice->total_amount_;
|
||||
message_invoice->total_amount_ = 0;
|
||||
@ -92,6 +95,7 @@ InputInvoice::InputInvoice(tl_object_ptr<telegram_api::botInlineMessageMediaInvo
|
||||
// provider_token_ = string();
|
||||
// provider_data_ = string();
|
||||
// extended_media_ = MessageExtendedMedia();
|
||||
// extended_media_caption_ = FormattedText();
|
||||
if (message_invoice->total_amount_ <= 0 || !check_currency_amount(message_invoice->total_amount_)) {
|
||||
LOG(ERROR) << "Receive invalid total amount " << message_invoice->total_amount_;
|
||||
message_invoice->total_amount_ = 0;
|
||||
@ -230,25 +234,31 @@ Result<InputInvoice> InputInvoice::process_input_message_invoice(
|
||||
result.provider_token_ = std::move(input_invoice->provider_token_);
|
||||
result.provider_data_ = std::move(input_invoice->provider_data_);
|
||||
|
||||
bool is_bot = td->auth_manager_->is_bot();
|
||||
TRY_RESULT(extended_media_caption,
|
||||
get_formatted_text(td, owner_dialog_id, std::move(input_invoice->paid_media_caption_), is_bot, true, false,
|
||||
false));
|
||||
TRY_RESULT(extended_media,
|
||||
MessageExtendedMedia::get_message_extended_media(td, std::move(input_invoice->paid_media_),
|
||||
std::move(extended_media_caption), owner_dialog_id));
|
||||
TRY_RESULT(extended_media, MessageExtendedMedia::get_message_extended_media(td, std::move(input_invoice->paid_media_),
|
||||
owner_dialog_id));
|
||||
result.extended_media_ = std::move(extended_media);
|
||||
if (!result.extended_media_.is_empty()) {
|
||||
bool is_bot = td->auth_manager_->is_bot();
|
||||
TRY_RESULT(extended_media_caption,
|
||||
get_formatted_text(td, owner_dialog_id, std::move(input_invoice->paid_media_caption_), is_bot, true,
|
||||
false, false));
|
||||
result.extended_media_caption_ = std::move(extended_media_caption);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
td_api::object_ptr<td_api::messageInvoice> InputInvoice::get_message_invoice_object(Td *td, bool skip_bot_commands,
|
||||
int32 max_media_timestamp) const {
|
||||
auto extended_media_object = extended_media_.get_message_extended_media_object(td);
|
||||
auto extended_media_caption_object =
|
||||
extended_media_object == nullptr
|
||||
? nullptr
|
||||
: get_formatted_text_object(extended_media_caption_, skip_bot_commands, max_media_timestamp);
|
||||
return td_api::make_object<td_api::messageInvoice>(
|
||||
get_product_info_object(td, title_, description_, photo_), invoice_.currency_, total_amount_, start_parameter_,
|
||||
invoice_.is_test_, invoice_.need_shipping_address_, receipt_message_id_.get(),
|
||||
extended_media_.get_message_extended_media_object(td),
|
||||
extended_media_.get_caption_object(skip_bot_commands, max_media_timestamp));
|
||||
invoice_.is_test_, invoice_.need_shipping_address_, receipt_message_id_.get(), std::move(extended_media_object),
|
||||
std::move(extended_media_caption_object));
|
||||
}
|
||||
|
||||
tl_object_ptr<telegram_api::invoice> InputInvoice::Invoice::get_input_invoice() const {
|
||||
@ -394,7 +404,7 @@ bool InputInvoice::is_equal_but_different(const InputInvoice &other) const {
|
||||
}
|
||||
|
||||
const FormattedText *InputInvoice::get_caption() const {
|
||||
return extended_media_.get_caption();
|
||||
return &extended_media_caption_;
|
||||
}
|
||||
|
||||
int32 InputInvoice::get_duration(const Td *td) const {
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "td/telegram/DialogId.h"
|
||||
#include "td/telegram/files/FileId.h"
|
||||
#include "td/telegram/LabeledPricePart.h"
|
||||
#include "td/telegram/MessageEntity.h"
|
||||
#include "td/telegram/MessageExtendedMedia.h"
|
||||
#include "td/telegram/MessageId.h"
|
||||
#include "td/telegram/Photo.h"
|
||||
@ -63,6 +64,7 @@ class InputInvoice {
|
||||
string provider_token_;
|
||||
string provider_data_;
|
||||
MessageExtendedMedia extended_media_;
|
||||
FormattedText extended_media_caption_;
|
||||
|
||||
int64 total_amount_ = 0;
|
||||
MessageId receipt_message_id_;
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include "td/telegram/InputInvoice.h"
|
||||
|
||||
#include "td/telegram/MessageEntity.hpp"
|
||||
#include "td/telegram/MessageExtendedMedia.hpp"
|
||||
#include "td/telegram/Photo.hpp"
|
||||
#include "td/telegram/Version.h"
|
||||
@ -84,6 +85,7 @@ void InputInvoice::store(StorerT &storer) const {
|
||||
bool has_total_amount = total_amount_ != 0;
|
||||
bool has_receipt_message_id = receipt_message_id_.is_valid();
|
||||
bool has_extended_media = !extended_media_.is_empty();
|
||||
bool has_extended_media_caption = !extended_media_caption_.text.empty();
|
||||
BEGIN_STORE_FLAGS();
|
||||
STORE_FLAG(has_description);
|
||||
STORE_FLAG(has_photo);
|
||||
@ -94,6 +96,7 @@ void InputInvoice::store(StorerT &storer) const {
|
||||
STORE_FLAG(has_total_amount);
|
||||
STORE_FLAG(has_receipt_message_id);
|
||||
STORE_FLAG(has_extended_media);
|
||||
STORE_FLAG(has_extended_media_caption);
|
||||
END_STORE_FLAGS();
|
||||
store(title_, storer);
|
||||
if (has_description) {
|
||||
@ -124,6 +127,9 @@ void InputInvoice::store(StorerT &storer) const {
|
||||
if (has_extended_media) {
|
||||
store(extended_media_, storer);
|
||||
}
|
||||
if (has_extended_media_caption) {
|
||||
store(extended_media_caption_, storer);
|
||||
}
|
||||
}
|
||||
|
||||
template <class ParserT>
|
||||
@ -138,6 +144,7 @@ void InputInvoice::parse(ParserT &parser) {
|
||||
bool has_total_amount;
|
||||
bool has_receipt_message_id;
|
||||
bool has_extended_media;
|
||||
bool has_extended_media_caption = false;
|
||||
if (parser.version() >= static_cast<int32>(Version::AddInputInvoiceFlags)) {
|
||||
BEGIN_PARSE_FLAGS();
|
||||
PARSE_FLAG(has_description);
|
||||
@ -149,6 +156,7 @@ void InputInvoice::parse(ParserT &parser) {
|
||||
PARSE_FLAG(has_total_amount);
|
||||
PARSE_FLAG(has_receipt_message_id);
|
||||
PARSE_FLAG(has_extended_media);
|
||||
PARSE_FLAG(has_extended_media_caption);
|
||||
END_PARSE_FLAGS();
|
||||
} else {
|
||||
has_description = true;
|
||||
@ -190,6 +198,9 @@ void InputInvoice::parse(ParserT &parser) {
|
||||
if (has_extended_media) {
|
||||
parse(extended_media_, parser);
|
||||
}
|
||||
if (has_extended_media_caption) {
|
||||
parse(extended_media_caption_, parser);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace td
|
||||
|
@ -6405,7 +6405,7 @@ unique_ptr<MessageContent> get_message_content(Td *td, FormattedText message,
|
||||
case telegram_api::messageMediaPaidMedia::ID: {
|
||||
auto media = telegram_api::move_object_as<telegram_api::messageMediaPaidMedia>(media_ptr);
|
||||
auto extended_media = transform(std::move(media->extended_media_), [&](auto &&extended_media) {
|
||||
return MessageExtendedMedia(td, std::move(extended_media), FormattedText(), owner_dialog_id);
|
||||
return MessageExtendedMedia(td, std::move(extended_media), owner_dialog_id);
|
||||
});
|
||||
return td::make_unique<MessagePaidMedia>(std::move(extended_media), std::move(message),
|
||||
StarManager::get_star_count(media->stars_amount_));
|
||||
|
@ -27,12 +27,10 @@
|
||||
namespace td {
|
||||
|
||||
MessageExtendedMedia::MessageExtendedMedia(
|
||||
Td *td, telegram_api::object_ptr<telegram_api::MessageExtendedMedia> &&extended_media, FormattedText &&caption,
|
||||
DialogId owner_dialog_id) {
|
||||
Td *td, telegram_api::object_ptr<telegram_api::MessageExtendedMedia> &&extended_media, DialogId owner_dialog_id) {
|
||||
if (extended_media == nullptr) {
|
||||
return;
|
||||
}
|
||||
caption_ = std::move(caption);
|
||||
|
||||
switch (extended_media->get_id()) {
|
||||
case telegram_api::messageExtendedMediaPreview::ID: {
|
||||
@ -114,8 +112,7 @@ void MessageExtendedMedia::init_from_media(Td *td, telegram_api::object_ptr<tele
|
||||
}
|
||||
|
||||
Result<MessageExtendedMedia> MessageExtendedMedia::get_message_extended_media(
|
||||
Td *td, td_api::object_ptr<td_api::inputMessageExtendedMedia> &&paid_media, FormattedText &&caption,
|
||||
DialogId owner_dialog_id) {
|
||||
Td *td, td_api::object_ptr<td_api::inputMessageExtendedMedia> &&paid_media, DialogId owner_dialog_id) {
|
||||
if (paid_media == nullptr) {
|
||||
return MessageExtendedMedia();
|
||||
}
|
||||
@ -127,7 +124,6 @@ Result<MessageExtendedMedia> MessageExtendedMedia::get_message_extended_media(
|
||||
}
|
||||
|
||||
MessageExtendedMedia result;
|
||||
result.caption_ = std::move(caption);
|
||||
|
||||
auto file_type = FileType::None;
|
||||
switch (paid_media->type_->get_id()) {
|
||||
@ -190,7 +186,7 @@ void MessageExtendedMedia::update_from(const MessageExtendedMedia &old_extended_
|
||||
bool MessageExtendedMedia::update_to(Td *td,
|
||||
telegram_api::object_ptr<telegram_api::MessageExtendedMedia> extended_media_ptr,
|
||||
DialogId owner_dialog_id) {
|
||||
MessageExtendedMedia new_extended_media(td, std::move(extended_media_ptr), FormattedText(caption_), owner_dialog_id);
|
||||
MessageExtendedMedia new_extended_media(td, std::move(extended_media_ptr), owner_dialog_id);
|
||||
if (!new_extended_media.is_media() && is_media()) {
|
||||
return false;
|
||||
}
|
||||
@ -226,14 +222,6 @@ td_api::object_ptr<td_api::MessageExtendedMedia> MessageExtendedMedia::get_messa
|
||||
}
|
||||
}
|
||||
|
||||
td_api::object_ptr<td_api::formattedText> MessageExtendedMedia::get_caption_object(bool skip_bot_commands,
|
||||
int32 max_media_timestamp) const {
|
||||
if (type_ == Type::Empty) {
|
||||
return nullptr;
|
||||
}
|
||||
return get_formatted_text_object(caption_, skip_bot_commands, max_media_timestamp);
|
||||
}
|
||||
|
||||
void MessageExtendedMedia::append_file_ids(const Td *td, vector<FileId> &file_ids) const {
|
||||
switch (type_) {
|
||||
case Type::Empty:
|
||||
@ -354,7 +342,7 @@ bool MessageExtendedMedia::is_equal_but_different(const MessageExtendedMedia &ot
|
||||
}
|
||||
|
||||
bool operator==(const MessageExtendedMedia &lhs, const MessageExtendedMedia &rhs) {
|
||||
if (lhs.type_ != rhs.type_ || lhs.caption_ != rhs.caption_) {
|
||||
if (lhs.type_ != rhs.type_) {
|
||||
return false;
|
||||
}
|
||||
switch (lhs.type_) {
|
||||
|
@ -9,7 +9,6 @@
|
||||
#include "td/telegram/DialogId.h"
|
||||
#include "td/telegram/Dimensions.h"
|
||||
#include "td/telegram/files/FileId.h"
|
||||
#include "td/telegram/MessageEntity.h"
|
||||
#include "td/telegram/Photo.h"
|
||||
#include "td/telegram/td_api.h"
|
||||
#include "td/telegram/telegram_api.h"
|
||||
@ -24,7 +23,6 @@ class Td;
|
||||
class MessageExtendedMedia {
|
||||
enum class Type : int32 { Empty, Unsupported, Preview, Photo, Video };
|
||||
Type type_ = Type::Empty;
|
||||
FormattedText caption_;
|
||||
|
||||
static constexpr int32 CURRENT_VERSION = 1;
|
||||
|
||||
@ -54,13 +52,12 @@ class MessageExtendedMedia {
|
||||
MessageExtendedMedia() = default;
|
||||
|
||||
MessageExtendedMedia(Td *td, telegram_api::object_ptr<telegram_api::MessageExtendedMedia> &&extended_media,
|
||||
FormattedText &&caption, DialogId owner_dialog_id);
|
||||
DialogId owner_dialog_id);
|
||||
|
||||
MessageExtendedMedia(Td *td, telegram_api::object_ptr<telegram_api::MessageMedia> &&media, DialogId owner_dialog_id);
|
||||
|
||||
static Result<MessageExtendedMedia> get_message_extended_media(
|
||||
Td *td, td_api::object_ptr<td_api::inputMessageExtendedMedia> &&paid_media, FormattedText &&caption,
|
||||
DialogId owner_dialog_id);
|
||||
Td *td, td_api::object_ptr<td_api::inputMessageExtendedMedia> &&paid_media, DialogId owner_dialog_id);
|
||||
|
||||
bool is_empty() const {
|
||||
return type_ == Type::Empty;
|
||||
@ -73,8 +70,6 @@ class MessageExtendedMedia {
|
||||
|
||||
td_api::object_ptr<td_api::MessageExtendedMedia> get_message_extended_media_object(Td *td) const;
|
||||
|
||||
td_api::object_ptr<td_api::formattedText> get_caption_object(bool skip_bot_commands, int32 max_media_timestamp) const;
|
||||
|
||||
void append_file_ids(const Td *td, vector<FileId> &file_ids) const;
|
||||
|
||||
void delete_thumbnail(Td *td);
|
||||
@ -95,10 +90,6 @@ class MessageExtendedMedia {
|
||||
|
||||
int32 get_duration(const Td *td) const;
|
||||
|
||||
const FormattedText *get_caption() const {
|
||||
return &caption_;
|
||||
}
|
||||
|
||||
FileId get_upload_file_id() const;
|
||||
|
||||
FileId get_any_file_id() const;
|
||||
|
@ -18,7 +18,6 @@ namespace td {
|
||||
|
||||
template <class StorerT>
|
||||
void MessageExtendedMedia::store(StorerT &storer) const {
|
||||
bool has_caption = !caption_.text.empty();
|
||||
bool has_unsupported_version = unsupported_version_ != 0;
|
||||
bool has_duration = duration_ != 0;
|
||||
bool has_dimensions = dimensions_.width != 0 || dimensions_.height != 0;
|
||||
@ -26,7 +25,7 @@ void MessageExtendedMedia::store(StorerT &storer) const {
|
||||
bool has_photo = !photo_.is_empty();
|
||||
bool has_video = video_file_id_.is_valid();
|
||||
BEGIN_STORE_FLAGS();
|
||||
STORE_FLAG(has_caption);
|
||||
STORE_FLAG(false); // has_caption
|
||||
STORE_FLAG(has_unsupported_version);
|
||||
STORE_FLAG(has_duration);
|
||||
STORE_FLAG(has_dimensions);
|
||||
@ -35,9 +34,6 @@ void MessageExtendedMedia::store(StorerT &storer) const {
|
||||
STORE_FLAG(has_video);
|
||||
END_STORE_FLAGS();
|
||||
td::store(type_, storer);
|
||||
if (has_caption) {
|
||||
td::store(caption_, storer);
|
||||
}
|
||||
if (has_unsupported_version) {
|
||||
td::store(unsupported_version_, storer);
|
||||
}
|
||||
@ -79,7 +75,8 @@ void MessageExtendedMedia::parse(ParserT &parser) {
|
||||
END_PARSE_FLAGS();
|
||||
td::parse(type_, parser);
|
||||
if (has_caption) {
|
||||
td::parse(caption_, parser);
|
||||
FormattedText caption;
|
||||
td::parse(caption, parser);
|
||||
}
|
||||
if (has_unsupported_version) {
|
||||
td::parse(unsupported_version_, parser);
|
||||
@ -103,8 +100,10 @@ void MessageExtendedMedia::parse(ParserT &parser) {
|
||||
video_file_id_ = td->videos_manager_->parse_video(parser);
|
||||
is_bad = !video_file_id_.is_valid();
|
||||
}
|
||||
if (is_bad) {
|
||||
LOG(ERROR) << "Failed to parse MessageExtendedMedia";
|
||||
if (is_bad || has_caption) {
|
||||
if (is_bad) {
|
||||
LOG(ERROR) << "Failed to parse MessageExtendedMedia";
|
||||
}
|
||||
photo_ = Photo();
|
||||
video_file_id_ = FileId();
|
||||
type_ = Type::Unsupported;
|
||||
|
Loading…
Reference in New Issue
Block a user