diff --git a/td/generate/scheme/secret_api.tl b/td/generate/scheme/secret_api.tl index 32db7251f..74d55329b 100644 --- a/td/generate/scheme/secret_api.tl +++ b/td/generate/scheme/secret_api.tl @@ -110,6 +110,12 @@ documentAttributeVideo66#ef02ce6 flags:# round_message:flags.0?true duration:int decryptedMessage#91cc4674 flags:# random_id:long ttl:int message:string media:flags.9?DecryptedMessageMedia entities:flags.7?Vector via_bot_name:flags.11?string reply_to_random_id:flags.3?long grouped_id:flags.17?long = DecryptedMessage; +// layer 101 + +messageEntityUnderline#9c4e7e8b offset:int length:int = MessageEntity; +messageEntityStrike#bf0693d4 offset:int length:int = MessageEntity; +messageEntityBlockquote#20df5d0 offset:int length:int = MessageEntity; + ---functions--- test.dummyFunction = Bool; diff --git a/td/generate/scheme/secret_api.tlo b/td/generate/scheme/secret_api.tlo index d6be21615..5a6e4ad2d 100644 Binary files a/td/generate/scheme/secret_api.tlo and b/td/generate/scheme/secret_api.tlo differ diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index 6f437233f..061b99928 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -488,7 +488,7 @@ secretChatStateClosed = SecretChatState; //@ttl Current message Time To Live setting (self-destruct timer) for the chat, in seconds //@key_hash Hash of the currently used key for comparison with the hash of the chat partner's key. This is a string of 36 bytes, which must be used to make a 12x12 square image with a color depth of 4. The first 16 bytes should be used to make a central 8x8 square, while the remaining 20 bytes should be used to construct a 2-pixel-wide border around that square. //-Alternatively, the first 32 bytes of the hash can be converted to the hexadecimal format and printed as 32 2-digit hex numbers -//@layer Secret chat layer; determines features supported by the other client. Video notes are supported if the layer >= 66 +//@layer Secret chat layer; determines features supported by the other client. Video notes are supported if the layer >= 66; nested text entities and underline and strikethrough entities are supported if the layer >= 101 secretChat id:int32 user_id:int32 state:SecretChatState is_outbound:Bool ttl:int32 key_hash:bytes layer:int32 = SecretChat; @@ -1398,6 +1398,15 @@ textEntityTypeBold = TextEntityType; //@description An italic text textEntityTypeItalic = TextEntityType; +//@description An underlined text +textEntityTypeUnderline = TextEntityType; + +//@description A strike-through text +textEntityTypeStrikethrough = TextEntityType; + +//@description A block quote; this entity can't be sent for now +textEntityTypeBlockQuote = TextEntityType; + //@description Text that must be formatted as if inside a code HTML tag textEntityTypeCode = TextEntityType; diff --git a/td/generate/scheme/td_api.tlo b/td/generate/scheme/td_api.tlo index a806ebd97..4bdb117d6 100644 Binary files a/td/generate/scheme/td_api.tlo and b/td/generate/scheme/td_api.tlo differ diff --git a/td/generate/scheme/telegram_api.tl b/td/generate/scheme/telegram_api.tl index 7845be8e5..0cca35ee8 100644 --- a/td/generate/scheme/telegram_api.tl +++ b/td/generate/scheme/telegram_api.tl @@ -549,6 +549,9 @@ messageEntityMentionName#352dca58 offset:int length:int user_id:int = MessageEnt inputMessageEntityMentionName#208e68c9 offset:int length:int user_id:InputUser = MessageEntity; messageEntityPhone#9b69e34b offset:int length:int = MessageEntity; messageEntityCashtag#4c4e743f offset:int length:int = MessageEntity; +messageEntityUnderline#9c4e7e8b offset:int length:int = MessageEntity; +messageEntityStrike#bf0693d4 offset:int length:int = MessageEntity; +messageEntityBlockquote#20df5d0 offset:int length:int = MessageEntity; inputChannelEmpty#ee8c1e86 = InputChannel; inputChannel#afeb712e channel_id:int access_hash:long = InputChannel; diff --git a/td/generate/scheme/telegram_api.tlo b/td/generate/scheme/telegram_api.tlo index 61d97ea33..de4f025ed 100644 Binary files a/td/generate/scheme/telegram_api.tlo and b/td/generate/scheme/telegram_api.tlo differ diff --git a/td/telegram/MessageEntity.cpp b/td/telegram/MessageEntity.cpp index bae483401..e25649a83 100644 --- a/td/telegram/MessageEntity.cpp +++ b/td/telegram/MessageEntity.cpp @@ -8,6 +8,7 @@ #include "td/telegram/ContactsManager.h" #include "td/telegram/misc.h" +#include "td/telegram/SecretChatActor.h" #include "td/utils/format.h" #include "td/utils/logging.h" @@ -47,6 +48,15 @@ StringBuilder &operator<<(StringBuilder &string_builder, const MessageEntity &me case MessageEntity::Type::Italic: string_builder << "Italic"; break; + case MessageEntity::Type::Underline: + string_builder << "Underline"; + break; + case MessageEntity::Type::Strikethrough: + string_builder << "Strikethrough"; + break; + case MessageEntity::Type::BlockQuote: + string_builder << "BlockQuote"; + break; case MessageEntity::Type::Code: string_builder << "Code"; break; @@ -103,6 +113,12 @@ tl_object_ptr MessageEntity::get_text_entity_type_object return make_tl_object(); case MessageEntity::Type::Italic: return make_tl_object(); + case MessageEntity::Type::Underline: + return make_tl_object(); + case MessageEntity::Type::Strikethrough: + return make_tl_object(); + case MessageEntity::Type::BlockQuote: + return make_tl_object(); case MessageEntity::Type::Code: return make_tl_object(); case MessageEntity::Type::Pre: @@ -1192,6 +1208,12 @@ string get_first_url(Slice text, const vector &entities) { break; case MessageEntity::Type::Italic: break; + case MessageEntity::Type::Underline: + break; + case MessageEntity::Type::Strikethrough: + break; + case MessageEntity::Type::BlockQuote: + break; case MessageEntity::Type::Code: break; case MessageEntity::Type::Pre: @@ -1646,6 +1668,15 @@ vector> get_input_message_entities(co case MessageEntity::Type::Italic: result.push_back(make_tl_object(entity.offset, entity.length)); break; + case MessageEntity::Type::Underline: + result.push_back(make_tl_object(entity.offset, entity.length)); + break; + case MessageEntity::Type::Strikethrough: + result.push_back(make_tl_object(entity.offset, entity.length)); + break; + case MessageEntity::Type::BlockQuote: + result.push_back(make_tl_object(entity.offset, entity.length)); + break; case MessageEntity::Type::Code: result.push_back(make_tl_object(entity.offset, entity.length)); break; @@ -1684,7 +1715,7 @@ vector> get_input_message_entities(co } vector> get_input_secret_message_entities( - const vector &entities) { + const vector &entities, int32 layer) { vector> result; for (auto &entity : entities) { switch (entity.type) { @@ -1710,6 +1741,21 @@ vector> get_input_secret_message_entiti case MessageEntity::Type::Italic: result.push_back(make_tl_object(entity.offset, entity.length)); break; + case MessageEntity::Type::Underline: + if (layer >= SecretChatActor::NEW_ENTITIES_LAYER) { + result.push_back(make_tl_object(entity.offset, entity.length)); + } + break; + case MessageEntity::Type::Strikethrough: + if (layer >= SecretChatActor::NEW_ENTITIES_LAYER) { + result.push_back(make_tl_object(entity.offset, entity.length)); + } + break; + case MessageEntity::Type::BlockQuote: + if (layer >= SecretChatActor::NEW_ENTITIES_LAYER) { + result.push_back(make_tl_object(entity.offset, entity.length)); + } + break; case MessageEntity::Type::Code: result.push_back(make_tl_object(entity.offset, entity.length)); break; @@ -1758,6 +1804,15 @@ Result> get_message_entities(const ContactsManager *contac case td_api::textEntityTypeItalic::ID: entities.emplace_back(MessageEntity::Type::Italic, entity->offset_, entity->length_); break; + case td_api::textEntityTypeUnderline::ID: + entities.emplace_back(MessageEntity::Type::Underline, entity->offset_, entity->length_); + break; + case td_api::textEntityTypeStrikethrough::ID: + entities.emplace_back(MessageEntity::Type::Strikethrough, entity->offset_, entity->length_); + break; + case td_api::textEntityTypeBlockQuote::ID: + // entities.emplace_back(MessageEntity::Type::BlockQuote, entity->offset_, entity->length_); + break; case td_api::textEntityTypeCode::ID: entities.emplace_back(MessageEntity::Type::Code, entity->offset_, entity->length_); break; @@ -1856,6 +1911,21 @@ vector get_message_entities(const ContactsManager *contacts_manag entities.emplace_back(MessageEntity::Type::Italic, entity_italic->offset_, entity_italic->length_); break; } + case telegram_api::messageEntityUnderline::ID: { + auto entity_bold = static_cast(entity.get()); + entities.emplace_back(MessageEntity::Type::Underline, entity_bold->offset_, entity_bold->length_); + break; + } + case telegram_api::messageEntityStrike::ID: { + auto entity_bold = static_cast(entity.get()); + entities.emplace_back(MessageEntity::Type::Strikethrough, entity_bold->offset_, entity_bold->length_); + break; + } + case telegram_api::messageEntityBlockquote::ID: { + auto entity_bold = static_cast(entity.get()); + entities.emplace_back(MessageEntity::Type::BlockQuote, entity_bold->offset_, entity_bold->length_); + break; + } case telegram_api::messageEntityCode::ID: { auto entity_code = static_cast(entity.get()); entities.emplace_back(MessageEntity::Type::Code, entity_code->offset_, entity_code->length_); @@ -1952,6 +2022,21 @@ vector get_message_entities(vectoroffset_, entity_italic->length_); break; } + case secret_api::messageEntityUnderline::ID: { + auto entity_bold = static_cast(entity.get()); + entities.emplace_back(MessageEntity::Type::Underline, entity_bold->offset_, entity_bold->length_); + break; + } + case secret_api::messageEntityStrike::ID: { + auto entity_bold = static_cast(entity.get()); + entities.emplace_back(MessageEntity::Type::Strikethrough, entity_bold->offset_, entity_bold->length_); + break; + } + case secret_api::messageEntityBlockquote::ID: { + auto entity_bold = static_cast(entity.get()); + entities.emplace_back(MessageEntity::Type::BlockQuote, entity_bold->offset_, entity_bold->length_); + break; + } case secret_api::messageEntityCode::ID: { auto entity_code = static_cast(entity.get()); entities.emplace_back(MessageEntity::Type::Code, entity_code->offset_, entity_code->length_); diff --git a/td/telegram/MessageEntity.h b/td/telegram/MessageEntity.h index 591ec65b1..73b2f1557 100644 --- a/td/telegram/MessageEntity.h +++ b/td/telegram/MessageEntity.h @@ -45,7 +45,10 @@ class MessageEntity { TextUrl, MentionName, Cashtag, - PhoneNumber + PhoneNumber, + Underline, + Strikethrough, + BlockQuote }; Type type; int32 offset; @@ -138,7 +141,7 @@ vector> get_input_message_entities(co const char *source); vector> get_input_secret_message_entities( - const vector &entities); + const vector &entities, int32 layer); vector get_message_entities(const ContactsManager *contacts_manager, vector> &&server_entities, diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 3b7182214..e1d977ff1 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -11082,7 +11082,8 @@ void MessagesManager::on_get_dialogs(FolderId folder_id, vector(dialog_folder); if (from_pinned_dialog_list) { - // TODO updata unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int + // TODO update unread_muted_peers_count:int unread_unmuted_peers_count:int + // unread_muted_messages_count:int unread_unmuted_messages_count:int FolderId folder_folder_id(folder->folder_->id_); if (folder_folder_id == FolderId::archive()) { // archive is expected in pinned dialogs list @@ -17005,8 +17006,8 @@ void MessagesManager::do_send_message(DialogId dialog_id, const Message *m, vect send_closure(td_->create_net_actor(), &SendSecretMessageActor::send, dialog_id, m->reply_to_random_id, m->ttl, message_text->text, get_secret_input_media(content, td_, nullptr, BufferSlice(), layer), - get_input_secret_message_entities(message_text->entities), m->via_bot_user_id, m->media_album_id, - random_id); + get_input_secret_message_entities(message_text->entities, layer), m->via_bot_user_id, + m->media_album_id, random_id); } else { send_closure(td_->create_net_actor(), &SendMessageActor::send, get_message_flags(m), dialog_id, m->reply_to_message_id, get_input_reply_markup(m->reply_markup), diff --git a/td/telegram/SecretChatActor.h b/td/telegram/SecretChatActor.h index 614e0a844..4146061d1 100644 --- a/td/telegram/SecretChatActor.h +++ b/td/telegram/SecretChatActor.h @@ -48,7 +48,13 @@ class NetQueryCreator; class SecretChatActor : public NetQueryCallback { public: // do not change DEFAULT_LAYER, unless all it's usages are fixed - enum : int32 { DEFAULT_LAYER = 46, VIDEO_NOTES_LAYER = 66, MTPROTO_2_LAYER = 73, MY_LAYER = MTPROTO_2_LAYER }; + enum : int32 { + DEFAULT_LAYER = 46, + VIDEO_NOTES_LAYER = 66, + MTPROTO_2_LAYER = 73, + NEW_ENTITIES_LAYER = 101, + MY_LAYER = NEW_ENTITIES_LAYER + }; class Context { public: diff --git a/td/telegram/Version.h b/td/telegram/Version.h index 407b5ad75..c1c19e9bb 100644 --- a/td/telegram/Version.h +++ b/td/telegram/Version.h @@ -8,7 +8,7 @@ namespace td { -constexpr int32 MTPROTO_LAYER = 100; +constexpr int32 MTPROTO_LAYER = 101; enum class Version : int32 { Initial,