summary refs log tree commit diff
path: root/src/ui/UserProfile.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/UserProfile.h')
-rw-r--r--src/ui/UserProfile.h120
1 files changed, 77 insertions, 43 deletions
diff --git a/src/ui/UserProfile.h b/src/ui/UserProfile.h

index 1725b961..38002fff 100644 --- a/src/ui/UserProfile.h +++ b/src/ui/UserProfile.h
@@ -1,34 +1,92 @@ #pragma once +#include <QAbstractListModel> #include <QObject> #include <QString> #include <QVector> #include "MatrixClient.h" -class DeviceInfo; +namespace verification { +Q_NAMESPACE -class UserProfile : public QObject +enum Status +{ + VERIFIED, + UNVERIFIED, + BLOCKED +}; +Q_ENUM_NS(Status) +} + +class DeviceInfo +{ +public: + DeviceInfo(const QString deviceID, + const QString displayName, + verification::Status verification_status_) + : device_id(deviceID) + , display_name(displayName) + , verification_status(verification_status_) + {} + DeviceInfo() + : verification_status(verification::UNVERIFIED) + {} + + QString device_id; + QString display_name; + + verification::Status verification_status; +}; + +class DeviceInfoModel : public QAbstractListModel { Q_OBJECT - Q_PROPERTY(QString userId READ getUserId WRITE setUserId NOTIFY userIdChanged) - Q_PROPERTY(std::vector<DeviceInfo> deviceList READ getDeviceList NOTIFY deviceListUpdated) public: - // constructor - explicit UserProfile(QObject *parent = 0); - // getters - std::vector<DeviceInfo> getDeviceList(); - QString getUserId(); - // setters - void setUserId(const QString &userId); - - enum Status + enum Roles { - VERIFIED, - UNVERIFIED, - BLOCKED + DeviceId, + DeviceName, + VerificationStatus, }; - Q_ENUM(Status) + + explicit DeviceInfoModel(QObject *parent = nullptr) + { + (void)parent; + connect(this, &DeviceInfoModel::queueReset, this, &DeviceInfoModel::reset); + }; + QHash<int, QByteArray> roleNames() const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const + { + (void)parent; + return (int)deviceList_.size(); + } + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + +signals: + void queueReset(const std::vector<DeviceInfo> &deviceList); +public slots: + void reset(const std::vector<DeviceInfo> &deviceList); + +private: + std::vector<DeviceInfo> deviceList_; +}; + +class UserProfile : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString displayName READ displayName CONSTANT) + Q_PROPERTY(QString userid READ userid CONSTANT) + Q_PROPERTY(QString avatarUrl READ avatarUrl CONSTANT) + Q_PROPERTY(DeviceInfoModel *deviceList READ deviceList CONSTANT) +public: + UserProfile(QString roomid, QString userid, QObject *parent = 0); + + DeviceInfoModel *deviceList(); + + QString userid(); + QString displayName(); + QString avatarUrl(); void fetchDeviceList(const QString &userID); Q_INVOKABLE void banUser(); @@ -36,37 +94,13 @@ public: Q_INVOKABLE void kickUser(); Q_INVOKABLE void startChat(); -signals: - void userIdChanged(); - void deviceListUpdated(); - void updateDeviceList(); - void appendDeviceList(const QString device_id, - const QString device_naem, - const UserProfile::Status verification_status); - private: - std::vector<DeviceInfo> deviceList; - QString userId; + QString roomid_, userid_; std::optional<std::string> cross_verified; + DeviceInfoModel deviceList_; void callback_fn(const mtx::responses::QueryKeys &res, mtx::http::RequestErr err, std::string user_id, std::optional<std::vector<std::string>> cross_verified); }; - -class DeviceInfo -{ -public: - DeviceInfo(const QString deviceID, - const QString displayName, - UserProfile::Status verification_status_) - : device_id(deviceID) - , display_name(displayName) - , verification_status(verification_status_) - {} - - QString device_id; - QString display_name; - UserProfile::Status verification_status; -}; \ No newline at end of file