diff --git a/imports/Spectral/Component/Timeline/MessageDelegate.qml b/imports/Spectral/Component/Timeline/MessageDelegate.qml
index 514ce67..263d334 100644
--- a/imports/Spectral/Component/Timeline/MessageDelegate.qml
+++ b/imports/Spectral/Component/Timeline/MessageDelegate.qml
@@ -160,7 +160,7 @@ ColumnLayout {
id: contentLabel
- text: "" + (replyEventId ? display.replace(/.*<\/mx-reply>/g, "") : display)
+ text: "" + display
color: "white"
diff --git a/imports/Spectral/Panel/RoomListPanel.qml b/imports/Spectral/Panel/RoomListPanel.qml
index 1d5b867..a022131 100644
--- a/imports/Spectral/Panel/RoomListPanel.qml
+++ b/imports/Spectral/Panel/RoomListPanel.qml
@@ -854,11 +854,30 @@ Rectangle {
title: "Action Required"
modal: true
- standardButtons: Dialog.Ok | Dialog.Cancel
contentItem: Label { text: "Accept this invitation?" }
- onAccepted: currentRoom.acceptInvitation()
- onRejected: currentRoom.forget()
+ footer: DialogButtonBox {
+ Button {
+ text: "Accept"
+ flat: true
+
+ onClicked: currentRoom.acceptInvitation()
+ }
+
+ Button {
+ text: "Reject"
+ flat: true
+
+ onClicked: currentRoom.forget()
+ }
+
+ Button {
+ text: "Reject"
+ flat: true
+
+ onClicked: inviteDialog.close()
+ }
+ }
}
}
diff --git a/imports/Spectral/Panel/RoomPanel.qml b/imports/Spectral/Panel/RoomPanel.qml
index 44e0679..d59e8b6 100644
--- a/imports/Spectral/Panel/RoomPanel.qml
+++ b/imports/Spectral/Panel/RoomPanel.qml
@@ -115,8 +115,6 @@ Item {
currentRoom.getPreviousContent(20);
}
- onMovementEnded: currentRoom.saveViewport(sortedMessageEventModel.mapToSource(indexAt(contentX, contentY)), sortedMessageEventModel.mapToSource(largestVisibleIndex))
-
displaced: Transition {
NumberAnimation {
property: "y"; duration: 200
@@ -126,6 +124,7 @@ Item {
delegate: ColumnLayout {
width: parent.width
+ implicitHeight: 32
id: delegateColumn
@@ -330,13 +329,14 @@ Item {
function goToEvent(eventID) {
var index = messageEventModel.eventIDToIndex(eventID)
if (index === -1) return
- messageListView.currentIndex = -1
- messageListView.currentIndex = sortedMessageEventModel.mapFromSource(index)
+// messageListView.currentIndex = sortedMessageEventModel.mapFromSource(index)
+ messageListView.positionViewAtIndex(sortedMessageEventModel.mapFromSource(index), ListView.Contain)
}
function saveReadMarker(room) {
var readMarker = sortedMessageEventModel.get(messageListView.largestVisibleIndex).eventId
if (!readMarker) return
room.readMarkerEventId = readMarker
+ currentRoom.saveViewport(sortedMessageEventModel.mapToSource(messageListView.indexAt(messageListView.contentX, messageListView.contentY)), sortedMessageEventModel.mapToSource(messageListView.largestVisibleIndex))
}
}
diff --git a/src/messageeventmodel.cpp b/src/messageeventmodel.cpp
index a41eafc..6ec1730 100644
--- a/src/messageeventmodel.cpp
+++ b/src/messageeventmodel.cpp
@@ -9,7 +9,6 @@
#include
#include
-#include
#include
#include // for qmlRegisterType()
@@ -265,9 +264,7 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const {
}
if (role == MessageRole) {
- static const QRegExp rmReplyRegExp("^> <@.*:.*> .*\n\n(.*)");
- return utils::eventToString(evt, m_currentRoom)
- .replace(rmReplyRegExp, "\\1");
+ return utils::removeReply(utils::eventToString(evt, m_currentRoom));
}
if (role == Qt::ToolTipRole) {
diff --git a/src/utils.cpp b/src/utils.cpp
index 3b87e44..3154dd3 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -6,3 +6,10 @@ QString utils::removeReply(const QString& text) {
result.remove(utils::removeReplyRegex);
return result;
}
+
+QString utils::cleanHTML(const QString& text, QMatrixClient::Room* room) {
+ QString result(text);
+ result.replace(codePillRegExp, "\\1");
+ result.replace(userPillRegExp, "\\1");
+ return result;
+}
diff --git a/src/utils.h b/src/utils.h
index f754760..cce426d 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -5,7 +5,7 @@
#include "user.h"
#include
-#include
+#include
#include
#include
@@ -14,10 +14,18 @@
#include
namespace utils {
-const QRegExp removeReplyRegex{"> <.*>.*\\n\\n"};
-const QRegExp removeRichReplyRegex{".*"};
+static const QRegularExpression removeReplyRegex{
+ "> <.*?>.*?\\n\\n", QRegularExpression::DotMatchesEverythingOption};
+static const QRegularExpression removeRichReplyRegex{
+ ".*?", QRegularExpression::DotMatchesEverythingOption};
+static const QRegularExpression codePillRegExp{
+ "(.*?)
", QRegularExpression::DotMatchesEverythingOption};
+static const QRegularExpression userPillRegExp{
+ "(.*?)",
+ QRegularExpression::DotMatchesEverythingOption};
QString removeReply(const QString& text);
+QString cleanHTML(const QString& text, QMatrixClient::Room* room);
template
QString eventToString(const BaseEventT& evt,
@@ -33,22 +41,8 @@ QString eventToString(const BaseEventT& evt,
if (prettyPrint && e.hasTextContent() &&
e.mimeType().name() != "text/plain") {
- static const QRegExp userPillRegExp(
- ".*");
- QString formattedStr(
- static_cast(e.content())->body);
- int pos = 0;
- while ((pos = userPillRegExp.indexIn(formattedStr, pos)) != -1) {
- QString userId = userPillRegExp.cap(1);
- formattedStr.remove(pos, userPillRegExp.matchedLength());
- formattedStr.insert(pos, "" +
- room->user(userId)->displayname() +
- "");
- pos += userPillRegExp.matchedLength();
- }
- static const QRegExp codePillRegExp("(.*)
");
- formattedStr.replace(codePillRegExp, "\\1");
- return formattedStr;
+ return cleanHTML(static_cast(e.content())->body,
+ room);
}
if (e.hasFileContent()) {
auto fileCaption = e.content()->fileInfo()->originalName;