From 06798adce4fddb7c7e37dfc7b7cd08edc9946e77 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 17 Sep 2021 00:31:53 +0300 Subject: [PATCH] Accept skin colors and heart colors. --- .../chat_helpers/emoji_interactions.cpp | 46 ++++++++++++++++--- .../chat_helpers/emoji_interactions.h | 5 ++ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/chat_helpers/emoji_interactions.cpp b/Telegram/SourceFiles/chat_helpers/emoji_interactions.cpp index 15d6e98d0d..67537843fe 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_interactions.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_interactions.cpp @@ -71,19 +71,53 @@ void EmojiInteractions::checkEdition( base::flat_map, std::vector> &map) { const auto i = map.find(item); if (i != end(map) - && (i->second.front().emoji - != Ui::Emoji::Find(item->originalText().text))) { + && (i->second.front().emoji != chooseInteractionEmoji(item))) { map.erase(i); } } +EmojiPtr EmojiInteractions::chooseInteractionEmoji( + not_null item) const { + return chooseInteractionEmoji(item->originalText().text); +} + +EmojiPtr EmojiInteractions::chooseInteractionEmoji( + const QString &emoticon) const { + const auto emoji = Ui::Emoji::Find(emoticon); + if (!emoji) { + return nullptr; + } + const auto &pack = _session->emojiStickersPack(); + if (!pack.animationsForEmoji(emoji).empty()) { + return emoji; + } + if (const auto original = emoji->original(); original != emoji) { + if (!pack.animationsForEmoji(original).empty()) { + return original; + } + } + static const auto kHearts = { + QString::fromUtf8("\xf0\x9f\x92\x9b"), + QString::fromUtf8("\xf0\x9f\x92\x99"), + QString::fromUtf8("\xf0\x9f\x92\x9a"), + QString::fromUtf8("\xf0\x9f\x92\x9c"), + QString::fromUtf8("\xf0\x9f\xa7\xa1"), + QString::fromUtf8("\xf0\x9f\x96\xa4"), + QString::fromUtf8("\xf0\x9f\xa4\x8e"), + QString::fromUtf8("\xf0\x9f\xa4\x8d"), + }; + return ranges::contains(kHearts, emoji->id()) + ? Ui::Emoji::Find(QString::fromUtf8("\xe2\x9d\xa4")) + : emoji; +} + void EmojiInteractions::startOutgoing( not_null view) { const auto item = view->data(); if (!IsServerMsgId(item->id) || !item->history()->peer->isUser()) { return; } - const auto emoji = Ui::Emoji::Find(item->originalText().text); + const auto emoji = chooseInteractionEmoji(item); if (!emoji) { return; } @@ -134,8 +168,8 @@ void EmojiInteractions::startIncoming( if (!item) { return; } - const auto emoji = Ui::Emoji::Find(item->originalText().text); - if (!emoji || emoji != Ui::Emoji::Find(emoticon)) { + const auto emoji = chooseInteractionEmoji(item); + if (!emoji || emoji != chooseInteractionEmoji(emoticon)) { return; } const auto &pack = _session->emojiStickersPack(); @@ -182,7 +216,7 @@ void EmojiInteractions::seenOutgoing( not_null peer, const QString &emoticon) { if (const auto i = _playsSent.find(peer); i != end(_playsSent)) { - if (const auto emoji = Ui::Emoji::Find(emoticon)) { + if (const auto emoji = chooseInteractionEmoji(emoticon)) { if (const auto j = i->second.find(emoji); j != end(i->second)) { const auto last = j->second.lastDoneReceivedAt; if (!last || last + kAcceptSeenSinceRequest > crl::now()) { diff --git a/Telegram/SourceFiles/chat_helpers/emoji_interactions.h b/Telegram/SourceFiles/chat_helpers/emoji_interactions.h index 97aaa8bae3..05edfb54a6 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_interactions.h +++ b/Telegram/SourceFiles/chat_helpers/emoji_interactions.h @@ -96,6 +96,11 @@ private: }; [[nodiscard]] static CheckResult Combine(CheckResult a, CheckResult b); + [[nodiscard]] EmojiPtr chooseInteractionEmoji( + not_null item) const; + [[nodiscard]] EmojiPtr chooseInteractionEmoji( + const QString &emoticon) const; + void check(crl::time now = 0); [[nodiscard]] CheckResult checkAnimations(crl::time now); [[nodiscard]] CheckResult checkAnimations(