From ae319fa10b3f42e269f6373993694773ab87b131 Mon Sep 17 00:00:00 2001 From: levlam Date: Thu, 8 Mar 2018 16:28:54 +0300 Subject: [PATCH] Cashtag support. GitOrigin-RevId: c1e55687ce0c977635b77b48940bc6cc0735e02e --- td/generate/scheme/td_api.tl | 3 +++ td/generate/scheme/td_api.tlo | Bin 112548 -> 112612 bytes td/telegram/MessageEntity.cpp | 25 ++++++++++++++++++++++--- td/telegram/MessageEntity.h | 3 ++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/td/generate/scheme/td_api.tl b/td/generate/scheme/td_api.tl index f3582829..31d5c7f0 100644 --- a/td/generate/scheme/td_api.tl +++ b/td/generate/scheme/td_api.tl @@ -924,6 +924,9 @@ textEntityTypeMention = TextEntityType; //@description A hashtag text, beginning with "#" textEntityTypeHashtag = TextEntityType; +//@description A cashtag text, beginning with "$" and consisting of capital english letters (i.e. "$USD") +textEntityTypeCashtag = TextEntityType; + //@description A bot command, beginning with "/". This shouldn't be highlighted if there are no bots in the chat textEntityTypeBotCommand = TextEntityType; diff --git a/td/generate/scheme/td_api.tlo b/td/generate/scheme/td_api.tlo index 764bb342239f3a909c9ba241ab757e1576153a43..ee531d292046d7e1548000a2961a7e103ac52953 100644 GIT binary patch delta 445 zcmZ4Tp6$tdwhdP#L>F3i@$!YFR+PBrm1LGwhEx`$GVo4TWE9^dxr3SU-{ze%+>cm5 ziYA}I2oYNf` m8BHLp3YggBIjK4jp(~7xI-IcZV4PeSq74?`Zo$NuvlRgNypGZU delta 382 zcmaFzo^8o{whdP#L|^gcx$=diR+PBrm1LGwhEx`$GVn}RWE9^dxr3SU@8+E{+>cm5 ziYA}s^t+F MessageEntity::get_text_entity_type_object return make_tl_object(argument); case MessageEntity::Type::MentionName: return make_tl_object(user_id.get()); + case MessageEntity::Type::Cashtag: + return make_tl_object(); default: UNREACHABLE(); return nullptr; @@ -1057,6 +1062,12 @@ vector find_entities(Slice text, bool skip_bot_commands, bool onl entities.emplace_back(MessageEntity::Type::Hashtag, narrow_cast(hashtag.begin() - text.begin()), narrow_cast(hashtag.size())); } + + auto cashtags = find_cashtags(text); + for (auto &cashtag : cashtags) { + entities.emplace_back(MessageEntity::Type::Cashtag, narrow_cast(cashtag.begin() - text.begin()), + narrow_cast(cashtag.size())); + } } auto urls = find_urls(text); @@ -1173,6 +1184,8 @@ string get_first_url(Slice text, const vector &entities) { return entity.argument; case MessageEntity::Type::MentionName: break; + case MessageEntity::Type::Cashtag: + break; default: UNREACHABLE(); } @@ -1591,6 +1604,7 @@ vector> get_input_message_entities(co case MessageEntity::Type::BotCommand: case MessageEntity::Type::Url: case MessageEntity::Type::EmailAddress: + case MessageEntity::Type::Cashtag: continue; case MessageEntity::Type::Bold: result.push_back(make_tl_object(entity.offset, entity.length)); @@ -1637,6 +1651,8 @@ vector> get_input_secret_message_entiti case MessageEntity::Type::Hashtag: result.push_back(make_tl_object(entity.offset, entity.length)); break; + case MessageEntity::Type::Cashtag: + break; case MessageEntity::Type::BotCommand: break; case MessageEntity::Type::Url: @@ -1688,6 +1704,7 @@ Result> get_message_entities(const ContactsManager *contac case td_api::textEntityTypeBotCommand::ID: case td_api::textEntityTypeUrl::ID: case td_api::textEntityTypeEmailAddress::ID: + case td_api::textEntityTypeCashtag::ID: break; case td_api::textEntityTypeBold::ID: entities.emplace_back(MessageEntity::Type::Bold, entity->offset_, entity->length_); @@ -1758,9 +1775,11 @@ vector get_message_entities(const ContactsManager *contacts_manag entities.emplace_back(MessageEntity::Type::Hashtag, entity_hashtag->offset_, entity_hashtag->length_); break; } - case telegram_api::messageEntityCashtag::ID: - // skip for now + case telegram_api::messageEntityCashtag::ID: { + auto entity_cashtag = static_cast(entity.get()); + entities.emplace_back(MessageEntity::Type::Cashtag, entity_cashtag->offset_, entity_cashtag->length_); break; + } case telegram_api::messageEntityPhone::ID: // skip for now break; @@ -1971,7 +1990,7 @@ Status fix_formatted_text(string &text, vector &entities, bool al in_entity = false; if (has_non_space_in_entity) { - // TODO check entities for validness, for example, that mention, hashtag and URLs are valid + // TODO check entities for validness, for example, that mentions, hashtags, cashtags and URLs are valid if (current_entity != left_entities) { entities[left_entities] = std::move(entities[current_entity]); } diff --git a/td/telegram/MessageEntity.h b/td/telegram/MessageEntity.h index 6a5e5001..c1ee6549 100644 --- a/td/telegram/MessageEntity.h +++ b/td/telegram/MessageEntity.h @@ -42,7 +42,8 @@ class MessageEntity { Pre, PreCode, TextUrl, - MentionName + MentionName, + Cashtag }; Type type; int32 offset;