summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2019-12-10 14:46:52 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2019-12-10 14:46:52 +0100
commite98a61fea60cf3b95441ce3d9591ced0cf93f566 (patch)
treef9331c31efcde5089e2a3f6fd825fa28abac159b
parentSimplify scroll logic (diff)
downloadnheko-e98a61fea60cf3b95441ce3d9591ced0cf93f566.tar.xz
Show topic and name changes in timeline
-rw-r--r--resources/qml/delegates/MessageDelegate.qml12
-rw-r--r--resources/qml/delegates/NoticeMessage.qml3
-rw-r--r--src/timeline/TimelineModel.cpp32
-rw-r--r--src/timeline/TimelineModel.h2
4 files changed, 48 insertions, 1 deletions
diff --git a/resources/qml/delegates/MessageDelegate.qml b/resources/qml/delegates/MessageDelegate.qml

index 178dfd86..20ec71e5 100644 --- a/resources/qml/delegates/MessageDelegate.qml +++ b/resources/qml/delegates/MessageDelegate.qml
@@ -50,6 +50,18 @@ DelegateChooser { } } DelegateChoice { + roleValue: MtxEvent.Name + NoticeMessage { + notice: model.roomName ? qsTr("room name changed to: %1").arg(model.roomName) : qsTr("removed room name") + } + } + DelegateChoice { + roleValue: MtxEvent.Topic + NoticeMessage { + notice: model.roomTopic ? qsTr("topic changed to: %1").arg(model.roomTopic) : qsTr("removed topic") + } + } + DelegateChoice { Placeholder {} } } diff --git a/resources/qml/delegates/NoticeMessage.qml b/resources/qml/delegates/NoticeMessage.qml
index a392eb5b..f7467eca 100644 --- a/resources/qml/delegates/NoticeMessage.qml +++ b/resources/qml/delegates/NoticeMessage.qml
@@ -1,7 +1,8 @@ import ".." MatrixText { - text: model.formattedBody + property string notice: model.formattedBody.replace("<pre>", "<pre style='white-space: pre-wrap'>") + text: notice width: parent ? parent.width : undefined font.italic: true color: inactiveColors.text diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index e3d87ae6..9da8a194 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp
@@ -61,6 +61,30 @@ eventMsgType(const mtx::events::RoomEvent<T> &e) -> decltype(e.content.msgtype) template<class T> QString +eventRoomName(const T &) +{ + return ""; +} +QString +eventRoomName(const mtx::events::StateEvent<mtx::events::state::Name> &e) +{ + return QString::fromStdString(e.content.name); +} + +template<class T> +QString +eventRoomTopic(const T &) +{ + return ""; +} +QString +eventRoomTopic(const mtx::events::StateEvent<mtx::events::state::Topic> &e) +{ + return QString::fromStdString(e.content.topic); +} + +template<class T> +QString eventBody(const mtx::events::Event<T> &) { return QString(""); @@ -437,6 +461,8 @@ TimelineModel::roleNames() const {State, "state"}, {IsEncrypted, "isEncrypted"}, {ReplyTo, "replyTo"}, + {RoomName, "roomName"}, + {RoomTopic, "roomTopic"}, }; } int @@ -563,6 +589,12 @@ TimelineModel::data(const QModelIndex &index, int role) const [](const auto &e) -> QString { return eventRelatesTo(e); }, event); return QVariant(evId); } + case RoomName: + return QVariant(boost::apply_visitor( + [](const auto &e) -> QString { return eventRoomName(e); }, event)); + case RoomTopic: + return QVariant(boost::apply_visitor( + [](const auto &e) -> QString { return eventRoomTopic(e); }, event)); default: return QVariant(); } diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 06c64acf..05e05962 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h
@@ -141,6 +141,8 @@ public: State, IsEncrypted, ReplyTo, + RoomName, + RoomTopic, }; QHash<int, QByteArray> roleNames() const override;