matrixion/src/ui/UserProfile.h

120 lines
3.2 KiB
C
Raw Normal View History

2020-05-17 16:34:47 +03:00
#pragma once
2020-07-04 05:24:28 +03:00
#include <QAbstractListModel>
2020-05-17 16:34:47 +03:00
#include <QObject>
#include <QString>
2020-05-27 11:49:26 +03:00
#include <QVector>
2020-05-17 16:34:47 +03:00
2020-05-22 08:47:02 +03:00
#include "MatrixClient.h"
2020-05-27 11:49:26 +03:00
2020-07-04 05:24:28 +03:00
namespace verification {
Q_NAMESPACE
2020-05-17 16:34:47 +03:00
2020-07-04 05:24:28 +03:00
enum Status
{
VERIFIED,
UNVERIFIED,
BLOCKED
};
Q_ENUM_NS(Status)
}
2020-07-05 19:03:27 +03:00
class DeviceVerificationFlow;
2020-08-09 06:05:15 +03:00
class TimelineModel;
class TimelineViewManager;
2020-07-05 19:03:27 +03:00
2020-07-04 05:24:28 +03:00
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
2020-05-17 16:34:47 +03:00
{
Q_OBJECT
public:
2020-07-04 05:24:28 +03:00
enum Roles
2020-07-01 15:17:10 +03:00
{
2020-07-04 05:24:28 +03:00
DeviceId,
DeviceName,
VerificationStatus,
2020-07-01 15:17:10 +03:00
};
2020-07-04 05:24:28 +03:00
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 override
2020-07-04 05:24:28 +03:00
{
(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)
2020-07-17 23:16:30 +03:00
Q_PROPERTY(bool isUserVerified READ getUserStatus CONSTANT)
2020-07-04 05:24:28 +03:00
public:
UserProfile(QString roomid,
QString userid,
TimelineViewManager *manager_,
TimelineModel *parent = nullptr);
2020-07-04 05:24:28 +03:00
DeviceInfoModel *deviceList();
QString userid();
QString displayName();
QString avatarUrl();
2020-07-17 23:16:30 +03:00
bool getUserStatus();
2020-07-01 15:17:10 +03:00
Q_INVOKABLE void verify(QString device = "");
Q_INVOKABLE void unverify(QString device = "");
2020-07-05 19:03:27 +03:00
Q_INVOKABLE void fetchDeviceList(const QString &userID);
2020-06-26 01:54:42 +03:00
Q_INVOKABLE void banUser();
// Q_INVOKABLE void ignoreUser();
Q_INVOKABLE void kickUser();
Q_INVOKABLE void startChat();
2020-05-17 16:34:47 +03:00
private:
2020-07-04 05:24:28 +03:00
QString roomid_, userid_;
2020-07-01 15:17:10 +03:00
std::optional<std::string> cross_verified;
2020-07-04 05:24:28 +03:00
DeviceInfoModel deviceList_;
2020-07-17 23:16:30 +03:00
bool isUserVerified = false;
TimelineViewManager *manager;
2020-08-09 06:05:15 +03:00
TimelineModel *model;
2020-06-28 18:31:34 +03:00
void callback_fn(const mtx::responses::QueryKeys &res,
mtx::http::RequestErr err,
std::string user_id);
2020-07-01 15:17:10 +03:00
};