diff --git a/src/providers/emoji/emojis.cpp b/src/providers/emoji/emojis.cpp index b1b1892e9..4e913a467 100644 --- a/src/providers/emoji/emojis.cpp +++ b/src/providers/emoji/emojis.cpp @@ -27,10 +27,14 @@ void parseEmoji(const std::shared_ptr<EmojiData> &emojiData, const rapidjson::Va } capabilities; if (!shortCode.isEmpty()) { - emojiData->shortCode = shortCode; - } else if (!rj::getSafe(unparsedEmoji, "short_name", emojiData->shortCode)) { - return; + emojiData->shortCodes.push_back(shortCode); + } else { + const auto &shortCodes = unparsedEmoji["short_names"]; + for (const auto &shortCode : shortCodes.GetArray()) { + emojiData->shortCodes.emplace_back(shortCode.GetString()); + } } + rj::getSafe(unparsedEmoji, "non_qualified", emojiData->nonQualifiedCode); rj::getSafe(unparsedEmoji, "unified", emojiData->unifiedCode); @@ -118,8 +122,10 @@ void Emojis::loadEmojis() auto emojiData = std::make_shared<EmojiData>(); parseEmoji(emojiData, unparsedEmoji); - this->emojiShortCodeToEmoji.insert(emojiData->shortCode, emojiData); - this->shortCodes.emplace_back(emojiData->shortCode); + for (const auto &shortCode : emojiData->shortCodes) { + this->emojiShortCodeToEmoji.insert(shortCode, emojiData); + this->shortCodes.emplace_back(shortCode); + } this->emojiFirstByte[emojiData->value.at(0)].append(emojiData); @@ -139,11 +145,11 @@ void Emojis::loadEmojis() } parseEmoji(variationEmojiData, variation, - emojiData->shortCode + "_" + toneNameIt->second); + emojiData->shortCodes[0] + "_" + toneNameIt->second); - this->emojiShortCodeToEmoji.insert(variationEmojiData->shortCode, + this->emojiShortCodeToEmoji.insert(variationEmojiData->shortCodes[0], variationEmojiData); - this->shortCodes.push_back(variationEmojiData->shortCode); + this->shortCodes.push_back(variationEmojiData->shortCodes[0]); this->emojiFirstByte[variationEmojiData->value.at(0)].append(variationEmojiData); @@ -256,8 +262,8 @@ void Emojis::loadEmojiSet() urlPrefix = it->second; } QString url = urlPrefix + code + ".png"; - emoji->emoteData.image1x = new messages::Image(url, 0.35, emoji->value, - ":" + emoji->shortCode + ":<br/>Emoji"); + emoji->emoteData.image1x = new messages::Image( + url, 0.35, emoji->value, ":" + emoji->shortCodes[0] + ":<br/>Emoji"); }); }); } diff --git a/src/providers/emoji/emojis.hpp b/src/providers/emoji/emojis.hpp index b41703214..0fe8ed5f0 100644 --- a/src/providers/emoji/emojis.hpp +++ b/src/providers/emoji/emojis.hpp @@ -22,7 +22,7 @@ struct EmojiData { QString nonQualifiedCode; // i.e. thinking - QString shortCode; + std::vector<QString> shortCodes; std::set<QString> capabilities; diff --git a/src/widgets/emotepopup.cpp b/src/widgets/emotepopup.cpp index 53197be1d..3a15a67ee 100644 --- a/src/widgets/emotepopup.cpp +++ b/src/widgets/emotepopup.cpp @@ -142,8 +142,9 @@ void EmotePopup::loadEmojis() builder.getMessage()->flags |= Message::DisableCompactEmotes; emojis.each([&builder](const QString &key, const auto &value) { - builder.append((new EmoteElement(value->emoteData, MessageElement::Flags::AlwaysShow)) - ->setLink(Link(Link::Type::InsertText, ":" + value->shortCode + ":"))); + builder.append( + (new EmoteElement(value->emoteData, MessageElement::Flags::AlwaysShow)) + ->setLink(Link(Link::Type::InsertText, ":" + value->shortCodes[0] + ":"))); }); emojiChannel->addMessage(builder.getMessage());