Don't send markdown links in body
fixes #422
2 files changed, 32 insertions, 4 deletions
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index d5a6a1dd..20a3fe10 100644
--- a/src/timeline/InputBar.cpp
+++ b/src/timeline/InputBar.cpp
@@ -264,6 +264,9 @@ InputBar::message(QString msg, MarkdownOverride useMarkdown)
useMarkdown == MarkdownOverride::NOT_SPECIFIED) ||
useMarkdown == MarkdownOverride::ON) {
text.formatted_body = utils::markdownToHtml(msg).toStdString();
+ // Remove markdown links by completer
+ text.body =
+ msg.trimmed().replace(conf::strings::matrixToMarkdownLink, "\\1").toStdString();
// Don't send formatted_body, when we don't need to
if (text.formatted_body.find("<") == std::string::npos)
@@ -326,6 +329,9 @@ InputBar::emote(QString msg)
ChatPage::instance()->userSettings()->markdown()) {
emote.formatted_body = html.toStdString();
emote.format = "org.matrix.custom.html";
+ // Remove markdown links by completer
+ emote.body =
+ msg.trimmed().replace(conf::strings::matrixToMarkdownLink, "\\1").toStdString();
}
if (!room->reply().isEmpty()) {
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 6134262e..004cf26a 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -17,6 +17,7 @@
#include <QStandardPaths>
#include "ChatPage.h"
+#include "Config.h"
#include "EventAccessors.h"
#include "Logging.h"
#include "MainWindow.h"
@@ -1586,10 +1587,31 @@ TimelineModel::setEdit(QString newEdit)
auto msgType = mtx::accessors::msg_type(e);
if (msgType == mtx::events::MessageType::Text ||
- msgType == mtx::events::MessageType::Notice) {
- input()->setText(relatedInfo(newEdit).quoted_body);
- } else if (msgType == mtx::events::MessageType::Emote) {
- input()->setText("/me " + relatedInfo(newEdit).quoted_body);
+ msgType == mtx::events::MessageType::Notice ||
+ msgType == mtx::events::MessageType::Emote) {
+ auto relInfo = relatedInfo(newEdit);
+ auto editText = relInfo.quoted_body;
+
+ if (!relInfo.quoted_formatted_body.isEmpty()) {
+ auto matches = conf::strings::matrixToLink.globalMatch(
+ relInfo.quoted_formatted_body);
+ std::map<QString, QString> reverseNameMapping;
+ while (matches.hasNext()) {
+ auto m = matches.next();
+ reverseNameMapping[m.captured(2)] = m.captured(1);
+ }
+
+ for (const auto &[user, link] : reverseNameMapping) {
+ // TODO(Nico): html unescape the user name
+ editText.replace(
+ user, QStringLiteral("[%1](%2)").arg(user, link));
+ }
+ }
+
+ if (msgType == mtx::events::MessageType::Emote)
+ input()->setText("/me " + editText);
+ else
+ input()->setText(editText);
} else {
input()->setText("");
}
|