Show topic and name changes in timeline

remotes/origin/0.7.0-dev
Nicolas Werner 5 years ago
parent dee49508de
commit e98a61fea6
  1. 12
      resources/qml/delegates/MessageDelegate.qml
  2. 3
      resources/qml/delegates/NoticeMessage.qml
  3. 32
      src/timeline/TimelineModel.cpp
  4. 2
      src/timeline/TimelineModel.h

@ -49,6 +49,18 @@ DelegateChooser {
text: qsTr("Encryption enabled")
}
}
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 {}
}

@ -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

@ -59,6 +59,30 @@ eventMsgType(const mtx::events::RoomEvent<T> &e) -> decltype(e.content.msgtype)
return 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> &)
@ -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();
}

@ -141,6 +141,8 @@ public:
State,
IsEncrypted,
ReplyTo,
RoomName,
RoomTopic,
};
QHash<int, QByteArray> roleNames() const override;

Loading…
Cancel
Save