From 3a7f182c52f9ab4eee51863afb57ebf38fb2e47d Mon Sep 17 00:00:00 2001 From: Black Hat Date: Sat, 18 Aug 2018 16:02:47 +0800 Subject: [PATCH] Uses MatriqueRoom inherited from QMatrixClient::Room and rewrite related objects. --- matrique.pro | 6 +- org.eu.encom.matrique.appdata.xml | 2 +- qml/component/AudioBubble.qml | 10 +--- qml/component/DownloadableContent.qml | 2 +- qml/form/RoomForm.qml | 23 +------- qml/form/RoomListForm.qml | 6 +- qml/form/SettingAccountForm.qml | 9 ++- src/controller.cpp | 84 ++++++--------------------- src/controller.h | 69 ++++++++++------------ src/main.cpp | 3 +- src/matriqueroom.cpp | 57 ++++++++++++++++++ src/matriqueroom.h | 43 ++++++++++++++ src/messageeventmodel.cpp | 11 ++-- src/messageeventmodel.h | 3 +- src/roomlistmodel.cpp | 27 ++++----- src/roomlistmodel.h | 24 ++++---- 16 files changed, 202 insertions(+), 177 deletions(-) create mode 100644 src/matriqueroom.cpp create mode 100644 src/matriqueroom.h diff --git a/matrique.pro b/matrique.pro index 7c9f0b1..eb9c525 100644 --- a/matrique.pro +++ b/matrique.pro @@ -25,7 +25,8 @@ SOURCES += src/main.cpp \ src/imageprovider.cpp \ src/messageeventmodel.cpp \ src/imageproviderconnection.cpp \ - src/emojimodel.cpp + src/emojimodel.cpp \ + src/matriqueroom.cpp RESOURCES += \ res.qrc @@ -66,7 +67,8 @@ HEADERS += \ src/imageprovider.h \ src/messageeventmodel.h \ src/imageproviderconnection.h \ - src/emojimodel.h + src/emojimodel.h \ + src/matriqueroom.h unix:!mac { metainfo.files = $$PWD/org.eu.encom.matrique.appdata.xml diff --git a/org.eu.encom.matrique.appdata.xml b/org.eu.encom.matrique.appdata.xml index 7a0cdb8..e0ed44a 100644 --- a/org.eu.encom.matrique.appdata.xml +++ b/org.eu.encom.matrique.appdata.xml @@ -11,7 +11,7 @@ Matrique is a glossy cross-platform client for Matrix, the decentralized communication protocol for instant messaging.

- The source code is generally available at Gitlab + The source code is generally available at https://gitlab.com/b0/matrique

diff --git a/qml/component/AudioBubble.qml b/qml/component/AudioBubble.qml index 3c4ed61..e01f5ae 100644 --- a/qml/component/AudioBubble.qml +++ b/qml/component/AudioBubble.qml @@ -12,8 +12,6 @@ AvatarContainer { id: messageRow - Audio { id: audioPlayer } - DownloadableContent { id: downloadable @@ -37,7 +35,7 @@ AvatarContainer { onClicked: { if (downloadable.downloaded) - play() + matriqueController.playAudio(progressInfo.localPath) else { playOnFinished = true @@ -46,11 +44,7 @@ AvatarContainer { } } } - onDownloadedChanged: downloaded && playOnFinished ? play() : {} + onDownloadedChanged: downloaded && playOnFinished ? matriqueController.playAudio(progressInfo.localPath) : {} } - function play() { - audioPlayer.source = progressInfo.localPath - audioPlayer.play() - } } diff --git a/qml/component/DownloadableContent.qml b/qml/component/DownloadableContent.qml index 3f7ec36..a0f1072 100644 --- a/qml/component/DownloadableContent.qml +++ b/qml/component/DownloadableContent.qml @@ -18,7 +18,7 @@ Item { onDownloadedChanged: downloaded && openOnFinished ? openSavedFile() : {} function saveFileAs() { - matriqueController.saveFileAs(currentRoom, eventId) + currentRoom.saveFileAs(eventId) } function downloadAndOpen() diff --git a/qml/form/RoomForm.qml b/qml/form/RoomForm.qml index 63df1c4..9aed121 100644 --- a/qml/form/RoomForm.qml +++ b/qml/form/RoomForm.qml @@ -303,20 +303,7 @@ Item { contentItem: MaterialIcon { icon: "\ue226" } - onClicked: { - var fileTransferProgressCallback = function(id, sent, total) { - inputField.progress = sent / total - } - var completedCallback = function(id, localFile, mxcUrl) { - inputField.progress = 0 - currentRoom.fileTransferCompleted.disconnect(fileTransferProgressCallback) - currentRoom.fileTransferCompleted.disconnect(completedCallback) - } - - currentRoom.fileTransferProgress.connect(fileTransferProgressCallback) - currentRoom.fileTransferCompleted.connect(completedCallback) - matriqueController.uploadFile(currentRoom) - } + onClicked: currentRoom.chooseAndUploadFile() } TextField { @@ -340,14 +327,6 @@ Item { background: Rectangle { color: Material.theme == Material.Light ? "#eaeaea" : "#242424" - - Rectangle { - z: 5 - width: inputField.width * inputField.progress - height: parent.height - color: Material.accent - opacity: 0.4 - } } function postMessage(text) { diff --git a/qml/form/RoomListForm.qml b/qml/form/RoomListForm.qml index b3f0cf4..09f8a1d 100644 --- a/qml/form/RoomListForm.qml +++ b/qml/form/RoomListForm.qml @@ -217,8 +217,8 @@ Item { contentItem: Label { text: "Accept this invitation?" } - onAccepted: matriqueController.acceptRoom(currentRoom) - onRejected: matriqueController.rejectRoom(currentRoom) + onAccepted: currentRoom.acceptInvitation() + onRejected: currentRoom.rejectInvitation() } Menu { @@ -243,7 +243,7 @@ Item { } MenuItem { text: "Leave Room" - onTriggered: matriqueController.forgetRoom(currentRoom.id) + onTriggered: currentRoom.forget() } } } diff --git a/qml/form/SettingAccountForm.qml b/qml/form/SettingAccountForm.qml index f040e21..021c6d3 100644 --- a/qml/form/SettingAccountForm.qml +++ b/qml/form/SettingAccountForm.qml @@ -36,10 +36,13 @@ Page { } Button { - text: "Logout" - highlighted: true + text: "Logout" + highlighted: true - onClicked: matriqueController.logout() + onClicked: { + matriqueController.logout() + Qt.quit() + } } } } diff --git a/src/controller.cpp b/src/controller.cpp index f5c7a7c..b46fa27 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -1,19 +1,17 @@ #include "controller.h" -#include "connection.h" +#include "matriqueroom.h" + #include "events/eventcontent.h" #include "events/roommessageevent.h" -#include "csapi/create_room.h" #include "csapi/joining.h" -#include "csapi/leaving.h" #include -#include -#include -#include Controller::Controller(QObject* parent) : QObject(parent) { + Connection::setRoomType(); + connect(m_connection, &Connection::connected, this, &Controller::connected); connect(m_connection, &Connection::resolveError, this, &Controller::reconnect); @@ -33,15 +31,15 @@ Controller::~Controller() { } void Controller::login() { - if (!isLogin) { - m_connection->setHomeserver(QUrl(homeserver)); - m_connection->connectWithToken(userID, token, ""); + if (!m_isLogin) { + m_connection->setHomeserver(QUrl(m_homeserver)); + m_connection->connectWithToken(m_userID, m_token, ""); } } void Controller::loginWithCredentials(QString serverAddr, QString user, QString pass) { - if (!isLogin) { + if (!m_isLogin) { if (!user.isEmpty() && !pass.isEmpty()) { m_connection->setHomeserver(QUrl(serverAddr)); m_connection->connectToServer(user, pass, ""); @@ -71,48 +69,7 @@ void Controller::resync() { m_connection->sync(30000); } void Controller::reconnect() { qDebug() << "Connection lost. Reconnecting..."; - m_connection->connectWithToken(userID, token, ""); -} - -void Controller::uploadFile(Room* room) { - if (!room) return; - auto localFile = QFileDialog::getOpenFileUrl(Q_NULLPTR, tr("Save File as")); - if (!localFile.isEmpty()) { - room->uploadFile(localFile.toString(), localFile, getMIME(localFile)); - QMetaObject::Connection* const connection = new QMetaObject::Connection; - *connection = connect(room, &Room::fileTransferCompleted, - [=](QString id, QUrl localFile, QUrl mxcUrl) { - disconnect(*connection); - postFile(room, localFile, mxcUrl); - }); - } -} - -void Controller::postFile(Room* room, const QUrl& localFile, - const QUrl& mxcUrl) { - const QString mime = getMIME(localFile); - const QString fileName = localFile.fileName(); - QString msgType = "m.file"; - if (mime.startsWith("image")) msgType = "m.image"; - if (mime.startsWith("video")) msgType = "m.video"; - if (mime.startsWith("audio")) msgType = "m.audio"; - QJsonObject json{QJsonObject{{"msgtype", msgType}, - {"body", fileName}, - {"filename", fileName}, - {"url", mxcUrl.url()}}}; - room->postJson("m.room.message", json); -} - -QString Controller::getMIME(const QUrl& fileUrl) const { - const QString mime = m_db.mimeTypeForFile(fileUrl.toLocalFile()).name(); - return mime; -} - -void Controller::forgetRoom(const QString& roomID) { - ForgetRoomJob* forgetRoomJob = m_connection->forgetRoom(roomID); - setBusy(true); - forgetRoomJob->connect(forgetRoomJob, &ForgetRoomJob::finished, - [=] { setBusy(false); }); + m_connection->connectWithToken(m_userID, m_token, ""); } void Controller::joinRoom(const QString& alias) { @@ -123,8 +80,9 @@ void Controller::joinRoom(const QString& alias) { } void Controller::createRoom(const QString& name, const QString& topic) { - CreateRoomJob* createRoomJob = m_connection->createRoom( - Connection::PublishRoom, "", name, topic, QStringList()); + CreateRoomJob* createRoomJob = + ((Connection*)m_connection) + ->createRoom(Connection::PublishRoom, "", name, topic, QStringList()); setBusy(true); createRoomJob->connect(createRoomJob, &CreateRoomJob::finished, [=] { setBusy(false); }); @@ -138,17 +96,9 @@ void Controller::copyToClipboard(const QString& text) { m_clipboard->setText(text); } -void Controller::saveFileAs(Room* room, QString eventId) { - if (!room) return; - auto fileName = QFileDialog::getSaveFileName( - Q_NULLPTR, tr("Save File as"), room->fileNameToDownload(eventId)); - if (!fileName.isEmpty()) - room->downloadFile(eventId, QUrl::fromLocalFile(fileName)); -} - -void Controller::acceptRoom(Room* room) { room->setJoinState(JoinState::Join); } - -void Controller::rejectRoom(Room* room) { - room->setJoinState(JoinState::Leave); - forgetRoom(room->id()); +void Controller::playAudio(QUrl localFile) { + QMediaPlayer* player = new QMediaPlayer; + player->setMedia(localFile); + player->play(); + connect(player, &QMediaPlayer::stateChanged, [=] { player->deleteLater(); }); } diff --git a/src/controller.h b/src/controller.h index fc5e0f5..0b76732 100644 --- a/src/controller.h +++ b/src/controller.h @@ -2,11 +2,10 @@ #define CONTROLLER_H #include "connection.h" -#include "roomlistmodel.h" #include "user.h" #include -#include +#include #include using namespace QMatrixClient; @@ -14,14 +13,13 @@ using namespace QMatrixClient; class Controller : public QObject { Q_OBJECT - Q_PROPERTY(Connection* connection READ getConnection CONSTANT) - Q_PROPERTY( - bool isLogin READ getIsLogin WRITE setIsLogin NOTIFY isLoginChanged) - Q_PROPERTY(QString homeserver READ getHomeserver WRITE setHomeserver NOTIFY + Q_PROPERTY(Connection* connection READ connection CONSTANT) + Q_PROPERTY(bool isLogin READ isLogin WRITE setIsLogin NOTIFY isLoginChanged) + Q_PROPERTY(QString homeserver READ homeserver WRITE setHomeserver NOTIFY homeserverChanged) - Q_PROPERTY(QString userID READ getUserID WRITE setUserID NOTIFY userIDChanged) - Q_PROPERTY(QByteArray token READ getToken WRITE setToken NOTIFY tokenChanged) - Q_PROPERTY(bool busy READ getBusy WRITE setBusy NOTIFY busyChanged) + Q_PROPERTY(QString userID READ userID WRITE setUserID NOTIFY userIDChanged) + Q_PROPERTY(QByteArray token READ token WRITE setToken NOTIFY tokenChanged) + Q_PROPERTY(bool busy READ busy WRITE setBusy NOTIFY busyChanged) public: explicit Controller(QObject* parent = nullptr); @@ -36,64 +34,61 @@ class Controller : public QObject { // All the Q_PROPERTYs. Connection* m_connection = new Connection(); - Connection* getConnection() { return m_connection; } + Connection* connection() { return m_connection; } - bool isLogin = false; - bool getIsLogin() { return isLogin; } + bool isLogin() { return m_isLogin; } void setIsLogin(bool n) { - if (n != isLogin) { - isLogin = n; + if (n != m_isLogin) { + m_isLogin = n; emit isLoginChanged(); } } - QString userID; - QString getUserID() { return userID; } + QString userID() { return m_userID; } void setUserID(QString n) { - if (n != userID) { - userID = n; + if (n != m_userID) { + m_userID = n; emit userIDChanged(); } } - QByteArray token; - QByteArray getToken() { return token; } + QByteArray token() { return m_token; } void setToken(QByteArray n) { - if (n != token) { - token = n; + if (n != m_token) { + m_token = n; emit tokenChanged(); } } - QString homeserver; - QString getHomeserver() { return homeserver; } + QString homeserver() { return m_homeserver; } void setHomeserver(QString n) { - if (n != homeserver) { - homeserver = n; + if (n != m_homeserver) { + m_homeserver = n; emit homeserverChanged(); } } - bool busy = false; - bool getBusy() { return busy; } + bool busy() { return m_busy; } void setBusy(bool b) { - if (b != busy) { - busy = b; + if (b != m_busy) { + m_busy = b; emit busyChanged(); } } private: QClipboard* m_clipboard = QApplication::clipboard(); - QMimeDatabase m_db; + + bool m_isLogin = false; + QString m_userID; + QByteArray m_token; + QString m_homeserver; + bool m_busy = false; void connected(); void resync(); void reconnect(); - QString getMIME(const QUrl& fileUrl) const; - void postFile(Room* room, const QUrl& localFile, const QUrl& mxcUrl); - signals: void connectionChanged(); void isLoginChanged(); @@ -104,15 +99,11 @@ class Controller : public QObject { void errorOccured(); public slots: - void uploadFile(Room* room); - void forgetRoom(const QString& roomID); void joinRoom(const QString& alias); void createRoom(const QString& name, const QString& topic); void createDirectChat(const QString& userID); void copyToClipboard(const QString& text); - void saveFileAs(Room* room, QString eventId); - void acceptRoom(Room* room); - void rejectRoom(Room* room); + void playAudio(QUrl localFile); }; #endif // CONTROLLER_H diff --git a/src/main.cpp b/src/main.cpp index 0bd94e5..9ad3046 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,6 +9,7 @@ #include "messageeventmodel.h" #include "room.h" #include "roomlistmodel.h" +#include "matriqueroom.h" #include "csapi/joining.h" #include "csapi/leaving.h" @@ -22,7 +23,7 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); - qRegisterMetaType("Room*"); + qRegisterMetaType("MatriqueRoom*"); qRegisterMetaType("User*"); qRegisterMetaType("MessageEventType"); diff --git a/src/matriqueroom.cpp b/src/matriqueroom.cpp new file mode 100644 index 0000000..cd0ecd6 --- /dev/null +++ b/src/matriqueroom.cpp @@ -0,0 +1,57 @@ +#include "matriqueroom.h" + +#include "connection.h" +#include "csapi/leaving.h" + +#include +#include + +MatriqueRoom::MatriqueRoom(Connection* connection, QString roomId, + JoinState joinState) + : Room(connection, std::move(roomId), joinState) {} + +void MatriqueRoom::chooseAndUploadFile() { + auto localFile = QFileDialog::getOpenFileUrl(Q_NULLPTR, tr("Save File as")); + if (!localFile.isEmpty()) { + uploadFile(localFile.toString(), localFile, getMIME(localFile)); + QMetaObject::Connection* const connection = new QMetaObject::Connection; + *connection = connect(this, &Room::fileTransferCompleted, + [=](QString id, QUrl localFile, QUrl mxcUrl) { + disconnect(*connection); + postFile(localFile, mxcUrl); + }); + } +} + +void MatriqueRoom::postFile(const QUrl& localFile, const QUrl& mxcUrl) { + const QString mime = getMIME(localFile); + const QString fileName = localFile.fileName(); + QString msgType = "m.file"; + if (mime.startsWith("image")) msgType = "m.image"; + if (mime.startsWith("video")) msgType = "m.video"; + if (mime.startsWith("audio")) msgType = "m.audio"; + QJsonObject json{QJsonObject{{"msgtype", msgType}, + {"body", fileName}, + {"filename", fileName}, + {"url", mxcUrl.url()}}}; + postJson("m.room.message", json); +} + +QString MatriqueRoom::getMIME(const QUrl& fileUrl) const { + return QMimeDatabase().mimeTypeForFile(fileUrl.toLocalFile()).name(); +} + +void MatriqueRoom::saveFileAs(QString eventId) { + auto fileName = QFileDialog::getSaveFileName(Q_NULLPTR, tr("Save File as"), + fileNameToDownload(eventId)); + if (!fileName.isEmpty()) downloadFile(eventId, QUrl::fromLocalFile(fileName)); +} + +void MatriqueRoom::acceptInvitation() { setJoinState(JoinState::Join); } + +void MatriqueRoom::rejectInvitation() { + setJoinState(JoinState::Leave); + forget(); +} + +void MatriqueRoom::forget() { connection()->forgetRoom(id()); } diff --git a/src/matriqueroom.h b/src/matriqueroom.h new file mode 100644 index 0000000..6525b60 --- /dev/null +++ b/src/matriqueroom.h @@ -0,0 +1,43 @@ +#ifndef MATRIQUEROOM_H +#define MATRIQUEROOM_H + +#include "room.h" + +#include + +using namespace QMatrixClient; + +class MatriqueRoom : public Room { + Q_OBJECT + Q_PROPERTY(QString cachedInput READ cachedInput WRITE setCachedInput NOTIFY + cachedInputChanged) + public: + explicit MatriqueRoom(Connection* connection, QString roomId, + JoinState joinState = {}); + + const QString& cachedInput() const { return m_cachedInput; } + void setCachedInput(const QString& input) { + if (input != m_cachedInput) { + m_cachedInput = input; + emit cachedInputChanged(); + } + } + + private: + QString m_cachedInput = ""; + + QString getMIME(const QUrl& fileUrl) const; + void postFile(const QUrl& localFile, const QUrl& mxcUrl); + + signals: + void cachedInputChanged(); + + public slots: + void chooseAndUploadFile(); + void saveFileAs(QString eventId); + void acceptInvitation(); + void rejectInvitation(); + void forget(); +}; + +#endif // MATRIQUEROOM_H diff --git a/src/messageeventmodel.cpp b/src/messageeventmodel.cpp index 238629b..7512840 100644 --- a/src/messageeventmodel.cpp +++ b/src/messageeventmodel.cpp @@ -1,15 +1,16 @@ #include "messageeventmodel.h" -#include -#include // for qmlRegisterType() - #include +#include +#include + #include #include #include #include -#include -#include + +#include +#include // for qmlRegisterType() QHash MessageEventModel::roleNames() const { QHash roles = QAbstractItemModel::roleNames(); diff --git a/src/messageeventmodel.h b/src/messageeventmodel.h index 500ca8a..1d31f33 100644 --- a/src/messageeventmodel.h +++ b/src/messageeventmodel.h @@ -1,9 +1,10 @@ #ifndef MESSAGEEVENTMODEL_H #define MESSAGEEVENTMODEL_H -#include #include "room.h" +#include + class MessageEventModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY( diff --git a/src/roomlistmodel.cpp b/src/roomlistmodel.cpp index fe5abca..24fb3a2 100644 --- a/src/roomlistmodel.cpp +++ b/src/roomlistmodel.cpp @@ -37,12 +37,13 @@ void RoomListModel::doResetModel() { endResetModel(); } -Room* RoomListModel::roomAt(int row) { return m_rooms.at(row); } +MatriqueRoom* RoomListModel::roomAt(int row) { return m_rooms.at(row); } void RoomListModel::doAddRoom(Room* r) { - if (auto* room = r) { + if (auto* room = static_cast(r)) { m_rooms.append(room); connectRoomSignals(room); +// qCritical() << room->cachedInput(); emit roomAdded(room); } else { qCritical() << "Attempt to add nullptr to the room list"; @@ -50,7 +51,7 @@ void RoomListModel::doAddRoom(Room* r) { } } -void RoomListModel::connectRoomSignals(Room* room) { +void RoomListModel::connectRoomSignals(MatriqueRoom* room) { connect(room, &Room::displaynameChanged, this, [=] { namesChanged(room); }); connect(room, &Room::unreadMessagesChanged, this, [=] { unreadMessagesChanged(room); }); @@ -62,7 +63,7 @@ void RoomListModel::connectRoomSignals(Room* room) { [=] { refresh(room, {AvatarRole}); }); connect(room, &Room::unreadMessagesChanged, this, [=](Room* r) { - if (r->hasUnreadMessages()) emit newMessage(r); + if (r->hasUnreadMessages()) emit newMessage(static_cast(r)); }); // connect( // room, &QMatrixClient::Room::aboutToAddNewMessages, this, @@ -84,7 +85,7 @@ void RoomListModel::updateRoom(Room* room, Room* prev) { // the previously left room (in both cases prev has the previous state). if (prev == room) { qCritical() << "RoomListModel::updateRoom: room tried to replace itself"; - refresh(static_cast(room)); + refresh(static_cast(room)); return; } if (prev && room->id() != prev->id()) { @@ -93,10 +94,10 @@ void RoomListModel::updateRoom(Room* room, Room* prev) { // That doesn't look right but technically we still can do it. } // Ok, we're through with pre-checks, now for the real thing. - auto* newRoom = room; - const auto it = - std::find_if(m_rooms.begin(), m_rooms.end(), - [=](const Room* r) { return r == prev || r == newRoom; }); + auto* newRoom = static_cast(room); + const auto it = std::find_if( + m_rooms.begin(), m_rooms.end(), + [=](const MatriqueRoom* r) { return r == prev || r == newRoom; }); if (it != m_rooms.end()) { const int row = it - m_rooms.begin(); // There's no guarantee that prev != newRoom @@ -136,7 +137,7 @@ QVariant RoomListModel::data(const QModelIndex& index, int role) const { qDebug() << "UserListModel: something wrong here..."; return QVariant(); } - Room* room = m_rooms.at(index.row()); + MatriqueRoom* room = m_rooms.at(index.row()); if (role == NameRole) return room->displayName(); if (role == AvatarRole) { if (room->avatarUrl().toString() != "") { @@ -156,12 +157,12 @@ QVariant RoomListModel::data(const QModelIndex& index, int role) const { return QVariant(); } -void RoomListModel::namesChanged(Room* room) { +void RoomListModel::namesChanged(MatriqueRoom* room) { int row = m_rooms.indexOf(room); emit dataChanged(index(row), index(row)); } -void RoomListModel::refresh(Room* room, const QVector& roles) { +void RoomListModel::refresh(MatriqueRoom* room, const QVector& roles) { const auto it = std::find(m_rooms.begin(), m_rooms.end(), room); if (it == m_rooms.end()) { qCritical() << "Room" << room->id() << "not found in the room list"; @@ -171,7 +172,7 @@ void RoomListModel::refresh(Room* room, const QVector& roles) { emit dataChanged(idx, idx, roles); } -void RoomListModel::unreadMessagesChanged(Room* room) { +void RoomListModel::unreadMessagesChanged(MatriqueRoom* room) { int row = m_rooms.indexOf(room); emit dataChanged(index(row), index(row)); } diff --git a/src/roomlistmodel.h b/src/roomlistmodel.h index 22f543b..ffe4fed 100644 --- a/src/roomlistmodel.h +++ b/src/roomlistmodel.h @@ -1,9 +1,11 @@ #ifndef ROOMLISTMODEL_H #define ROOMLISTMODEL_H -#include #include "connection.h" #include "room.h" +#include "matriqueroom.h" + +#include using namespace QMatrixClient; @@ -23,7 +25,7 @@ class RoomType : public QObject { class RoomListModel : public QAbstractListModel { Q_OBJECT - Q_PROPERTY(Connection* connection READ getConnection WRITE setConnection) + Q_PROPERTY(Connection* connection READ connection WRITE setConnection) public: enum EventRoles { @@ -37,11 +39,11 @@ class RoomListModel : public QAbstractListModel { RoomListModel(QObject* parent = 0); virtual ~RoomListModel(); - Connection* getConnection() { return m_connection; } + Connection* connection() { return m_connection; } void setConnection(Connection* connection); void doResetModel(); - Q_INVOKABLE Room* roomAt(int row); + Q_INVOKABLE MatriqueRoom* roomAt(int row); QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; @@ -51,23 +53,23 @@ class RoomListModel : public QAbstractListModel { QHash roleNames() const; private slots: - void namesChanged(Room* room); - void unreadMessagesChanged(Room* room); + void namesChanged(MatriqueRoom* room); + void unreadMessagesChanged(MatriqueRoom* room); void doAddRoom(Room* room); void updateRoom(Room* room, Room* prev); void deleteRoom(Room* room); - void refresh(Room* room, const QVector& roles = {}); + void refresh(MatriqueRoom* room, const QVector& roles = {}); private: Connection* m_connection = nullptr; - QList m_rooms; - void connectRoomSignals(Room* room); + QList m_rooms; + void connectRoomSignals(MatriqueRoom* room); signals: void connectionChanged(); - void roomAdded(Room* room); - void newMessage(Room* room); + void roomAdded(MatriqueRoom* room); + void newMessage(MatriqueRoom* room); }; #endif // ROOMLISTMODEL_H