From 0f043e36c4735c87979bdb9b04e8c820582ca0f0 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Fri, 22 Jan 2021 14:45:40 +0000 Subject: [PATCH] Revert "Improve sending message with mentions" This reverts commit b9d34487a499f511a64719428b8b966b3f3305da --- imports/NeoChat/Component/ChatTextInput.qml | 12 +++++++++++- src/actionshandler.cpp | 14 +++++++++----- src/actionshandler.h | 3 ++- src/neochatroom.cpp | 17 ++++++++--------- 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/imports/NeoChat/Component/ChatTextInput.qml b/imports/NeoChat/Component/ChatTextInput.qml index 23c6520a1..29249dc3c 100644 --- a/imports/NeoChat/Component/ChatTextInput.qml +++ b/imports/NeoChat/Component/ChatTextInput.qml @@ -469,9 +469,14 @@ ToolBar { autoCompleteEndPosition = cursorPosition } + // store each user we autoComplete here, this will be helpful later to generate + // the matrix.to links. + // This use an hack to define: https://doc.qt.io/qt-5/qml-var.html#property-value-initialization-semantics + property var userAutocompleted: ({}) + function postMessage() { roomManager.actionsHandler.postMessage(inputField.text.trim(), attachmentPath, - replyEventID, editEventId); + replyEventID, editEventId, inputField.userAutocompleted); clearAttachment(); currentRoom.markAllMessagesAsRead(); clear(); @@ -482,6 +487,10 @@ ToolBar { function autoComplete() { documentHandler.replaceAutoComplete(autoCompleteListView.currentItem.displayText) + // Unfortunally it doesn't + if (!autoCompleteListView.currentItem.isEmoji) { + inputField.userAutocompleted[autoCompleteListView.currentItem.displayText] = autoCompleteListView.currentItem.userId; + } } } } @@ -574,6 +583,7 @@ ToolBar { function clear() { inputField.clear() + inputField.userAutocompleted = {}; } function clearEditReply() { diff --git a/src/actionshandler.cpp b/src/actionshandler.cpp index 35fd314e1..6bf18ec24 100644 --- a/src/actionshandler.cpp +++ b/src/actionshandler.cpp @@ -159,15 +159,16 @@ void ActionsHandler::createRoom(const QString &name, const QString &topic) } void ActionsHandler::postMessage(const QString &text, - const QString &attachementPath, const QString &replyEventId, const QString &editEventId) + const QString &attachementPath, const QString &replyEventId, const QString &editEventId, + const QVariantMap usernames) { QString rawText = text; QString cleanedText = text; - for (const auto *user : m_room->users()) { - const auto displayName = user->displayname(m_room); - cleanedText = cleanedText.replace(displayName, - "[" + displayName + "](https://matrix.to/#/" + user->id() + ")"); + for (const auto username : usernames.keys()) { + const auto replacement = usernames.value(username); + cleanedText = cleanedText.replace(username, + "[" + username + "](https://matrix.to/#/" + replacement.toString() + ")"); } if (attachementPath.length() > 0) { @@ -270,6 +271,9 @@ void ActionsHandler::postMessage(const QString &text, if (rawText.indexOf(partPrefix) == 0) { rawText = rawText.remove(0, partPrefix.length()); const QStringList splittedText = rawText.split(" "); + qDebug() << m_room; + qDebug() << "m_room"; + qDebug() << splittedText; if (splittedText.count() == 0 || splittedText[0].isEmpty()) { // leave current room m_connection->leaveRoom(m_room); diff --git a/src/actionshandler.h b/src/actionshandler.h index caf80f695..9df180920 100644 --- a/src/actionshandler.h +++ b/src/actionshandler.h @@ -70,7 +70,8 @@ public Q_SLOTS: /// /// This also interprets commands if any. void postMessage(const QString &text, const QString &attachementPath, - const QString &replyEventId, const QString &editEventId); + const QString &replyEventId, const QString &editEventId, + const QVariantMap usernames); private: Connection *m_connection = nullptr; diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp index d720a5973..00f0756ee 100644 --- a/src/neochatroom.cpp +++ b/src/neochatroom.cpp @@ -99,6 +99,7 @@ void NeoChatRoom::uploadFile(const QUrl &url, const QString &body) }); connect(this, &Room::fileTransferProgress, [=](const QString &id, qint64 progress, qint64 total) { if (id == txnId) { + qDebug() << "Progress:" << progress << total; setFileUploadingProgress(int(float(progress) / float(total) * 100)); } }); @@ -535,7 +536,9 @@ void NeoChatRoom::postMessage(const QString &text, MessageEventType type, const void NeoChatRoom::postHtmlMessage(const QString &text, const QString &html, MessageEventType type, const QString &replyEventId, const QString &relateToEventId) { - bool isRichText = Qt::mightBeRichText(html); + QString htmlWithLinks = html; + htmlWithLinks = htmlWithLinks.replace(QRegularExpression("@([^: ]*):([^ ]*\\.[^ ]*)"), "@$1:$2"); + bool isRichText = Qt::mightBeRichText(htmlWithLinks); bool isReply = !replyEventId.isEmpty(); bool isEdit = !relateToEventId.isEmpty(); const auto replyIt = findInTimeline(replyEventId); @@ -548,15 +551,11 @@ void NeoChatRoom::postHtmlMessage(const QString &text, const QString &html, Mess QJsonObject json { {"type", "m.room.message"}, {"msgtype", msgTypeToString(type)}, - {"body", "* " + text}, - {"format", "org.matrix.custom.html"}, - {"formatted_body", html}, + {"body", "* " + (isRichText ? text : htmlWithLinks)}, {"m.new_content", QJsonObject { - {"body", text}, - {"msgtype", msgTypeToString(type)}, - {"format", "org.matrix.custom.html"}, - {"formatted_body", html} + {"body", (isRichText ? text : htmlWithLinks)}, + {"msgtype", msgTypeToString(type)} } }, {"m.relates_to", @@ -595,7 +594,7 @@ void NeoChatRoom::postHtmlMessage(const QString &text, const QString &html, Mess "\">In reply to " + replyEvt.senderId() + "
" + eventToString(replyEvt, Qt::RichText) + - "" + (isRichText ? html : text) + "" + (isRichText ? htmlWithLinks : text) } }; // clang-format on