diff --git a/src/chatview_webkit.cpp b/src/chatview_webkit.cpp index 7c3c287cf..704e24c1b 100644 --- a/src/chatview_webkit.cpp +++ b/src/chatview_webkit.cpp @@ -697,15 +697,18 @@ void ChatView::dispatchMessage(const MessageView &mv) m["sender"] = mv.nick(); m["messageid"] = mv.reactionsId(); { - auto r = updateReactions(mv.nick(), mv.reactionsId(), mv.reactions()); - auto vmr = QVariantMap(); - - QMapIterator it(r); - while (it.hasNext()) { - it.next(); - vmr[it.key()] = it.value(); + auto rl = updateReactions(mv.nick(), mv.reactionsId(), mv.reactions()); + auto vl = QVariantList(); + for (auto &r : std::as_const(rl)) { + auto vmr = QVariantMap(); + if (!r.base.isEmpty()) { + vmr[QLatin1String("base")] = r.base; + } + vmr[QLatin1String("text")] = r.code; + vmr[QLatin1String("nicks")] = r.nicks; + vl << vmr; } - m["reactions"] = vmr; + m[QLatin1String("reactions")] = vl; } break; case MessageView::FileTransferRequest: diff --git a/src/chatviewcommon.cpp b/src/chatviewcommon.cpp index 8531ea5b0..0e3067708 100644 --- a/src/chatviewcommon.cpp +++ b/src/chatviewcommon.cpp @@ -129,7 +129,7 @@ bool ChatViewCommon::compatibleColors(const QColor &c1, const QColor &c2) return !((dC < 80. && dV > 100) || (dC < 110. && dV <= 100 && dV > 10) || (dC < 125. && dV <= 10)); } -const QMap & +QList ChatViewCommon::updateReactions(const QString &senderNickname, const QString &messageId, const QSet &reactions) { auto msgIt = _reactions.find(messageId); @@ -157,5 +157,14 @@ ChatViewCommon::updateReactions(const QString &senderNickname, const QString &me for (auto const &v : toRemove) { msgIt.value().total[v].removeOne(senderNickname); } - return msgIt.value().total; + auto &total = msgIt.value().total; + + QList ret; + for (auto it = total.begin(); it != total.end(); ++it) { + static const auto skinRemove = QRegularExpression("([\\x{1F3FB}-\\x{1F3FF}]|[\\x{1F9B0}-\\x{1F9B2}])"); + QString orig = it.key(); + auto sanitized = orig.remove(skinRemove); + ret << ReactionsItem { sanitized != orig ? sanitized : QString {}, orig, it.value() }; + } + return ret; } diff --git a/src/chatviewcommon.h b/src/chatviewcommon.h index 50f705943..04629702f 100644 --- a/src/chatviewcommon.h +++ b/src/chatviewcommon.h @@ -44,12 +44,18 @@ class ChatViewCommon { QHash> perUser; // nickname => unicode reactions }; + struct ReactionsItem { + QString base; + QString code; + QStringList nicks; + }; + void addUser(const QString &nickname); void removeUser(const QString &nickname); void renameUser(const QString &oldNickname, const QString &newNickname); - const QMap &updateReactions(const QString &senderNickname, const QString &messageId, - const QSet &reactions); + QList updateReactions(const QString &senderNickname, const QString &messageId, + const QSet &reactions); protected: QDateTime _lastMsgTime;