From 09a35b1a7e268f2b956473e13fe069148d7691dd Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Thu, 21 Mar 2024 16:19:12 -0400 Subject: [PATCH] Preserve mx-reply in the edited message if it exists (cherry picked from commit fa57db8e831fa1a1c26a451647affdbeea1a7fd3) --- src/actionshandler.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/actionshandler.cpp b/src/actionshandler.cpp index 8fd3cf535..94fc4b58d 100644 --- a/src/actionshandler.cpp +++ b/src/actionshandler.cpp @@ -14,6 +14,7 @@ #include "models/actionsmodel.h" #include "neochatconfig.h" #include "texthandler.h" +#include "utils.h" using namespace Quotient; @@ -145,6 +146,26 @@ void ActionsHandler::handleMessage(const QString &text, QString handledText, Cha return; } + // We want to add back the if it's in the original message but not in the edit, to preserve the reply. + for (auto it = m_room->messageEvents().crbegin(); it != m_room->messageEvents().crend(); it++) { + if (const auto event = eventCast(&**it)) { + if (event->senderId() == m_room->localUser()->id() && event->hasTextContent()) { + QString originalString; + if (event->content()) { + originalString = static_cast(event->content())->body; + } else { + originalString = event->plainBody(); + } + + const QRegularExpression exp(TextRegex::removeRichReply); + const auto match = exp.match(originalString); + if (match.hasCaptured(0) && !handledText.contains(TextRegex::removeRichReply)) { + handledText.prepend(match.captured(0)); + } + } + } + } + m_room->postMessage(text, handledText, messageType, chatBarCache->replyId(), chatBarCache->editId(), chatBarCache->threadId()); }