Simplify CustomEmojiId.

This commit is contained in:
John Preston 2022-08-15 13:17:24 +03:00
parent f0f7318978
commit c126a1e56e
5 changed files with 12 additions and 32 deletions

View file

@ -20,31 +20,24 @@ namespace {
using namespace TextUtilities; using namespace TextUtilities;
[[nodiscard]] QString CustomEmojiEntityData( [[nodiscard]] QString CustomEmojiEntityData(
not_null<Main::Session*> session,
const MTPDmessageEntityCustomEmoji &data) { const MTPDmessageEntityCustomEmoji &data) {
return Data::SerializeCustomEmojiId({ return Data::SerializeCustomEmojiId({
.selfId = session->userId().bare,
.id = data.vdocument_id().v, .id = data.vdocument_id().v,
}); });
} }
[[nodiscard]] std::optional<MTPMessageEntity> CustomEmojiEntity( [[nodiscard]] std::optional<MTPMessageEntity> CustomEmojiEntity(
not_null<Main::Session*> session,
MTPint offset, MTPint offset,
MTPint length, MTPint length,
const QString &data) { const QString &data) {
const auto parsed = Data::ParseCustomEmojiData(data); const auto parsed = Data::ParseCustomEmojiData(data);
if (!parsed.id || parsed.selfId != session->userId().bare) { if (!parsed.id) {
return {};
}
const auto document = session->data().document(parsed.id);
if (!document->sticker()) {
return {}; return {};
} }
return MTP_messageEntityCustomEmoji( return MTP_messageEntityCustomEmoji(
offset, offset,
length, length,
MTP_long(document->id)); MTP_long(parsed.id));
} }
[[nodiscard]] std::optional<MTPMessageEntity> MentionNameEntity( [[nodiscard]] std::optional<MTPMessageEntity> 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_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_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_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(); 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; } break;
} }
} }
@ -181,7 +174,7 @@ MTPVector<MTPMessageEntity> EntitiesToMTP(
case EntityType::Pre: v.push_back(MTP_messageEntityPre(offset, length, MTP_string(entity.data()))); break; 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::Spoiler: v.push_back(MTP_messageEntitySpoiler(offset, length)); break;
case EntityType::CustomEmoji: { 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); v.push_back(*valid);
} }
} break; } break;

View file

@ -87,11 +87,10 @@ QString FieldTagMimeProcessor::operator()(QStringView mimeTag) {
} else if (Ui::InputField::IsCustomEmojiLink(tag)) { } else if (Ui::InputField::IsCustomEmojiLink(tag)) {
const auto data = Ui::InputField::CustomEmojiEntityData(tag); const auto data = Ui::InputField::CustomEmojiEntityData(tag);
const auto emoji = Data::ParseCustomEmojiData(data); const auto emoji = Data::ParseCustomEmojiData(data);
if (emoji.selfId != id) { if (!emoji.id) {
i = all.erase(i); i = all.erase(i);
continue; continue;
} } else if (!_session->premium()) {
if (!_session->premium()) {
const auto document = _session->data().document(emoji.id); const auto document = _session->data().document(emoji.id);
if (document->isPremiumEmoji()) { if (document->isPremiumEmoji()) {
if (!_allowPremiumEmoji if (!_allowPremiumEmoji

View file

@ -488,10 +488,9 @@ std::unique_ptr<Ui::CustomEmoji::Loader> CustomEmojiManager::createLoader(
std::unique_ptr<Ui::CustomEmoji::Loader> CustomEmojiManager::createLoader( std::unique_ptr<Ui::CustomEmoji::Loader> CustomEmojiManager::createLoader(
DocumentId documentId, DocumentId documentId,
SizeTag tag) { SizeTag tag) {
const auto selfId = _owner->session().userId().bare;
auto result = std::make_unique<CustomEmojiLoader>( auto result = std::make_unique<CustomEmojiLoader>(
_owner, _owner,
CustomEmojiId{ .selfId = selfId, .id = documentId }, CustomEmojiId{ .id = documentId },
tag); tag);
if (result->resolving()) { if (result->resolving()) {
const auto i = SizeIndex(tag); const auto i = SizeIndex(tag);
@ -669,27 +668,17 @@ int FrameSizeFromTag(SizeTag tag) {
} }
QString SerializeCustomEmojiId(const CustomEmojiId &id) { QString SerializeCustomEmojiId(const CustomEmojiId &id) {
return QString::number(id.id) return QString::number(id.id);
+ ':'
+ QString::number(id.selfId);
} }
QString SerializeCustomEmojiId(not_null<DocumentData*> document) { QString SerializeCustomEmojiId(not_null<DocumentData*> document) {
return SerializeCustomEmojiId({ return SerializeCustomEmojiId({
.selfId = document->session().userId().bare,
.id = document->id, .id = document->id,
}); });
} }
CustomEmojiId ParseCustomEmojiData(QStringView data) { CustomEmojiId ParseCustomEmojiData(QStringView data) {
const auto components = data.split(':'); return { .id = data.toULongLong() };
if (components.size() != 2) {
return {};
}
return {
.selfId = components[1].toULongLong(),
.id = components[0].toULongLong(),
};
} }
bool AllowEmojiWithoutPremium(not_null<PeerData*> peer) { bool AllowEmojiWithoutPremium(not_null<PeerData*> peer) {

View file

@ -24,8 +24,7 @@ class Session;
class CustomEmojiLoader; class CustomEmojiLoader;
struct CustomEmojiId { struct CustomEmojiId {
uint64 selfId = 0; DocumentId id = 0;
uint64 id = 0;
}; };
class CustomEmojiManager final : public base::has_weak_ptr { class CustomEmojiManager final : public base::has_weak_ptr {

@ -1 +1 @@
Subproject commit 180b0bc51796dcbe5d9371280e49fda24dfaf0fd Subproject commit fbd82ff92b6e7e1d1f5bb61308d59b60b066f073