From 62d0cd74da856028147ce222f3af9ad940b70a1b Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 11 Sep 2019 00:54:40 +0200 Subject: Implement replies in qml timeline --- src/timeline2/TimelineModel.cpp | 54 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'src/timeline2/TimelineModel.cpp') 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 +#include "ChatPage.h" #include "Logging.h" #include "Olm.h" #include "Utils.h" @@ -37,6 +38,33 @@ eventTimestamp(const T &event) return QDateTime::fromMSecsSinceEpoch(event.origin_server_ts); } +template +std::string +eventMsgType(const mtx::events::Event &) +{ + return ""; +} +template +auto +eventMsgType(const mtx::events::RoomEvent &e) -> decltype(e.content.msgtype) +{ + return e.content.msgtype; +} + +template +QString +eventBody(const mtx::events::Event &) +{ + return QString(""); +} +template +auto +eventBody(const mtx::events::RoomEvent &e) + -> std::enable_if_t::value, QString> +{ + return QString::fromStdString(e.content.body); +} + template QString eventFormattedBody(const mtx::events::Event &) @@ -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 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); +} -- cgit 1.5.1