Accept skin colors and heart colors.
This commit is contained in:
parent
34c0d97c54
commit
06798adce4
|
@ -71,19 +71,53 @@ void EmojiInteractions::checkEdition(
|
||||||
base::flat_map<not_null<HistoryItem*>, std::vector<Animation>> &map) {
|
base::flat_map<not_null<HistoryItem*>, std::vector<Animation>> &map) {
|
||||||
const auto i = map.find(item);
|
const auto i = map.find(item);
|
||||||
if (i != end(map)
|
if (i != end(map)
|
||||||
&& (i->second.front().emoji
|
&& (i->second.front().emoji != chooseInteractionEmoji(item))) {
|
||||||
!= Ui::Emoji::Find(item->originalText().text))) {
|
|
||||||
map.erase(i);
|
map.erase(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EmojiPtr EmojiInteractions::chooseInteractionEmoji(
|
||||||
|
not_null<HistoryItem*> 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(
|
void EmojiInteractions::startOutgoing(
|
||||||
not_null<const HistoryView::Element*> view) {
|
not_null<const HistoryView::Element*> view) {
|
||||||
const auto item = view->data();
|
const auto item = view->data();
|
||||||
if (!IsServerMsgId(item->id) || !item->history()->peer->isUser()) {
|
if (!IsServerMsgId(item->id) || !item->history()->peer->isUser()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto emoji = Ui::Emoji::Find(item->originalText().text);
|
const auto emoji = chooseInteractionEmoji(item);
|
||||||
if (!emoji) {
|
if (!emoji) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -134,8 +168,8 @@ void EmojiInteractions::startIncoming(
|
||||||
if (!item) {
|
if (!item) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto emoji = Ui::Emoji::Find(item->originalText().text);
|
const auto emoji = chooseInteractionEmoji(item);
|
||||||
if (!emoji || emoji != Ui::Emoji::Find(emoticon)) {
|
if (!emoji || emoji != chooseInteractionEmoji(emoticon)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto &pack = _session->emojiStickersPack();
|
const auto &pack = _session->emojiStickersPack();
|
||||||
|
@ -182,7 +216,7 @@ void EmojiInteractions::seenOutgoing(
|
||||||
not_null<PeerData*> peer,
|
not_null<PeerData*> peer,
|
||||||
const QString &emoticon) {
|
const QString &emoticon) {
|
||||||
if (const auto i = _playsSent.find(peer); i != end(_playsSent)) {
|
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)) {
|
if (const auto j = i->second.find(emoji); j != end(i->second)) {
|
||||||
const auto last = j->second.lastDoneReceivedAt;
|
const auto last = j->second.lastDoneReceivedAt;
|
||||||
if (!last || last + kAcceptSeenSinceRequest > crl::now()) {
|
if (!last || last + kAcceptSeenSinceRequest > crl::now()) {
|
||||||
|
|
|
@ -96,6 +96,11 @@ private:
|
||||||
};
|
};
|
||||||
[[nodiscard]] static CheckResult Combine(CheckResult a, CheckResult b);
|
[[nodiscard]] static CheckResult Combine(CheckResult a, CheckResult b);
|
||||||
|
|
||||||
|
[[nodiscard]] EmojiPtr chooseInteractionEmoji(
|
||||||
|
not_null<HistoryItem*> item) const;
|
||||||
|
[[nodiscard]] EmojiPtr chooseInteractionEmoji(
|
||||||
|
const QString &emoticon) const;
|
||||||
|
|
||||||
void check(crl::time now = 0);
|
void check(crl::time now = 0);
|
||||||
[[nodiscard]] CheckResult checkAnimations(crl::time now);
|
[[nodiscard]] CheckResult checkAnimations(crl::time now);
|
||||||
[[nodiscard]] CheckResult checkAnimations(
|
[[nodiscard]] CheckResult checkAnimations(
|
||||||
|
|
Loading…
Reference in New Issue