Support web page flags in messageMediaWebPage.
This commit is contained in:
parent
d261743f91
commit
8d55df14a0
|
@ -117,9 +117,17 @@ class MessageText final : public MessageContent {
|
|||
public:
|
||||
FormattedText text;
|
||||
WebPageId web_page_id;
|
||||
bool force_small_media = false;
|
||||
bool force_large_media = false;
|
||||
bool is_manual = false;
|
||||
|
||||
MessageText() = default;
|
||||
MessageText(FormattedText text, WebPageId web_page_id) : text(std::move(text)), web_page_id(web_page_id) {
|
||||
MessageText(FormattedText text, WebPageId web_page_id, bool force_small_media, bool force_large_media, bool is_manual)
|
||||
: text(std::move(text))
|
||||
, web_page_id(web_page_id)
|
||||
, force_small_media(force_small_media)
|
||||
, force_large_media(force_large_media)
|
||||
, is_manual(is_manual) {
|
||||
}
|
||||
|
||||
MessageContentType get_type() const final {
|
||||
|
@ -1061,8 +1069,17 @@ static void store(const MessageContent *content, StorerT &storer) {
|
|||
}
|
||||
case MessageContentType::Text: {
|
||||
const auto *m = static_cast<const MessageText *>(content);
|
||||
bool has_web_page_id = m->web_page_id.is_valid();
|
||||
BEGIN_STORE_FLAGS();
|
||||
STORE_FLAG(has_web_page_id);
|
||||
STORE_FLAG(m->force_small_media);
|
||||
STORE_FLAG(m->force_large_media);
|
||||
STORE_FLAG(m->is_manual);
|
||||
END_STORE_FLAGS();
|
||||
store(m->text, storer);
|
||||
store(m->web_page_id, storer);
|
||||
if (has_web_page_id) {
|
||||
store(m->web_page_id, storer);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MessageContentType::Unsupported: {
|
||||
|
@ -1536,8 +1553,19 @@ static void parse(unique_ptr<MessageContent> &content, ParserT &parser) {
|
|||
}
|
||||
case MessageContentType::Text: {
|
||||
auto m = make_unique<MessageText>();
|
||||
bool has_web_page_id = true;
|
||||
if (parser.version() >= static_cast<int32>(Version::AddMessageTextFlags)) {
|
||||
BEGIN_PARSE_FLAGS();
|
||||
PARSE_FLAG(has_web_page_id);
|
||||
PARSE_FLAG(m->force_small_media);
|
||||
PARSE_FLAG(m->force_large_media);
|
||||
PARSE_FLAG(m->is_manual);
|
||||
END_PARSE_FLAGS();
|
||||
}
|
||||
parse(m->text, parser);
|
||||
parse(m->web_page_id, parser);
|
||||
if (has_web_page_id) {
|
||||
parse(m->web_page_id, parser);
|
||||
}
|
||||
content = std::move(m);
|
||||
break;
|
||||
}
|
||||
|
@ -2037,7 +2065,7 @@ InlineMessageContent create_inline_message_content(Td *td, FileId file_id,
|
|||
if (!result.disable_web_page_preview) {
|
||||
web_page_id = td->web_pages_manager_->get_web_page_by_url(get_first_url(text));
|
||||
}
|
||||
result.message_content = make_unique<MessageText>(std::move(text), web_page_id);
|
||||
result.message_content = make_unique<MessageText>(std::move(text), web_page_id, false, false, false);
|
||||
reply_markup = std::move(inline_message->reply_markup_);
|
||||
break;
|
||||
}
|
||||
|
@ -2116,8 +2144,10 @@ InlineMessageContent create_inline_message_content(Td *td, FileId file_id,
|
|||
}
|
||||
|
||||
unique_ptr<MessageContent> create_text_message_content(string text, vector<MessageEntity> entities,
|
||||
WebPageId web_page_id) {
|
||||
return make_unique<MessageText>(FormattedText{std::move(text), std::move(entities)}, web_page_id);
|
||||
WebPageId web_page_id, bool force_small_media,
|
||||
bool force_large_media, bool is_manual) {
|
||||
return make_unique<MessageText>(FormattedText{std::move(text), std::move(entities)}, web_page_id, force_small_media,
|
||||
force_large_media, is_manual);
|
||||
}
|
||||
|
||||
unique_ptr<MessageContent> create_contact_registered_message_content() {
|
||||
|
@ -2176,7 +2206,7 @@ static Result<InputMessageContent> create_input_message_content(
|
|||
if (!is_bot && !disable_web_page_preview && can_add_web_page_previews) {
|
||||
web_page_id = td->web_pages_manager_->get_web_page_by_url(get_first_url(input_message_text.text));
|
||||
}
|
||||
content = make_unique<MessageText>(std::move(input_message_text.text), web_page_id);
|
||||
content = make_unique<MessageText>(std::move(input_message_text.text), web_page_id, false, false, false);
|
||||
break;
|
||||
}
|
||||
case td_api::inputMessageAnimation::ID: {
|
||||
|
@ -3271,7 +3301,8 @@ bool can_forward_message_content(const MessageContent *content) {
|
|||
auto content_type = content->get_type();
|
||||
if (content_type == MessageContentType::Text) {
|
||||
auto *text = static_cast<const MessageText *>(content);
|
||||
return !is_empty_string(text->text.text); // text must be non-empty in the new message
|
||||
// text must be non-empty if there is no link preview
|
||||
return !is_empty_string(text->text.text) || text->web_page_id.is_valid();
|
||||
}
|
||||
if (content_type == MessageContentType::Poll) {
|
||||
auto *poll = static_cast<const MessagePoll *>(content);
|
||||
|
@ -3701,7 +3732,11 @@ bool has_message_content_web_page(const MessageContent *content) {
|
|||
|
||||
void remove_message_content_web_page(MessageContent *content) {
|
||||
CHECK(content->get_type() == MessageContentType::Text);
|
||||
static_cast<MessageText *>(content)->web_page_id = WebPageId();
|
||||
auto message_text = static_cast<MessageText *>(content);
|
||||
message_text->web_page_id = WebPageId();
|
||||
message_text->force_small_media = false;
|
||||
message_text->force_large_media = false;
|
||||
message_text->is_manual = false;
|
||||
}
|
||||
|
||||
bool can_message_content_have_media_timestamp(const MessageContent *content) {
|
||||
|
@ -3836,7 +3871,8 @@ void merge_message_contents(Td *td, const MessageContent *old_content, MessageCo
|
|||
}
|
||||
need_update = true;
|
||||
}
|
||||
if (old_->web_page_id != new_->web_page_id) {
|
||||
if (old_->web_page_id != new_->web_page_id || old_->force_small_media != new_->force_small_media ||
|
||||
old_->force_large_media != new_->force_large_media || old_->is_manual != new_->is_manual) {
|
||||
LOG(INFO) << "Old: " << old_->web_page_id << ", new: " << new_->web_page_id;
|
||||
is_content_changed = true;
|
||||
need_update |= td->web_pages_manager_->have_web_page(old_->web_page_id) ||
|
||||
|
@ -5026,7 +5062,8 @@ unique_ptr<MessageContent> get_secret_message_content(
|
|||
}
|
||||
auto url = r_http_url.ok().get_url();
|
||||
|
||||
auto result = make_unique<MessageText>(FormattedText{std::move(message_text), std::move(entities)}, WebPageId());
|
||||
auto result = make_unique<MessageText>(FormattedText{std::move(message_text), std::move(entities)}, WebPageId(),
|
||||
false, false, false);
|
||||
td->web_pages_manager_->get_web_page_by_url(
|
||||
url,
|
||||
PromiseCreator::lambda([&web_page_id = result->web_page_id, promise = load_data_multipromise.get_promise()](
|
||||
|
@ -5052,7 +5089,7 @@ unique_ptr<MessageContent> get_secret_message_content(
|
|||
is_media_empty = true;
|
||||
}
|
||||
if (is_media_empty) {
|
||||
return create_text_message_content(std::move(message_text), std::move(entities), WebPageId());
|
||||
return create_text_message_content(std::move(message_text), std::move(entities), WebPageId(), false, false, false);
|
||||
}
|
||||
switch (constructor_id) {
|
||||
case secret_api::decryptedMessageMediaPhoto::ID: {
|
||||
|
@ -5112,7 +5149,7 @@ unique_ptr<MessageContent> get_message_content(Td *td, FormattedText message,
|
|||
if (disable_web_page_preview != nullptr) {
|
||||
*disable_web_page_preview = true;
|
||||
}
|
||||
return make_unique<MessageText>(std::move(message), WebPageId());
|
||||
return make_unique<MessageText>(std::move(message), WebPageId(), false, false, false);
|
||||
case telegram_api::messageMediaPhoto::ID: {
|
||||
auto media = move_tl_object_as<telegram_api::messageMediaPhoto>(media_ptr);
|
||||
if (media->photo_ == nullptr) {
|
||||
|
@ -5236,7 +5273,8 @@ unique_ptr<MessageContent> get_message_content(Td *td, FormattedText message,
|
|||
*disable_web_page_preview = (media->webpage_ == nullptr);
|
||||
}
|
||||
auto web_page_id = td->web_pages_manager_->on_get_web_page(std::move(media->webpage_), owner_dialog_id);
|
||||
return make_unique<MessageText>(std::move(message), web_page_id);
|
||||
return make_unique<MessageText>(std::move(message), web_page_id, media->force_small_media_,
|
||||
media->force_large_media_, media->manual_);
|
||||
}
|
||||
case telegram_api::messageMediaPoll::ID: {
|
||||
auto media = move_tl_object_as<telegram_api::messageMediaPoll>(media_ptr);
|
||||
|
@ -5296,7 +5334,7 @@ unique_ptr<MessageContent> get_message_content(Td *td, FormattedText message,
|
|||
if (disable_web_page_preview != nullptr) {
|
||||
*disable_web_page_preview = true;
|
||||
}
|
||||
return make_unique<MessageText>(std::move(message), WebPageId());
|
||||
return make_unique<MessageText>(std::move(message), WebPageId(), false, false, false);
|
||||
}
|
||||
|
||||
unique_ptr<MessageContent> dup_message_content(Td *td, DialogId dialog_id, const MessageContent *content,
|
||||
|
@ -5964,7 +6002,7 @@ unique_ptr<MessageContent> get_action_message_content(Td *td, tl_object_ptr<tele
|
|||
UNREACHABLE();
|
||||
}
|
||||
// explicit empty or wrong action
|
||||
return make_unique<MessageText>(FormattedText(), WebPageId());
|
||||
return make_unique<MessageText>(FormattedText(), WebPageId(), false, false, false);
|
||||
}
|
||||
|
||||
tl_object_ptr<td_api::MessageContent> get_message_content_object(const MessageContent *content, Td *td,
|
||||
|
|
|
@ -95,7 +95,8 @@ InlineMessageContent create_inline_message_content(Td *td, FileId file_id,
|
|||
int32 allowed_media_content_id, Photo *photo, Game *game);
|
||||
|
||||
unique_ptr<MessageContent> create_text_message_content(string text, vector<MessageEntity> entities,
|
||||
WebPageId web_page_id);
|
||||
WebPageId web_page_id, bool force_small_media,
|
||||
bool force_large_media, bool is_manual);
|
||||
|
||||
unique_ptr<MessageContent> create_contact_registered_message_content();
|
||||
|
||||
|
|
|
@ -14447,7 +14447,7 @@ std::pair<DialogId, unique_ptr<MessagesManager::Message>> MessagesManager::creat
|
|||
if (content_type == MessageContentType::Sticker &&
|
||||
get_message_content_sticker_type(td_, message_info.content.get()) == StickerType::CustomEmoji) {
|
||||
LOG(INFO) << "Replace emoji sticker with an empty message";
|
||||
message_info.content = create_text_message_content("Invalid sticker", {}, WebPageId());
|
||||
message_info.content = create_text_message_content("Invalid sticker", {}, WebPageId(), false, false, false);
|
||||
content_type = message_info.content->get_type();
|
||||
}
|
||||
|
||||
|
@ -25896,9 +25896,10 @@ Result<MessageId> MessagesManager::send_bot_start_message(UserId bot_user_id, Di
|
|||
vector<MessageEntity> text_entities;
|
||||
text_entities.emplace_back(MessageEntity::Type::BotCommand, 0, narrow_cast<int32>(text.size()));
|
||||
bool need_update_dialog_pos = false;
|
||||
Message *m = get_message_to_send(d, MessageId(), MessageInputReplyTo(), MessageSendOptions(),
|
||||
create_text_message_content(text, std::move(text_entities), WebPageId()),
|
||||
&need_update_dialog_pos);
|
||||
Message *m =
|
||||
get_message_to_send(d, MessageId(), MessageInputReplyTo(), MessageSendOptions(),
|
||||
create_text_message_content(text, std::move(text_entities), WebPageId(), false, false, false),
|
||||
&need_update_dialog_pos);
|
||||
m->is_bot_start_message = true;
|
||||
|
||||
send_update_new_message(d, m);
|
||||
|
|
|
@ -62,6 +62,7 @@ enum class Version : int32 {
|
|||
MakeParticipantFlags64Bit,
|
||||
AddDocumentFlags,
|
||||
AddUserFlags2,
|
||||
AddMessageTextFlags,
|
||||
Next
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user