Migrate to matrix-structs for event and response parsing
This commit is contained in:
parent
1976a3280c
commit
a605e4486f
77 changed files with 648 additions and 4962 deletions
|
|
@ -25,16 +25,7 @@
|
|||
#include <QStyle>
|
||||
#include <QStyleOption>
|
||||
|
||||
#include "Audio.h"
|
||||
#include "Emote.h"
|
||||
#include "File.h"
|
||||
#include "Image.h"
|
||||
#include "Notice.h"
|
||||
#include "Text.h"
|
||||
#include "Video.h"
|
||||
|
||||
#include "AvatarProvider.h"
|
||||
#include "MessageEvent.h"
|
||||
#include "RoomInfoListItem.h"
|
||||
#include "TimelineViewManager.h"
|
||||
|
||||
|
|
@ -44,26 +35,23 @@ class VideoItem;
|
|||
class FileItem;
|
||||
class Avatar;
|
||||
|
||||
namespace events = matrix::events;
|
||||
namespace msgs = matrix::events::messages;
|
||||
|
||||
class TimelineItem : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
TimelineItem(const events::MessageEvent<msgs::Notice> &e,
|
||||
TimelineItem(const mtx::events::RoomEvent<mtx::events::msg::Notice> &e,
|
||||
bool with_sender,
|
||||
QWidget *parent = 0);
|
||||
TimelineItem(const events::MessageEvent<msgs::Text> &e,
|
||||
TimelineItem(const mtx::events::RoomEvent<mtx::events::msg::Text> &e,
|
||||
bool with_sender,
|
||||
QWidget *parent = 0);
|
||||
TimelineItem(const events::MessageEvent<msgs::Emote> &e,
|
||||
TimelineItem(const mtx::events::RoomEvent<mtx::events::msg::Emote> &e,
|
||||
bool with_sender,
|
||||
QWidget *parent = 0);
|
||||
|
||||
// For local messages.
|
||||
// m.text & m.emote
|
||||
TimelineItem(events::MessageEventType ty,
|
||||
TimelineItem(mtx::events::MessageType ty,
|
||||
const QString &userid,
|
||||
QString body,
|
||||
bool withSender,
|
||||
|
|
@ -75,19 +63,19 @@ public:
|
|||
TimelineItem(VideoItem *item, const QString &userid, bool withSender, QWidget *parent = 0);
|
||||
|
||||
TimelineItem(ImageItem *img,
|
||||
const events::MessageEvent<msgs::Image> &e,
|
||||
const mtx::events::RoomEvent<mtx::events::msg::Image> &e,
|
||||
bool with_sender,
|
||||
QWidget *parent);
|
||||
TimelineItem(FileItem *file,
|
||||
const events::MessageEvent<msgs::File> &e,
|
||||
const mtx::events::RoomEvent<mtx::events::msg::File> &e,
|
||||
bool with_sender,
|
||||
QWidget *parent);
|
||||
TimelineItem(AudioItem *audio,
|
||||
const events::MessageEvent<msgs::Audio> &e,
|
||||
const mtx::events::RoomEvent<mtx::events::msg::Audio> &e,
|
||||
bool with_sender,
|
||||
QWidget *parent);
|
||||
TimelineItem(VideoItem *video,
|
||||
const events::MessageEvent<msgs::Video> &e,
|
||||
const mtx::events::RoomEvent<mtx::events::msg::Video> &e,
|
||||
bool with_sender,
|
||||
QWidget *parent);
|
||||
|
||||
|
|
@ -185,16 +173,17 @@ TimelineItem::setupWidgetLayout(Widget *widget,
|
|||
{
|
||||
init();
|
||||
|
||||
event_id_ = event.eventId();
|
||||
event_id_ = QString::fromStdString(event.event_id);
|
||||
const auto sender = QString::fromStdString(event.sender);
|
||||
|
||||
auto timestamp = QDateTime::fromMSecsSinceEpoch(event.timestamp());
|
||||
auto displayName = TimelineViewManager::displayName(event.sender());
|
||||
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,
|
||||
msgDescription,
|
||||
descriptiveTime(QDateTime::fromMSecsSinceEpoch(event.timestamp()))};
|
||||
descriptiveTime(QDateTime::fromMSecsSinceEpoch(event.origin_server_ts))};
|
||||
|
||||
generateTimestamp(timestamp);
|
||||
|
||||
|
|
@ -209,7 +198,7 @@ TimelineItem::setupWidgetLayout(Widget *widget,
|
|||
|
||||
mainLayout_->addLayout(headerLayout_);
|
||||
|
||||
AvatarProvider::resolve(event.sender(), this);
|
||||
AvatarProvider::resolve(sender, this);
|
||||
} else {
|
||||
setupSimpleLayout();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,39 +27,27 @@
|
|||
#include <QStyle>
|
||||
#include <QStyleOption>
|
||||
|
||||
#include "Audio.h"
|
||||
#include "Emote.h"
|
||||
#include "File.h"
|
||||
#include "Image.h"
|
||||
#include "Notice.h"
|
||||
#include "Text.h"
|
||||
#include "Video.h"
|
||||
#include <mtx.hpp>
|
||||
|
||||
#include "MatrixClient.h"
|
||||
#include "MessageEvent.h"
|
||||
#include "TimelineItem.h"
|
||||
|
||||
class FloatingButton;
|
||||
class RoomMessages;
|
||||
class ScrollBar;
|
||||
class Timeline;
|
||||
struct DescInfo;
|
||||
|
||||
namespace msgs = matrix::events::messages;
|
||||
namespace events = matrix::events;
|
||||
|
||||
// Contains info about a message shown in the history view
|
||||
// but not yet confirmed by the homeserver through sync.
|
||||
struct PendingMessage
|
||||
{
|
||||
matrix::events::MessageEventType ty;
|
||||
mtx::events::MessageType ty;
|
||||
int txn_id;
|
||||
QString body;
|
||||
QString filename;
|
||||
QString event_id;
|
||||
TimelineItem *widget;
|
||||
|
||||
PendingMessage(matrix::events::MessageEventType ty,
|
||||
PendingMessage(mtx::events::MessageType ty,
|
||||
int txn_id,
|
||||
QString body,
|
||||
QString filename,
|
||||
|
|
@ -86,7 +74,7 @@ class TimelineView : public QWidget
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
TimelineView(const Timeline &timeline,
|
||||
TimelineView(const mtx::responses::Timeline &timeline,
|
||||
QSharedPointer<MatrixClient> client,
|
||||
const QString &room_id,
|
||||
QWidget *parent = 0);
|
||||
|
|
@ -95,10 +83,10 @@ public:
|
|||
QWidget *parent = 0);
|
||||
|
||||
// Add new events at the end of the timeline.
|
||||
int addEvents(const Timeline &timeline);
|
||||
void addUserMessage(matrix::events::MessageEventType ty, const QString &msg);
|
||||
int addEvents(const mtx::responses::Timeline &timeline);
|
||||
void addUserMessage(mtx::events::MessageType ty, const QString &msg);
|
||||
|
||||
template<class Widget, events::MessageEventType MsgType>
|
||||
template<class Widget, mtx::events::MessageType MsgType>
|
||||
void addUserMessage(const QString &url, const QString &filename);
|
||||
void updatePendingMessage(int txn_id, QString event_id);
|
||||
void scrollDown();
|
||||
|
|
@ -109,7 +97,7 @@ public slots:
|
|||
void fetchHistory();
|
||||
|
||||
// Add old events at the top of the timeline.
|
||||
void addBackwardsEvents(const QString &room_id, const RoomMessages &msgs);
|
||||
void addBackwardsEvents(const QString &room_id, const mtx::responses::Messages &msgs);
|
||||
|
||||
// Whether or not the initial batch has been loaded.
|
||||
bool hasLoaded() { return scroll_layout_->count() > 1 || isTimelineFinished; }
|
||||
|
|
@ -135,13 +123,14 @@ private:
|
|||
void notifyForLastEvent();
|
||||
void readLastEvent() const;
|
||||
QString getLastEventId() const;
|
||||
QString getEventSender(const mtx::events::collections::TimelineEvents &event) const;
|
||||
|
||||
template<class Event, class Widget>
|
||||
TimelineItem *processMessageEvent(const QJsonObject &event, TimelineDirection direction);
|
||||
TimelineItem *processMessageEvent(const Event &event, TimelineDirection direction);
|
||||
|
||||
// TODO: Remove this eventually.
|
||||
template<class Event>
|
||||
TimelineItem *processMessageEvent(const QJsonObject &event, TimelineDirection direction);
|
||||
TimelineItem *processMessageEvent(const Event &event, TimelineDirection direction);
|
||||
|
||||
// For events with custom display widgets.
|
||||
template<class Event, class Widget>
|
||||
|
|
@ -164,7 +153,8 @@ private:
|
|||
void handleNewUserMessage(PendingMessage msg);
|
||||
|
||||
// Return nullptr if the event couldn't be parsed.
|
||||
TimelineItem *parseMessageEvent(const QJsonObject &event, TimelineDirection direction);
|
||||
TimelineItem *parseMessageEvent(const mtx::events::collections::TimelineEvents &event,
|
||||
TimelineDirection direction);
|
||||
|
||||
QVBoxLayout *top_layout_;
|
||||
QVBoxLayout *scroll_layout_;
|
||||
|
|
@ -207,7 +197,7 @@ private:
|
|||
QSharedPointer<MatrixClient> client_;
|
||||
};
|
||||
|
||||
template<class Widget, events::MessageEventType MsgType>
|
||||
template<class Widget, mtx::events::MessageType MsgType>
|
||||
void
|
||||
TimelineView::addUserMessage(const QString &url, const QString &filename)
|
||||
{
|
||||
|
|
@ -252,62 +242,50 @@ TimelineView::createTimelineItem(const Event &event, bool withSender)
|
|||
|
||||
template<class Event>
|
||||
TimelineItem *
|
||||
TimelineView::processMessageEvent(const QJsonObject &data, TimelineDirection direction)
|
||||
TimelineView::processMessageEvent(const Event &event, TimelineDirection direction)
|
||||
{
|
||||
Event event;
|
||||
const auto event_id = QString::fromStdString(event.event_id);
|
||||
const auto sender = QString::fromStdString(event.sender);
|
||||
|
||||
try {
|
||||
event.deserialize(data);
|
||||
} catch (const DeserializationException &e) {
|
||||
qWarning() << e.what() << data;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (isDuplicate(event.eventId()))
|
||||
if (isDuplicate(event_id))
|
||||
return nullptr;
|
||||
|
||||
eventIds_[event.eventId()] = true;
|
||||
eventIds_[event_id] = true;
|
||||
|
||||
QString txnid = event.unsignedData().transactionId();
|
||||
if (!txnid.isEmpty() && isPendingMessage(txnid, event.sender(), local_user_)) {
|
||||
const QString txnid = QString::fromStdString(event.unsigned_data.transaction_id);
|
||||
if (!txnid.isEmpty() && isPendingMessage(txnid, sender, local_user_)) {
|
||||
removePendingMessage(txnid);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto with_sender = isSenderRendered(event.sender(), direction);
|
||||
auto with_sender = isSenderRendered(sender, direction);
|
||||
|
||||
updateLastSender(event.sender(), direction);
|
||||
updateLastSender(sender, direction);
|
||||
|
||||
return createTimelineItem<Event>(event, with_sender);
|
||||
}
|
||||
|
||||
template<class Event, class Widget>
|
||||
TimelineItem *
|
||||
TimelineView::processMessageEvent(const QJsonObject &data, TimelineDirection direction)
|
||||
TimelineView::processMessageEvent(const Event &event, TimelineDirection direction)
|
||||
{
|
||||
Event event;
|
||||
const auto event_id = QString::fromStdString(event.event_id);
|
||||
const auto sender = QString::fromStdString(event.sender);
|
||||
|
||||
try {
|
||||
event.deserialize(data);
|
||||
} catch (const DeserializationException &e) {
|
||||
qWarning() << e.what() << data;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (isDuplicate(event.eventId()))
|
||||
if (isDuplicate(event_id))
|
||||
return nullptr;
|
||||
|
||||
eventIds_[event.eventId()] = true;
|
||||
eventIds_[event_id] = true;
|
||||
|
||||
QString txnid = event.unsignedData().transactionId();
|
||||
if (!txnid.isEmpty() && isPendingMessage(txnid, event.sender(), local_user_)) {
|
||||
const QString txnid = QString::fromStdString(event.unsigned_data.transaction_id);
|
||||
if (!txnid.isEmpty() && isPendingMessage(txnid, sender, local_user_)) {
|
||||
removePendingMessage(txnid);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
auto with_sender = isSenderRendered(event.sender(), direction);
|
||||
auto with_sender = isSenderRendered(sender, direction);
|
||||
|
||||
updateLastSender(event.sender(), direction);
|
||||
updateLastSender(sender, direction);
|
||||
|
||||
return createTimelineItem<Event, Widget>(event, with_sender);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,12 +21,10 @@
|
|||
#include <QSharedPointer>
|
||||
#include <QStackedWidget>
|
||||
|
||||
#include "MessageEvent.h"
|
||||
#include <mtx.hpp>
|
||||
|
||||
class JoinedRoom;
|
||||
class MatrixClient;
|
||||
class RoomInfoListItem;
|
||||
class Rooms;
|
||||
class TimelineView;
|
||||
struct DescInfo;
|
||||
|
||||
|
|
@ -39,14 +37,14 @@ public:
|
|||
~TimelineViewManager();
|
||||
|
||||
// Initialize with timeline events.
|
||||
void initialize(const Rooms &rooms);
|
||||
void initialize(const mtx::responses::Rooms &rooms);
|
||||
// Empty initialization.
|
||||
void initialize(const QList<QString> &rooms);
|
||||
|
||||
void addRoom(const JoinedRoom &room, const QString &room_id);
|
||||
void addRoom(const mtx::responses::JoinedRoom &room, const QString &room_id);
|
||||
void addRoom(const QString &room_id);
|
||||
|
||||
void sync(const Rooms &rooms);
|
||||
void sync(const mtx::responses::Rooms &rooms);
|
||||
void clearAll();
|
||||
|
||||
// Check if all the timelines have been loaded.
|
||||
|
|
|
|||
|
|
@ -24,12 +24,9 @@
|
|||
#include <QSharedPointer>
|
||||
#include <QWidget>
|
||||
|
||||
#include "Audio.h"
|
||||
#include "MatrixClient.h"
|
||||
#include "MessageEvent.h"
|
||||
|
||||
namespace events = matrix::events;
|
||||
namespace msgs = matrix::events::messages;
|
||||
#include <mtx.hpp>
|
||||
|
||||
class AudioItem : public QWidget
|
||||
{
|
||||
|
|
@ -46,7 +43,7 @@ class AudioItem : public QWidget
|
|||
|
||||
public:
|
||||
AudioItem(QSharedPointer<MatrixClient> client,
|
||||
const events::MessageEvent<msgs::Audio> &event,
|
||||
const mtx::events::RoomEvent<mtx::events::msg::Audio> &event,
|
||||
QWidget *parent = nullptr);
|
||||
|
||||
AudioItem(QSharedPointer<MatrixClient> client,
|
||||
|
|
@ -94,7 +91,7 @@ private:
|
|||
QString readableFileSize_;
|
||||
QString filenameToSave_;
|
||||
|
||||
events::MessageEvent<msgs::Audio> event_;
|
||||
mtx::events::RoomEvent<mtx::events::msg::Audio> event_;
|
||||
QSharedPointer<MatrixClient> client_;
|
||||
|
||||
QMediaPlayer *player_;
|
||||
|
|
|
|||
|
|
@ -23,12 +23,9 @@
|
|||
#include <QSharedPointer>
|
||||
#include <QWidget>
|
||||
|
||||
#include "File.h"
|
||||
#include "MatrixClient.h"
|
||||
#include "MessageEvent.h"
|
||||
#include <mtx.hpp>
|
||||
|
||||
namespace events = matrix::events;
|
||||
namespace msgs = matrix::events::messages;
|
||||
#include "MatrixClient.h"
|
||||
|
||||
class FileItem : public QWidget
|
||||
{
|
||||
|
|
@ -40,7 +37,7 @@ class FileItem : public QWidget
|
|||
|
||||
public:
|
||||
FileItem(QSharedPointer<MatrixClient> client,
|
||||
const events::MessageEvent<msgs::File> &event,
|
||||
const mtx::events::RoomEvent<mtx::events::msg::File> &event,
|
||||
QWidget *parent = nullptr);
|
||||
|
||||
FileItem(QSharedPointer<MatrixClient> client,
|
||||
|
|
@ -75,7 +72,7 @@ private:
|
|||
QString readableFileSize_;
|
||||
QString filenameToSave_;
|
||||
|
||||
events::MessageEvent<msgs::File> event_;
|
||||
mtx::events::RoomEvent<mtx::events::msg::File> event_;
|
||||
QSharedPointer<MatrixClient> client_;
|
||||
|
||||
QIcon icon_;
|
||||
|
|
|
|||
|
|
@ -22,19 +22,16 @@
|
|||
#include <QSharedPointer>
|
||||
#include <QWidget>
|
||||
|
||||
#include "Image.h"
|
||||
#include "MatrixClient.h"
|
||||
#include "MessageEvent.h"
|
||||
#include <mtx.hpp>
|
||||
|
||||
namespace events = matrix::events;
|
||||
namespace msgs = matrix::events::messages;
|
||||
#include "MatrixClient.h"
|
||||
|
||||
class ImageItem : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ImageItem(QSharedPointer<MatrixClient> client,
|
||||
const events::MessageEvent<msgs::Image> &event,
|
||||
const mtx::events::RoomEvent<mtx::events::msg::Image> &event,
|
||||
QWidget *parent = nullptr);
|
||||
|
||||
ImageItem(QSharedPointer<MatrixClient> client,
|
||||
|
|
@ -72,7 +69,7 @@ private:
|
|||
|
||||
int bottom_height_ = 30;
|
||||
|
||||
events::MessageEvent<msgs::Image> event_;
|
||||
mtx::events::RoomEvent<mtx::events::msg::Image> event_;
|
||||
|
||||
QSharedPointer<MatrixClient> client_;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -23,11 +23,8 @@
|
|||
#include <QWidget>
|
||||
|
||||
#include "MatrixClient.h"
|
||||
#include "MessageEvent.h"
|
||||
#include "Video.h"
|
||||
|
||||
namespace events = matrix::events;
|
||||
namespace msgs = matrix::events::messages;
|
||||
#include <mtx.hpp>
|
||||
|
||||
class VideoItem : public QWidget
|
||||
{
|
||||
|
|
@ -35,7 +32,7 @@ class VideoItem : public QWidget
|
|||
|
||||
public:
|
||||
VideoItem(QSharedPointer<MatrixClient> client,
|
||||
const events::MessageEvent<msgs::Video> &event,
|
||||
const mtx::events::RoomEvent<mtx::events::msg::Video> &event,
|
||||
QWidget *parent = nullptr);
|
||||
|
||||
VideoItem(QSharedPointer<MatrixClient> client,
|
||||
|
|
@ -53,6 +50,6 @@ private:
|
|||
|
||||
QLabel *label_;
|
||||
|
||||
events::MessageEvent<msgs::Video> event_;
|
||||
mtx::events::RoomEvent<mtx::events::msg::Video> event_;
|
||||
QSharedPointer<MatrixClient> client_;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue