diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index fb8c0095..03b7d6a7 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -281,9 +281,26 @@ TimelineModel::data(const QString &id, int role) const
case FormattedBody: {
const static QRegularExpression replyFallback(
".*", QRegularExpression::DotMatchesEverythingOption);
- return QVariant(
- utils::replaceEmoji(utils::linkifyMessage(utils::escapeBlacklistedHtml(
- formattedBodyWithFallback(event).remove(replyFallback)))));
+
+ bool isReply = !in_reply_to_event(event).empty();
+
+ auto formattedBody_ = QString::fromStdString(formatted_body(event));
+ if (formattedBody_.isEmpty()) {
+ auto body_ = QString::fromStdString(body(event));
+
+ if (isReply) {
+ while (body_.startsWith("> "))
+ body_ = body_.right(body_.size() - body_.indexOf('\n') - 1);
+ if (body_.startsWith('\n'))
+ body_ = body_.right(body_.size() - 1);
+ }
+ formattedBody_ = body_.toHtmlEscaped();
+ } else {
+ if (isReply)
+ formattedBody_ = formattedBody_.remove(replyFallback);
+ }
+ return QVariant(utils::replaceEmoji(
+ utils::linkifyMessage(utils::escapeBlacklistedHtml(formattedBody_))));
}
case Url:
return QVariant(QString::fromStdString(url(event)));
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 578d075f..9008d9d2 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -186,8 +186,11 @@ TimelineViewManager::queueTextMessage(const QString &msg, const std::optionalisMarkdownEnabled()) {
+ text.format = "org.matrix.custom.html";
+ text.formatted_body = utils::markdownToHtml(msg).toStdString();
+ }
if (related) {
QString body;
@@ -202,14 +205,18 @@ TimelineViewManager::queueTextMessage(const QString &msg, const std::optionalrelated_event;
- }
- if (!settings->isMarkdownEnabled()) {
- text.format = "";
- text.formatted_body = "";
+ // NOTE(Nico): rich replies always need a formatted_body!
+ text.format = "org.matrix.custom.html";
+ if (settings->isMarkdownEnabled())
+ text.formatted_body =
+ utils::getFormattedQuoteBody(*related, utils::markdownToHtml(msg))
+ .toStdString();
+ else
+ text.formatted_body =
+ utils::getFormattedQuoteBody(*related, msg.toHtmlEscaped()).toStdString();
+
+ text.relates_to.in_reply_to.event_id = related->related_event;
}
if (timeline_)