mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Simplify CustomEmojiId.
This commit is contained in:
parent
f0f7318978
commit
c126a1e56e
5 changed files with 12 additions and 32 deletions
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
Loading…
Add table
Reference in a new issue