diff --git a/src/timeline2/TimelineModel.cpp b/src/timeline2/TimelineModel.cpp
index f544c83c..46a33add 100644
--- a/src/timeline2/TimelineModel.cpp
+++ b/src/timeline2/TimelineModel.cpp
@@ -5,6 +5,7 @@
#include <QRegularExpression>
+#include "ChatPage.h"
#include "Logging.h"
#include "Olm.h"
#include "Utils.h"
@@ -38,6 +39,33 @@ eventTimestamp(const T &event)
}
template<class T>
+std::string
+eventMsgType(const mtx::events::Event<T> &)
+{
+ return "";
+}
+template<class T>
+auto
+eventMsgType(const mtx::events::RoomEvent<T> &e) -> decltype(e.content.msgtype)
+{
+ return e.content.msgtype;
+}
+
+template<class T>
+QString
+eventBody(const mtx::events::Event<T> &)
+{
+ return QString("");
+}
+template<class T>
+auto
+eventBody(const mtx::events::RoomEvent<T> &e)
+ -> std::enable_if_t<std::is_same<decltype(e.content.body), std::string>::value, QString>
+{
+ return QString::fromStdString(e.content.body);
+}
+
+template<class T>
QString
eventFormattedBody(const mtx::events::Event<T> &)
{
@@ -293,6 +321,9 @@ TimelineModel::data(const QModelIndex &index, int role) const
return QVariant(boost::apply_visitor(
[](const auto &e) -> qml_mtx_events::EventType { return toRoomEventType(e); },
event));
+ case Body:
+ return QVariant(utils::replaceEmoji(boost::apply_visitor(
+ [](const auto &e) -> QString { return eventBody(e); }, event)));
case FormattedBody:
return QVariant(utils::replaceEmoji(boost::apply_visitor(
[](const auto &e) -> QString { return eventFormattedBody(e); }, event)));
@@ -571,3 +602,26 @@ TimelineModel::decryptEvent(const mtx::events::EncryptedEvent<mtx::events::msg::
.toStdString();
return {dummy, false};
}
+
+void
+TimelineModel::replyAction(QString id)
+{
+ auto event = events.value(id);
+ RelatedInfo related = boost::apply_visitor(
+ [](const auto &ev) -> RelatedInfo {
+ RelatedInfo related_ = {};
+ related_.quoted_user = QString::fromStdString(ev.sender);
+ related_.related_event = ev.event_id;
+ return related_;
+ },
+ event);
+ related.type = mtx::events::getMessageType(boost::apply_visitor(
+ [](const auto &e) -> std::string { return eventMsgType(e); }, event));
+ related.quoted_body =
+ boost::apply_visitor([](const auto &e) -> QString { return eventBody(e); }, event);
+
+ if (related.quoted_body.isEmpty())
+ return;
+
+ emit ChatPage::instance()->messageReply(related);
+}
|