summary refs log tree commit diff
path: root/src/timeline
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-12-04 18:41:19 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-12-04 18:41:19 +0200
commita605e4486f4b9d90d668d6d1844ba5f0d58bbc26 (patch)
treec82001904cb120d975361edb38a62b5b77fa0644 /src/timeline
parentRun tests only with gcc (diff)
downloadnheko-a605e4486f4b9d90d668d6d1844ba5f0d58bbc26.tar.xz
Migrate to matrix-structs for event and response parsing
Diffstat (limited to 'src/timeline')
-rw-r--r--src/timeline/TimelineItem.cc79
-rw-r--r--src/timeline/TimelineView.cc198
-rw-r--r--src/timeline/TimelineViewManager.cc29
-rw-r--r--src/timeline/widgets/AudioItem.cc15
-rw-r--r--src/timeline/widgets/FileItem.cc15
-rw-r--r--src/timeline/widgets/ImageItem.cc13
-rw-r--r--src/timeline/widgets/VideoItem.cc11
7 files changed, 201 insertions, 159 deletions
diff --git a/src/timeline/TimelineItem.cc b/src/timeline/TimelineItem.cc

index 1cbe4b0a..39b345b5 100644 --- a/src/timeline/TimelineItem.cc +++ b/src/timeline/TimelineItem.cc
@@ -21,7 +21,6 @@ #include "Avatar.h" #include "Config.h" -#include "Sync.h" #include "timeline/TimelineItem.h" #include "timeline/widgets/AudioItem.h" @@ -32,9 +31,6 @@ static const QRegExp URL_REGEX("((?:https?|ftp)://\\S+)"); static const QString URL_HTML = "<a href=\"\\1\">\\1</a>"; -namespace events = matrix::events; -namespace msgs = matrix::events::messages; - void TimelineItem::init() { @@ -71,7 +67,7 @@ TimelineItem::init() /* * For messages created locally. */ -TimelineItem::TimelineItem(events::MessageEventType ty, +TimelineItem::TimelineItem(mtx::events::MessageType ty, const QString &userid, QString body, bool withSender, @@ -83,7 +79,7 @@ TimelineItem::TimelineItem(events::MessageEventType ty, auto displayName = TimelineViewManager::displayName(userid); auto timestamp = QDateTime::currentDateTime(); - if (ty == events::MessageEventType::Emote) { + if (ty == mtx::events::MessageType::Emote) { body = QString("* %1 %2").arg(displayName).arg(body); descriptionMsg_ = {"", userid, body, descriptiveTime(timestamp)}; } else { @@ -152,64 +148,65 @@ TimelineItem::TimelineItem(VideoItem *video, } TimelineItem::TimelineItem(ImageItem *image, - const events::MessageEvent<msgs::Image> &event, + const mtx::events::RoomEvent<mtx::events::msg::Image> &event, bool with_sender, QWidget *parent) : QWidget(parent) { - setupWidgetLayout<events::MessageEvent<msgs::Image>, ImageItem>( + setupWidgetLayout<mtx::events::RoomEvent<mtx::events::msg::Image>, ImageItem>( image, event, " sent an image", with_sender); } TimelineItem::TimelineItem(FileItem *file, - const events::MessageEvent<msgs::File> &event, + const mtx::events::RoomEvent<mtx::events::msg::File> &event, bool with_sender, QWidget *parent) : QWidget(parent) { - setupWidgetLayout<events::MessageEvent<msgs::File>, FileItem>( + setupWidgetLayout<mtx::events::RoomEvent<mtx::events::msg::File>, FileItem>( file, event, " sent a file", with_sender); } TimelineItem::TimelineItem(AudioItem *audio, - const events::MessageEvent<msgs::Audio> &event, + const mtx::events::RoomEvent<mtx::events::msg::Audio> &event, bool with_sender, QWidget *parent) : QWidget(parent) { - setupWidgetLayout<events::MessageEvent<msgs::Audio>, AudioItem>( + setupWidgetLayout<mtx::events::RoomEvent<mtx::events::msg::Audio>, AudioItem>( audio, event, " sent an audio clip", with_sender); } TimelineItem::TimelineItem(VideoItem *video, - const events::MessageEvent<msgs::Video> &event, + const mtx::events::RoomEvent<mtx::events::msg::Video> &event, bool with_sender, QWidget *parent) : QWidget(parent) { - setupWidgetLayout<events::MessageEvent<msgs::Video>, VideoItem>( + setupWidgetLayout<mtx::events::RoomEvent<mtx::events::msg::Video>, VideoItem>( video, event, " sent a video clip", with_sender); } /* * Used to display remote notice messages. */ -TimelineItem::TimelineItem(const events::MessageEvent<msgs::Notice> &event, +TimelineItem::TimelineItem(const mtx::events::RoomEvent<mtx::events::msg::Notice> &event, bool with_sender, QWidget *parent) : QWidget(parent) { init(); - event_id_ = event.eventId(); + event_id_ = QString::fromStdString(event.event_id); + const auto sender = QString::fromStdString(event.sender); - descriptionMsg_ = {TimelineViewManager::displayName(event.sender()), - event.sender(), + descriptionMsg_ = {TimelineViewManager::displayName(sender), + sender, " sent a notification", - descriptiveTime(QDateTime::fromMSecsSinceEpoch(event.timestamp()))}; + descriptiveTime(QDateTime::fromMSecsSinceEpoch(event.origin_server_ts))}; - auto body = event.content().body().trimmed().toHtmlEscaped(); - auto timestamp = QDateTime::fromMSecsSinceEpoch(event.timestamp()); + auto body = QString::fromStdString(event.content.body).trimmed().toHtmlEscaped(); + auto timestamp = QDateTime::fromMSecsSinceEpoch(event.origin_server_ts); generateTimestamp(timestamp); @@ -218,14 +215,14 @@ TimelineItem::TimelineItem(const events::MessageEvent<msgs::Notice> &event, body = "<i>" + body + "</i>"; if (with_sender) { - auto displayName = TimelineViewManager::displayName(event.sender()); + auto displayName = TimelineViewManager::displayName(sender); generateBody(displayName, body); setupAvatarLayout(displayName); mainLayout_->addLayout(headerLayout_); - AvatarProvider::resolve(event.sender(), this); + AvatarProvider::resolve(sender, this); } else { generateBody(body); setupSimpleLayout(); @@ -237,24 +234,25 @@ TimelineItem::TimelineItem(const events::MessageEvent<msgs::Notice> &event, /* * Used to display remote emote messages. */ -TimelineItem::TimelineItem(const events::MessageEvent<msgs::Emote> &event, +TimelineItem::TimelineItem(const mtx::events::RoomEvent<mtx::events::msg::Emote> &event, bool with_sender, QWidget *parent) : QWidget(parent) { init(); - event_id_ = event.eventId(); + event_id_ = QString::fromStdString(event.event_id); + const auto sender = QString::fromStdString(event.sender); - auto body = event.content().body().trimmed(); - auto timestamp = QDateTime::fromMSecsSinceEpoch(event.timestamp()); - auto displayName = TimelineViewManager::displayName(event.sender()); + auto body = QString::fromStdString(event.content.body).trimmed(); + auto timestamp = QDateTime::fromMSecsSinceEpoch(event.origin_server_ts); + auto displayName = TimelineViewManager::displayName(sender); auto emoteMsg = QString("* %1 %2").arg(displayName).arg(body); descriptionMsg_ = {"", - event.sender(), + sender, emoteMsg, - descriptiveTime(QDateTime::fromMSecsSinceEpoch(event.timestamp()))}; + descriptiveTime(QDateTime::fromMSecsSinceEpoch(event.origin_server_ts))}; generateTimestamp(timestamp); emoteMsg = emoteMsg.toHtmlEscaped(); @@ -266,7 +264,7 @@ TimelineItem::TimelineItem(const events::MessageEvent<msgs::Emote> &event, setupAvatarLayout(displayName); mainLayout_->addLayout(headerLayout_); - AvatarProvider::resolve(event.sender(), this); + AvatarProvider::resolve(sender, this); } else { generateBody(emoteMsg); setupSimpleLayout(); @@ -278,24 +276,25 @@ TimelineItem::TimelineItem(const events::MessageEvent<msgs::Emote> &event, /* * Used to display remote text messages. */ -TimelineItem::TimelineItem(const events::MessageEvent<msgs::Text> &event, +TimelineItem::TimelineItem(const mtx::events::RoomEvent<mtx::events::msg::Text> &event, bool with_sender, QWidget *parent) : QWidget(parent) { init(); - event_id_ = event.eventId(); + event_id_ = QString::fromStdString(event.event_id); + const auto sender = QString::fromStdString(event.sender); - auto body = event.content().body().trimmed(); - auto timestamp = QDateTime::fromMSecsSinceEpoch(event.timestamp()); - auto displayName = TimelineViewManager::displayName(event.sender()); + auto body = QString::fromStdString(event.content.body).trimmed(); + auto timestamp = QDateTime::fromMSecsSinceEpoch(event.origin_server_ts); + auto displayName = TimelineViewManager::displayName(sender); QSettings settings; - descriptionMsg_ = {event.sender() == settings.value("auth/user_id") ? "You" : displayName, - event.sender(), + descriptionMsg_ = {sender == settings.value("auth/user_id") ? "You" : displayName, + sender, QString(": %1").arg(body), - descriptiveTime(QDateTime::fromMSecsSinceEpoch(event.timestamp()))}; + descriptiveTime(QDateTime::fromMSecsSinceEpoch(event.origin_server_ts))}; generateTimestamp(timestamp); @@ -309,7 +308,7 @@ TimelineItem::TimelineItem(const events::MessageEvent<msgs::Text> &event, mainLayout_->addLayout(headerLayout_); - AvatarProvider::resolve(event.sender(), this); + AvatarProvider::resolve(sender, this); } else { generateBody(body); setupSimpleLayout(); diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc
index 6b7928db..8e9f5f7c 100644 --- a/src/timeline/TimelineView.cc +++ b/src/timeline/TimelineView.cc
@@ -22,7 +22,6 @@ #include "FloatingButton.h" #include "RoomMessages.h" #include "ScrollBar.h" -#include "Sync.h" #include "timeline/TimelineView.h" #include "timeline/widgets/AudioItem.h" @@ -30,23 +29,7 @@ #include "timeline/widgets/ImageItem.h" #include "timeline/widgets/VideoItem.h" -namespace events = matrix::events; -namespace msgs = matrix::events::messages; - -static bool -isRedactedEvent(const QJsonObject &event) -{ - if (event.contains("redacted_because")) - return true; - - if (event.contains("unsigned") && - event.value("unsigned").toObject().contains("redacted_because")) - return true; - - return false; -} - -TimelineView::TimelineView(const Timeline &timeline, +TimelineView::TimelineView(const mtx::responses::Timeline &timeline, QSharedPointer<MatrixClient> client, const QString &room_id, QWidget *parent) @@ -167,12 +150,12 @@ TimelineView::sliderMoved(int position) } void -TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages &msgs) +TimelineView::addBackwardsEvents(const QString &room_id, const mtx::responses::Messages &msgs) { if (room_id_ != room_id) return; - if (msgs.chunk().count() == 0) { + if (msgs.chunk.size() == 0) { isTimelineFinished = true; return; } @@ -186,12 +169,11 @@ TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages &msg // Parse in reverse order to determine where we should not show sender's // name. - auto ii = msgs.chunk().size(); + auto ii = msgs.chunk.size(); while (ii != 0) { --ii; - TimelineItem *item = - parseMessageEvent(msgs.chunk().at(ii).toObject(), TimelineDirection::Top); + TimelineItem *item = parseMessageEvent(msgs.chunk[ii], TimelineDirection::Top); if (item != nullptr) items.push_back(item); @@ -210,11 +192,11 @@ TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages &msg QApplication::processEvents(); - prev_batch_token_ = msgs.end(); + prev_batch_token_ = QString::fromStdString(msgs.end); isPaginationInProgress_ = false; // Exclude the top stretch. - if (!msgs.chunk().isEmpty() && scroll_layout_->count() > 1) + if (msgs.chunk.size() != 0 && scroll_layout_->count() > 1) notifyForLastEvent(); // If this batch is the first being rendered (i.e the first and the last @@ -224,63 +206,59 @@ TimelineView::addBackwardsEvents(const QString &room_id, const RoomMessages &msg } TimelineItem * -TimelineView::parseMessageEvent(const QJsonObject &event, TimelineDirection direction) +TimelineView::parseMessageEvent(const mtx::events::collections::TimelineEvents &event, + TimelineDirection direction) { - events::EventType ty = events::extractEventType(event); - - if (ty == events::EventType::RoomMessage) { - events::MessageEventType msg_type = events::extractMessageEventType(event); - - using Audio = events::MessageEvent<msgs::Audio>; - using Emote = events::MessageEvent<msgs::Emote>; - using File = events::MessageEvent<msgs::File>; - using Image = events::MessageEvent<msgs::Image>; - using Notice = events::MessageEvent<msgs::Notice>; - using Text = events::MessageEvent<msgs::Text>; - using Video = events::MessageEvent<msgs::Video>; - - if (msg_type == events::MessageEventType::Audio) { - return processMessageEvent<Audio, AudioItem>(event, direction); - } else if (msg_type == events::MessageEventType::Emote) { - return processMessageEvent<Emote>(event, direction); - } else if (msg_type == events::MessageEventType::File) { - return processMessageEvent<File, FileItem>(event, direction); - } else if (msg_type == events::MessageEventType::Image) { - return processMessageEvent<Image, ImageItem>(event, direction); - } else if (msg_type == events::MessageEventType::Notice) { - return processMessageEvent<Notice>(event, direction); - } else if (msg_type == events::MessageEventType::Text) { - return processMessageEvent<Text>(event, direction); - } else if (msg_type == events::MessageEventType::Video) { - return processMessageEvent<Video, VideoItem>(event, direction); - } else if (msg_type == events::MessageEventType::Unknown) { - // TODO Handle redacted messages. - // Silenced for now. - if (!isRedactedEvent(event)) - qWarning() << "Unknown message type" << event; + namespace msg = mtx::events::msg; + using AudioEvent = mtx::events::RoomEvent<msg::Audio>; + using EmoteEvent = mtx::events::RoomEvent<msg::Emote>; + using FileEvent = mtx::events::RoomEvent<msg::File>; + using ImageEvent = mtx::events::RoomEvent<msg::Image>; + using NoticeEvent = mtx::events::RoomEvent<msg::Notice>; + using TextEvent = mtx::events::RoomEvent<msg::Text>; + using VideoEvent = mtx::events::RoomEvent<msg::Video>; - return nullptr; - } + if (mpark::holds_alternative<mtx::events::RoomEvent<msg::Audio>>(event)) { + auto audio = mpark::get<mtx::events::RoomEvent<msg::Audio>>(event); + return processMessageEvent<AudioEvent, AudioItem>(audio, direction); + } else if (mpark::holds_alternative<mtx::events::RoomEvent<msg::Emote>>(event)) { + auto emote = mpark::get<mtx::events::RoomEvent<msg::Emote>>(event); + return processMessageEvent<EmoteEvent>(emote, direction); + } else if (mpark::holds_alternative<mtx::events::RoomEvent<msg::File>>(event)) { + auto file = mpark::get<mtx::events::RoomEvent<msg::File>>(event); + return processMessageEvent<FileEvent, FileItem>(file, direction); + } else if (mpark::holds_alternative<mtx::events::RoomEvent<msg::Image>>(event)) { + auto image = mpark::get<mtx::events::RoomEvent<msg::Image>>(event); + return processMessageEvent<ImageEvent, ImageItem>(image, direction); + } else if (mpark::holds_alternative<mtx::events::RoomEvent<msg::Notice>>(event)) { + auto notice = mpark::get<mtx::events::RoomEvent<msg::Notice>>(event); + return processMessageEvent<NoticeEvent>(notice, direction); + } else if (mpark::holds_alternative<mtx::events::RoomEvent<msg::Text>>(event)) { + auto text = mpark::get<mtx::events::RoomEvent<msg::Text>>(event); + return processMessageEvent<TextEvent>(text, direction); + } else if (mpark::holds_alternative<mtx::events::RoomEvent<msg::Video>>(event)) { + auto video = mpark::get<mtx::events::RoomEvent<msg::Video>>(event); + return processMessageEvent<VideoEvent, VideoItem>(video, direction); } return nullptr; } int -TimelineView::addEvents(const Timeline &timeline) +TimelineView::addEvents(const mtx::responses::Timeline &timeline) { int message_count = 0; QSettings settings; QString localUser = settings.value("auth/user_id").toString(); - for (const auto &event : timeline.events()) { - TimelineItem *item = parseMessageEvent(event.toObject(), TimelineDirection::Bottom); + for (const auto &event : timeline.events) { + TimelineItem *item = parseMessageEvent(event, TimelineDirection::Bottom); if (item != nullptr) { addTimelineItem(item, TimelineDirection::Bottom); - if (localUser != event.toObject().value("sender").toString()) + if (localUser != getEventSender(event)) message_count += 1; } } @@ -290,15 +268,15 @@ TimelineView::addEvents(const Timeline &timeline) QApplication::processEvents(); if (isInitialSync) { - prev_batch_token_ = timeline.previousBatch(); + prev_batch_token_ = QString::fromStdString(timeline.prev_batch); isInitialSync = false; } // Exclude the top stretch. - if (!timeline.events().isEmpty() && scroll_layout_->count() > 1) + if (timeline.events.size() != 0 && scroll_layout_->count() > 1) notifyForLastEvent(); - if (isActiveWindow() && isVisible() && timeline.events().size() > 0) + if (isActiveWindow() && isVisible() && timeline.events.size() > 0) readLastEvent(); return message_count; @@ -403,7 +381,7 @@ TimelineView::updatePendingMessage(int txn_id, QString event_id) } void -TimelineView::addUserMessage(matrix::events::MessageEventType ty, const QString &body) +TimelineView::addUserMessage(mtx::events::MessageType ty, const QString &body) { QSettings settings; auto user_id = settings.value("auth/user_id").toString(); @@ -439,9 +417,9 @@ TimelineView::sendNextPendingMessage() PendingMessage &m = pending_msgs_.head(); switch (m.ty) { - case matrix::events::MessageEventType::Audio: - case matrix::events::MessageEventType::Image: - case matrix::events::MessageEventType::File: + case mtx::events::MessageType::Audio: + case mtx::events::MessageType::Image: + case mtx::events::MessageType::File: // FIXME: Improve the API client_->sendRoomMessage(m.ty, m.txn_id, @@ -573,3 +551,81 @@ TimelineView::event(QEvent *event) return QWidget::event(event); } + +QString +TimelineView::getEventSender(const mtx::events::collections::TimelineEvents &event) const +{ + using Aliases = mtx::events::StateEvent<mtx::events::state::Aliases>; + using Avatar = mtx::events::StateEvent<mtx::events::state::Avatar>; + using CanonicalAlias = mtx::events::StateEvent<mtx::events::state::CanonicalAlias>; + using Create = mtx::events::StateEvent<mtx::events::state::Create>; + using HistoryVisibility = mtx::events::StateEvent<mtx::events::state::HistoryVisibility>; + using JoinRules = mtx::events::StateEvent<mtx::events::state::JoinRules>; + using Member = mtx::events::StateEvent<mtx::events::state::Member>; + using Name = mtx::events::StateEvent<mtx::events::state::Name>; + using PowerLevels = mtx::events::StateEvent<mtx::events::state::PowerLevels>; + using Topic = mtx::events::StateEvent<mtx::events::state::Topic>; + + using Audio = mtx::events::RoomEvent<mtx::events::msg::Audio>; + using Emote = mtx::events::RoomEvent<mtx::events::msg::Emote>; + using File = mtx::events::RoomEvent<mtx::events::msg::File>; + using Image = mtx::events::RoomEvent<mtx::events::msg::Image>; + using Notice = mtx::events::RoomEvent<mtx::events::msg::Notice>; + using Text = mtx::events::RoomEvent<mtx::events::msg::Text>; + using Video = mtx::events::RoomEvent<mtx::events::msg::Video>; + + if (mpark::holds_alternative<Aliases>(event)) { + auto msg = mpark::get<Aliases>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Avatar>(event)) { + auto msg = mpark::get<Avatar>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<CanonicalAlias>(event)) { + auto msg = mpark::get<CanonicalAlias>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Create>(event)) { + auto msg = mpark::get<Create>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<HistoryVisibility>(event)) { + auto msg = mpark::get<HistoryVisibility>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<JoinRules>(event)) { + auto msg = mpark::get<JoinRules>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Name>(event)) { + auto msg = mpark::get<Name>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Member>(event)) { + auto msg = mpark::get<Member>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<PowerLevels>(event)) { + auto msg = mpark::get<PowerLevels>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Topic>(event)) { + auto msg = mpark::get<Topic>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Audio>(event)) { + auto msg = mpark::get<Audio>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Emote>(event)) { + auto msg = mpark::get<Emote>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<File>(event)) { + auto msg = mpark::get<File>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Image>(event)) { + auto msg = mpark::get<Image>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Notice>(event)) { + auto msg = mpark::get<Notice>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Text>(event)) { + auto msg = mpark::get<Text>(event); + return QString::fromStdString(msg.sender); + } else if (mpark::holds_alternative<Video>(event)) { + auto msg = mpark::get<Video>(event); + return QString::fromStdString(msg.sender); + } + + return QString(""); +} diff --git a/src/timeline/TimelineViewManager.cc b/src/timeline/TimelineViewManager.cc
index 281cafcd..de1e1e32 100644 --- a/src/timeline/TimelineViewManager.cc +++ b/src/timeline/TimelineViewManager.cc
@@ -23,7 +23,6 @@ #include <QSettings> #include "MatrixClient.h" -#include "Sync.h" #include "timeline/TimelineView.h" #include "timeline/TimelineViewManager.h" @@ -72,7 +71,7 @@ TimelineViewManager::queueTextMessage(const QString &msg) auto room_id = active_room_; auto view = views_[room_id]; - view->addUserMessage(matrix::events::MessageEventType::Text, msg); + view->addUserMessage(mtx::events::MessageType::Text, msg); } void @@ -81,7 +80,7 @@ TimelineViewManager::queueEmoteMessage(const QString &msg) auto room_id = active_room_; auto view = views_[room_id]; - view->addUserMessage(matrix::events::MessageEventType::Emote, msg); + view->addUserMessage(mtx::events::MessageType::Emote, msg); } void @@ -96,7 +95,7 @@ TimelineViewManager::queueImageMessage(const QString &roomid, auto view = views_[roomid]; - view->addUserMessage<ImageItem, matrix::events::MessageEventType::Image>(url, filename); + view->addUserMessage<ImageItem, mtx::events::MessageType::Image>(url, filename); } void @@ -111,7 +110,7 @@ TimelineViewManager::queueFileMessage(const QString &roomid, auto view = views_[roomid]; - view->addUserMessage<FileItem, matrix::events::MessageEventType::File>(url, filename); + view->addUserMessage<FileItem, mtx::events::MessageType::File>(url, filename); } void @@ -126,7 +125,7 @@ TimelineViewManager::queueAudioMessage(const QString &roomid, auto view = views_[roomid]; - view->addUserMessage<AudioItem, matrix::events::MessageEventType::Audio>(url, filename); + view->addUserMessage<AudioItem, mtx::events::MessageType::Audio>(url, filename); } void @@ -139,10 +138,10 @@ TimelineViewManager::clearAll() } void -TimelineViewManager::initialize(const Rooms &rooms) +TimelineViewManager::initialize(const mtx::responses::Rooms &rooms) { - for (auto it = rooms.join().constBegin(); it != rooms.join().constEnd(); ++it) { - addRoom(it.value(), it.key()); + for (auto it = rooms.join.cbegin(); it != rooms.join.cend(); ++it) { + addRoom(it->second, QString::fromStdString(it->first)); } } @@ -155,10 +154,10 @@ TimelineViewManager::initialize(const QList<QString> &rooms) } void -TimelineViewManager::addRoom(const JoinedRoom &room, const QString &room_id) +TimelineViewManager::addRoom(const mtx::responses::JoinedRoom &room, const QString &room_id) { // Create a history view with the room events. - TimelineView *view = new TimelineView(room.timeline(), client_, room_id); + TimelineView *view = new TimelineView(room.timeline, client_, room_id); views_.insert(room_id, QSharedPointer<TimelineView>(view)); connect(view, @@ -195,10 +194,10 @@ TimelineViewManager::addRoom(const QString &room_id) } void -TimelineViewManager::sync(const Rooms &rooms) +TimelineViewManager::sync(const mtx::responses::Rooms &rooms) { - for (auto it = rooms.join().constBegin(); it != rooms.join().constEnd(); ++it) { - auto roomid = it.key(); + for (auto it = rooms.join.cbegin(); it != rooms.join.cend(); ++it) { + auto roomid = QString::fromStdString(it->first); if (!views_.contains(roomid)) { qDebug() << "Ignoring event from unknown room" << roomid; @@ -207,7 +206,7 @@ TimelineViewManager::sync(const Rooms &rooms) auto view = views_.value(roomid); - int msgs_added = view->addEvents(it.value().timeline()); + int msgs_added = view->addEvents(it->second.timeline); if (msgs_added > 0) { // TODO: When the app window gets active the current diff --git a/src/timeline/widgets/AudioItem.cc b/src/timeline/widgets/AudioItem.cc
index 2a417b3e..5d9dd77b 100644 --- a/src/timeline/widgets/AudioItem.cc +++ b/src/timeline/widgets/AudioItem.cc
@@ -26,9 +26,6 @@ #include "timeline/widgets/AudioItem.h" -namespace events = matrix::events; -namespace msgs = matrix::events::messages; - constexpr int MaxWidth = 400; constexpr int Height = 70; constexpr int IconRadius = 22; @@ -77,15 +74,15 @@ AudioItem::init() } AudioItem::AudioItem(QSharedPointer<MatrixClient> client, - const events::MessageEvent<msgs::Audio> &event, + const mtx::events::RoomEvent<mtx::events::msg::Audio> &event, QWidget *parent) : QWidget(parent) - , url_{event.msgContent().url()} - , text_{event.content().body()} + , url_{QUrl(QString::fromStdString(event.content.url))} + , text_{QString::fromStdString(event.content.body)} , event_{event} , client_{client} { - readableFileSize_ = calculateFileSize(event.msgContent().info().size); + readableFileSize_ = calculateFileSize(event.content.info.size); init(); } @@ -151,14 +148,14 @@ AudioItem::mousePressEvent(QMouseEvent *event) if (filenameToSave_.isEmpty()) return; - client_->downloadFile(event_.eventId(), url_); + client_->downloadFile(QString::fromStdString(event_.event_id), url_); } } void AudioItem::fileDownloaded(const QString &event_id, const QByteArray &data) { - if (event_id != event_.eventId()) + if (event_id != QString::fromStdString(event_.event_id)) return; try { diff --git a/src/timeline/widgets/FileItem.cc b/src/timeline/widgets/FileItem.cc
index e4cc02b2..3c38dc31 100644 --- a/src/timeline/widgets/FileItem.cc +++ b/src/timeline/widgets/FileItem.cc
@@ -26,9 +26,6 @@ #include "timeline/widgets/FileItem.h" -namespace events = matrix::events; -namespace msgs = matrix::events::messages; - constexpr int MaxWidth = 400; constexpr int Height = 70; constexpr int IconRadius = 22; @@ -64,15 +61,15 @@ FileItem::init() } FileItem::FileItem(QSharedPointer<MatrixClient> client, - const events::MessageEvent<msgs::File> &event, + const mtx::events::RoomEvent<mtx::events::msg::File> &event, QWidget *parent) : QWidget(parent) - , url_{event.msgContent().url()} - , text_{event.content().body()} + , url_{QString::fromStdString(event.content.url)} + , text_{QString::fromStdString(event.content.body)} , event_{event} , client_{client} { - readableFileSize_ = calculateFileSize(event.msgContent().info().size); + readableFileSize_ = calculateFileSize(event.content.info.size); init(); } @@ -138,7 +135,7 @@ FileItem::mousePressEvent(QMouseEvent *event) if (filenameToSave_.isEmpty()) return; - client_->downloadFile(event_.eventId(), url_); + client_->downloadFile(QString::fromStdString(event_.event_id), url_); } else { openUrl(); } @@ -147,7 +144,7 @@ FileItem::mousePressEvent(QMouseEvent *event) void FileItem::fileDownloaded(const QString &event_id, const QByteArray &data) { - if (event_id != event_.eventId()) + if (event_id != QString::fromStdString(event_.event_id)) return; try { diff --git a/src/timeline/widgets/ImageItem.cc b/src/timeline/widgets/ImageItem.cc
index c8cf8e23..46a4518c 100644 --- a/src/timeline/widgets/ImageItem.cc +++ b/src/timeline/widgets/ImageItem.cc
@@ -25,11 +25,8 @@ #include "dialogs/ImageOverlay.h" #include "timeline/widgets/ImageItem.h" -namespace events = matrix::events; -namespace msgs = matrix::events::messages; - ImageItem::ImageItem(QSharedPointer<MatrixClient> client, - const events::MessageEvent<msgs::Image> &event, + const mtx::events::RoomEvent<mtx::events::msg::Image> &event, QWidget *parent) : QWidget(parent) , event_{event} @@ -39,8 +36,8 @@ ImageItem::ImageItem(QSharedPointer<MatrixClient> client, setCursor(Qt::PointingHandCursor); setAttribute(Qt::WA_Hover, true); - url_ = event.msgContent().url(); - text_ = event.content().body(); + url_ = QString::fromStdString(event.content.url); + text_ = QString::fromStdString(event.content.body); QList<QString> url_parts = url_.toString().split("mxc://"); @@ -53,7 +50,7 @@ ImageItem::ImageItem(QSharedPointer<MatrixClient> client, url_ = QString("%1/_matrix/media/r0/download/%2") .arg(client_.data()->getHomeServer().toString(), media_params); - client_.data()->downloadImage(event.eventId(), url_); + client_.data()->downloadImage(QString::fromStdString(event.event_id), url_); connect(client_.data(), SIGNAL(imageDownloaded(const QString &, const QPixmap &)), @@ -91,7 +88,7 @@ ImageItem::ImageItem(QSharedPointer<MatrixClient> client, void ImageItem::imageDownloaded(const QString &event_id, const QPixmap &img) { - if (event_id != event_.eventId()) + if (event_id != QString::fromStdString(event_.event_id)) return; setImage(img); diff --git a/src/timeline/widgets/VideoItem.cc b/src/timeline/widgets/VideoItem.cc
index 63cbc20c..1d67118a 100644 --- a/src/timeline/widgets/VideoItem.cc +++ b/src/timeline/widgets/VideoItem.cc
@@ -21,9 +21,6 @@ #include "timeline/widgets/VideoItem.h" -namespace events = matrix::events; -namespace msgs = matrix::events::messages; - void VideoItem::init() { @@ -39,15 +36,15 @@ VideoItem::init() } VideoItem::VideoItem(QSharedPointer<MatrixClient> client, - const events::MessageEvent<msgs::Video> &event, + const mtx::events::RoomEvent<mtx::events::msg::Video> &event, QWidget *parent) : QWidget(parent) - , url_{event.msgContent().url()} - , text_{event.content().body()} + , url_{QString::fromStdString(event.content.url)} + , text_{QString::fromStdString(event.content.body)} , event_{event} , client_{client} { - readableFileSize_ = calculateFileSize(event.msgContent().info().size); + readableFileSize_ = calculateFileSize(event.content.info.size); init();