From ebeb524f70d6e3a1f37799e2a561e09651a212e9 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 9 Dec 2022 14:13:37 +0300 Subject: [PATCH] Add messageSuggestProfilePhoto. --- td/generate/scheme/td_api.tl | 5 ++- td/telegram/DialogAction.cpp | 1 + td/telegram/MessageContent.cpp | 60 +++++++++++++++++++++++++++- td/telegram/MessageContentType.cpp | 6 +++ td/telegram/MessageContentType.h | 3 +- td/telegram/MessageExtendedMedia.cpp | 1 - td/telegram/MessagesManager.cpp | 1 + 7 files changed, 73 insertions(+), 4 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 3a4948aba..17ba6b439 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -1994,7 +1994,7 @@ messageAudio audio:audio caption:formattedText = MessageContent; //@description A document message (general file) @document The document description @caption Document caption messageDocument document:document caption:formattedText = MessageContent; -//@description A photo message @photo The photo description @caption Photo caption @is_secret True, if the photo must be blurred and must be shown only while tapped +//@description A photo message @photo The photo @caption Photo caption @is_secret True, if the photo must be blurred and must be shown only while tapped messagePhoto photo:photo caption:formattedText is_secret:Bool = MessageContent; //@description An expired photo message (self-destructed after TTL has elapsed) @@ -2122,6 +2122,9 @@ messageForumTopicIsClosedToggled is_closed:Bool = MessageContent; //@description A General forum topic has been hidden or unhidden @is_hidden True, if the topic was hidden, otherwise the topic was unhidden messageForumTopicIsHiddenToggled is_hidden:Bool = MessageContent; +//@description A profile photo was suggested to a user in a private chat @photo The suggested chat photo +messageSuggestProfilePhoto photo:chatPhoto = MessageContent; + //@description A non-standard action has happened in the chat @text Message text to be shown in the chat messageCustomServiceAction text:string = MessageContent; diff --git a/td/telegram/DialogAction.cpp b/td/telegram/DialogAction.cpp index b2941a313..49e9c9fb6 100644 --- a/td/telegram/DialogAction.cpp +++ b/td/telegram/DialogAction.cpp @@ -405,6 +405,7 @@ bool DialogAction::is_canceled_by_message_of_type(MessageContentType message_con case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: return false; default: UNREACHABLE(); diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index cedbf48f5..97890c387 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -835,6 +835,19 @@ class MessageTopicEdit final : public MessageContent { } }; +class MessageSuggestProfilePhoto final : public MessageContent { + public: + Photo photo; + + MessageSuggestProfilePhoto() = default; + explicit MessageSuggestProfilePhoto(Photo &&photo) : photo(std::move(photo)) { + } + + MessageContentType get_type() const final { + return MessageContentType::SuggestProfilePhoto; + } +}; + template static void store(const MessageContent *content, StorerT &storer) { CHECK(content != nullptr); @@ -959,6 +972,7 @@ static void store(const MessageContent *content, StorerT &storer) { break; } case MessageContentType::ChatDeletePhoto: + break; case MessageContentType::ChatDeleteHistory: break; case MessageContentType::ChatAddUsers: { @@ -1181,6 +1195,11 @@ static void store(const MessageContent *content, StorerT &storer) { store(m->edited_data, storer); break; } + case MessageContentType::SuggestProfilePhoto: { + const auto *m = static_cast(content); + store(m->photo, storer); + break; + } default: UNREACHABLE(); } @@ -1653,6 +1672,15 @@ static void parse(unique_ptr &content, ParserT &parser) { content = std::move(m); break; } + case MessageContentType::SuggestProfilePhoto: { + auto m = make_unique(); + parse(m->photo, parser); + if (m->photo.is_empty()) { + is_bad = true; + } + content = std::move(m); + break; + } default: LOG(FATAL) << "Have unknown message content type " << static_cast(content_type); } @@ -2275,6 +2303,7 @@ bool can_have_input_media(const Td *td, const MessageContent *content, bool is_s case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: return false; case MessageContentType::Animation: case MessageContentType::Audio: @@ -2398,6 +2427,7 @@ SecretInputMedia get_secret_input_media(const MessageContent *content, Td *td, case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: break; default: UNREACHABLE(); @@ -2519,6 +2549,7 @@ static tl_object_ptr get_input_media_impl( case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: break; default: UNREACHABLE(); @@ -2685,6 +2716,7 @@ void delete_message_content_thumbnail(MessageContent *content, Td *td) { case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: break; default: UNREACHABLE(); @@ -2869,6 +2901,7 @@ Status can_send_message_content(DialogId dialog_id, const MessageContent *conten case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: UNREACHABLE(); } return Status::OK(); @@ -3000,6 +3033,7 @@ static int32 get_message_content_media_index_mask(const MessageContent *content, case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: return 0; default: UNREACHABLE(); @@ -3771,6 +3805,14 @@ void merge_message_contents(Td *td, const MessageContent *old_content, MessageCo } break; } + case MessageContentType::SuggestProfilePhoto: { + const auto *old_ = static_cast(old_content); + const auto *new_ = static_cast(new_content); + if (old_->photo != new_->photo) { + need_update = true; + } + break; + } default: UNREACHABLE(); break; @@ -3905,6 +3947,7 @@ bool merge_message_content_file_id(Td *td, MessageContent *message_content, File case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: LOG(ERROR) << "Receive new file " << new_file_id << " in a sent message of the type " << content_type; break; default: @@ -4888,6 +4931,7 @@ unique_ptr dup_message_content(Td *td, DialogId dialog_id, const case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: return nullptr; default: UNREACHABLE(); @@ -5205,7 +5249,7 @@ unique_ptr get_action_message_content(Td *td, tl_object_ptr(std::move(photo), FormattedText()); + return make_unique(std::move(photo)); } case telegram_api::messageActionAttachMenuBotAllowed::ID: return make_unique(); @@ -5494,6 +5538,15 @@ tl_object_ptr get_message_content_object(const MessageCo const auto *m = static_cast(content); return m->edited_data.get_message_content_object(); } + case MessageContentType::SuggestProfilePhoto: { + const auto *m = static_cast(content); + auto photo = get_chat_photo_object(td->file_manager_.get(), m->photo); + if (photo == nullptr) { + LOG(ERROR) << "Have empty suggested profile " << m->photo; + return make_tl_object(); + } + return make_tl_object(std::move(photo)); + } default: UNREACHABLE(); return nullptr; @@ -5765,6 +5818,8 @@ vector get_message_content_file_ids(const MessageContent *content, const } return result; } + case MessageContentType::SuggestProfilePhoto: + return photo_get_file_ids(static_cast(content)->photo); default: return {}; } @@ -5858,6 +5913,7 @@ string get_message_content_search_text(const Td *td, const MessageContent *conte case MessageContentType::WebViewDataSent: case MessageContentType::WebViewDataReceived: case MessageContentType::GiftPremium: + case MessageContentType::SuggestProfilePhoto: return string(); default: UNREACHABLE(); @@ -6139,6 +6195,8 @@ void add_message_content_dependencies(Dependencies &dependencies, const MessageC break; case MessageContentType::TopicEdit: break; + case MessageContentType::SuggestProfilePhoto: + break; default: UNREACHABLE(); break; diff --git a/td/telegram/MessageContentType.cpp b/td/telegram/MessageContentType.cpp index 1395b1e70..11ba68bd8 100644 --- a/td/telegram/MessageContentType.cpp +++ b/td/telegram/MessageContentType.cpp @@ -114,6 +114,8 @@ StringBuilder &operator<<(StringBuilder &string_builder, MessageContentType cont return string_builder << "TopicCreate"; case MessageContentType::TopicEdit: return string_builder << "TopicEdit"; + case MessageContentType::SuggestProfilePhoto: + return string_builder << "SuggestProfilePhoto"; default: UNREACHABLE(); return string_builder; @@ -174,6 +176,7 @@ bool is_allowed_media_group_content(MessageContentType content_type) { case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: return false; default: UNREACHABLE(); @@ -242,6 +245,7 @@ bool is_secret_message_content(int32 ttl, MessageContentType content_type) { case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: return false; default: UNREACHABLE(); @@ -303,6 +307,7 @@ bool is_service_message_content(MessageContentType content_type) { case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: return true; default: UNREACHABLE(); @@ -364,6 +369,7 @@ bool can_have_message_content_caption(MessageContentType content_type) { case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: return false; default: UNREACHABLE(); diff --git a/td/telegram/MessageContentType.h b/td/telegram/MessageContentType.h index d75c1b4ef..881db8a3d 100644 --- a/td/telegram/MessageContentType.h +++ b/td/telegram/MessageContentType.h @@ -65,7 +65,8 @@ enum class MessageContentType : int32 { WebViewDataReceived, GiftPremium, TopicCreate, - TopicEdit + TopicEdit, + SuggestProfilePhoto }; StringBuilder &operator<<(StringBuilder &string_builder, MessageContentType content_type); diff --git a/td/telegram/MessageExtendedMedia.cpp b/td/telegram/MessageExtendedMedia.cpp index 660912a60..92d95bb19 100644 --- a/td/telegram/MessageExtendedMedia.cpp +++ b/td/telegram/MessageExtendedMedia.cpp @@ -125,7 +125,6 @@ Result MessageExtendedMedia::get_message_extended_media( result.type_ = Type::Photo; result.photo_ = *get_message_content_photo(content); } else { - CHECK(content_type == MessageContentType::Video); result.type_ = Type::Video; result.video_file_id_ = get_message_content_upload_file_id(content); } diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 7ca10b948..c49cd5dac 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -27573,6 +27573,7 @@ bool MessagesManager::can_edit_message(DialogId dialog_id, const Message *m, boo case MessageContentType::GiftPremium: case MessageContentType::TopicCreate: case MessageContentType::TopicEdit: + case MessageContentType::SuggestProfilePhoto: return false; default: UNREACHABLE();