Better rich reply.

square-messages
Black Hat 2018-11-27 18:14:48 +08:00
parent cc5ba20375
commit e7b2698521
6 changed files with 42 additions and 34 deletions

View File

@ -99,18 +99,32 @@ ColumnLayout {
visible: replyEventId || ""
background: MouseArea {
onClicked: goToEvent(replyEventId)
padding: 8
background: Item {
Rectangle {
anchors.leftMargin: 0
width: 2
height: parent.height
color: "white"
}
MouseArea {
anchors.fill: parent
onClicked: goToEvent(replyEventId)
}
}
contentItem: RowLayout {
spacing: 4
spacing: 8
Rectangle {
Layout.preferredWidth: 2
Layout.fillHeight: true
ImageItem {
Layout.preferredWidth: 36
Layout.preferredHeight: 36
Layout.alignment: Qt.AlignTop
color: "white"
source: replyAuthor ? replyAuthor.paintable : null
}
ColumnLayout {
@ -118,38 +132,21 @@ ColumnLayout {
spacing: 0
Control {
padding: 4
Label {
Layout.fillWidth: true
contentItem: RowLayout {
spacing: 4
color: "white"
text: replyAuthor ? replyAuthor.displayName : ""
ImageItem {
Layout.preferredWidth: 16
Layout.preferredHeight: 16
source: replyAuthor ? replyAuthor.paintable : null
}
Label {
color: "white"
text: replyAuthor ? replyAuthor.displayName : ""
}
}
background: Rectangle {
color: "black"
opacity: 0.2
radius: height / 2
}
font.pixelSize: 13
font.weight: Font.Medium
}
Label {
Layout.fillWidth: true
text: "<style>a{color: white;} .user-pill{}</style>" + (replyDisplay ? replyDisplay.replace(/<mx-reply>.*<\/mx-reply>/g, "") : "")
color: "white"
text: replyDisplay || ""
wrapMode: Label.Wrap
textFormat: Label.RichText

View File

@ -10,6 +10,8 @@
#include "csapi/joining.h"
#include "csapi/logout.h"
#include "utils.h"
#include <QClipboard>
#include <QFile>
#include <QFileInfo>
@ -242,3 +244,7 @@ int Controller::dpi() {
void Controller::setDpi(int dpi) {
SettingsGroup("Interface").setValue("dpi", dpi);
}
QString Controller::removeReply(const QString& text) {
return utils::removeReply(text);
}

View File

@ -76,6 +76,8 @@ class Controller : public QObject {
void loadSettings();
void saveSettings() const;
Q_INVOKABLE QString removeReply(const QString& text);
private slots:
void invokeLogin();

View File

@ -261,7 +261,7 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const {
const auto &evt = isPending ? **pendingIt : **timelineIt;
if (role == Qt::DisplayRole) {
return utils::eventToString(evt, m_currentRoom, Qt::RichText);
return utils::removeReply(utils::eventToString(evt, m_currentRoom, Qt::RichText));
}
if (role == MessageRole) {
@ -389,7 +389,7 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const {
case ReplyEventIdRole:
return replyEventId;
case ReplyDisplayRole:
return utils::eventToString(replyEvt, m_currentRoom, Qt::RichText);
return utils::removeReply(utils::eventToString(replyEvt, m_currentRoom, Qt::RichText));
case ReplyAuthorRole:
return QVariant::fromValue(
m_currentRoom->user(replyEvt.senderId()));

View File

@ -2,5 +2,7 @@
QString utils::removeReply(const QString& text) {
QString result(text);
return result.remove(utils::removeReplyRegex);
result.remove(utils::removeRichReplyRegex);
result.remove(utils::removeReplyRegex);
return result;
}

View File

@ -15,6 +15,7 @@
namespace utils {
const QRegExp removeReplyRegex{"> <.*>.*\\n\\n"};
const QRegExp removeRichReplyRegex{"<mx-reply>.*</mx-reply>"};
QString removeReply(const QString& text);