diff --git a/Telegram/SourceFiles/api/api_text_entities.cpp b/Telegram/SourceFiles/api/api_text_entities.cpp index 5bd25eb21d..a782d6153f 100644 --- a/Telegram/SourceFiles/api/api_text_entities.cpp +++ b/Telegram/SourceFiles/api/api_text_entities.cpp @@ -20,31 +20,24 @@ namespace { using namespace TextUtilities; [[nodiscard]] QString CustomEmojiEntityData( - not_null session, const MTPDmessageEntityCustomEmoji &data) { return Data::SerializeCustomEmojiId({ - .selfId = session->userId().bare, .id = data.vdocument_id().v, }); } [[nodiscard]] std::optional CustomEmojiEntity( - not_null session, MTPint offset, MTPint length, const QString &data) { const auto parsed = Data::ParseCustomEmojiData(data); - if (!parsed.id || parsed.selfId != session->userId().bare) { - return {}; - } - const auto document = session->data().document(parsed.id); - if (!document->sticker()) { + if (!parsed.id) { return {}; } return MTP_messageEntityCustomEmoji( offset, length, - MTP_long(document->id)); + MTP_long(parsed.id)); } [[nodiscard]] std::optional MentionNameEntity( @@ -125,9 +118,9 @@ EntitiesInText EntitiesFromMTP( case mtpc_messageEntityPre: { auto &d = entity.c_messageEntityPre(); result.push_back({ EntityType::Pre, d.voffset().v, d.vlength().v, qs(d.vlanguage()) }); } break; case mtpc_messageEntityBankCard: break; // Skipping cards. // #TODO entities case mtpc_messageEntitySpoiler: { auto &d = entity.c_messageEntitySpoiler(); result.push_back({ EntityType::Spoiler, d.voffset().v, d.vlength().v }); } break; - case mtpc_messageEntityCustomEmoji: if (session) { + case mtpc_messageEntityCustomEmoji: { const auto &d = entity.c_messageEntityCustomEmoji(); - result.push_back({ EntityType::CustomEmoji, d.voffset().v, d.vlength().v, CustomEmojiEntityData(session, d) }); + result.push_back({ EntityType::CustomEmoji, d.voffset().v, d.vlength().v, CustomEmojiEntityData(d) }); } break; } } @@ -181,7 +174,7 @@ MTPVector EntitiesToMTP( case EntityType::Pre: v.push_back(MTP_messageEntityPre(offset, length, MTP_string(entity.data()))); break; case EntityType::Spoiler: v.push_back(MTP_messageEntitySpoiler(offset, length)); break; case EntityType::CustomEmoji: { - if (const auto valid = CustomEmojiEntity(session, offset, length, entity.data())) { + if (const auto valid = CustomEmojiEntity(offset, length, entity.data())) { v.push_back(*valid); } } break; diff --git a/Telegram/SourceFiles/chat_helpers/message_field.cpp b/Telegram/SourceFiles/chat_helpers/message_field.cpp index be6d1e401c..50b5883c83 100644 --- a/Telegram/SourceFiles/chat_helpers/message_field.cpp +++ b/Telegram/SourceFiles/chat_helpers/message_field.cpp @@ -87,11 +87,10 @@ QString FieldTagMimeProcessor::operator()(QStringView mimeTag) { } else if (Ui::InputField::IsCustomEmojiLink(tag)) { const auto data = Ui::InputField::CustomEmojiEntityData(tag); const auto emoji = Data::ParseCustomEmojiData(data); - if (emoji.selfId != id) { + if (!emoji.id) { i = all.erase(i); continue; - } - if (!_session->premium()) { + } else if (!_session->premium()) { const auto document = _session->data().document(emoji.id); if (document->isPremiumEmoji()) { if (!_allowPremiumEmoji diff --git a/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp b/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp index c1b4b71f80..0c9b92dafc 100644 --- a/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp +++ b/Telegram/SourceFiles/data/stickers/data_custom_emoji.cpp @@ -488,10 +488,9 @@ std::unique_ptr CustomEmojiManager::createLoader( std::unique_ptr CustomEmojiManager::createLoader( DocumentId documentId, SizeTag tag) { - const auto selfId = _owner->session().userId().bare; auto result = std::make_unique( _owner, - CustomEmojiId{ .selfId = selfId, .id = documentId }, + CustomEmojiId{ .id = documentId }, tag); if (result->resolving()) { const auto i = SizeIndex(tag); @@ -669,27 +668,17 @@ int FrameSizeFromTag(SizeTag tag) { } QString SerializeCustomEmojiId(const CustomEmojiId &id) { - return QString::number(id.id) - + ':' - + QString::number(id.selfId); + return QString::number(id.id); } QString SerializeCustomEmojiId(not_null document) { return SerializeCustomEmojiId({ - .selfId = document->session().userId().bare, .id = document->id, }); } CustomEmojiId ParseCustomEmojiData(QStringView data) { - const auto components = data.split(':'); - if (components.size() != 2) { - return {}; - } - return { - .selfId = components[1].toULongLong(), - .id = components[0].toULongLong(), - }; + return { .id = data.toULongLong() }; } bool AllowEmojiWithoutPremium(not_null peer) { diff --git a/Telegram/SourceFiles/data/stickers/data_custom_emoji.h b/Telegram/SourceFiles/data/stickers/data_custom_emoji.h index c8c3f9fa91..3ec7c2b9ae 100644 --- a/Telegram/SourceFiles/data/stickers/data_custom_emoji.h +++ b/Telegram/SourceFiles/data/stickers/data_custom_emoji.h @@ -24,8 +24,7 @@ class Session; class CustomEmojiLoader; struct CustomEmojiId { - uint64 selfId = 0; - uint64 id = 0; + DocumentId id = 0; }; class CustomEmojiManager final : public base::has_weak_ptr { diff --git a/Telegram/lib_ui b/Telegram/lib_ui index 180b0bc517..fbd82ff92b 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit 180b0bc51796dcbe5d9371280e49fda24dfaf0fd +Subproject commit fbd82ff92b6e7e1d1f5bb61308d59b60b066f073