Fix reply rendering without markdown in riot

This commit is contained in:
Nicolas Werner 2020-01-27 17:05:40 +01:00
parent e2f547149a
commit 9c368fa7f4
2 changed files with 36 additions and 12 deletions

View File

@ -281,9 +281,26 @@ TimelineModel::data(const QString &id, int role) const
case FormattedBody: {
const static QRegularExpression replyFallback(
"<mx-reply>.*</mx-reply>", 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)));

View File

@ -186,8 +186,11 @@ TimelineViewManager::queueTextMessage(const QString &msg, const std::optional<Re
{
mtx::events::msg::Text text = {};
text.body = msg.trimmed().toStdString();
text.format = "org.matrix.custom.html";
text.formatted_body = utils::markdownToHtml(msg).toStdString();
if (settings->isMarkdownEnabled()) {
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::optional<Re
}
text.body = QString("%1\n%2").arg(body).arg(msg).toStdString();
text.formatted_body =
utils::getFormattedQuoteBody(*related, utils::markdownToHtml(msg)).toStdString();
text.relates_to.in_reply_to.event_id = related->related_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_)