matrixion/src/ReadReceiptsModel.h

74 lines
1.7 KiB
C
Raw Normal View History

// SPDX-FileCopyrightText: 2021 Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
#ifndef READRECEIPTSMODEL_H
#define READRECEIPTSMODEL_H
#include <QAbstractListModel>
2021-07-24 16:17:06 +03:00
#include <QDateTime>
#include <QObject>
#include <QSortFilterProxyModel>
#include <QString>
class ReadReceiptsModel : public QAbstractListModel
{
2021-09-18 01:22:33 +03:00
Q_OBJECT
public:
2021-09-18 01:22:33 +03:00
enum Roles
{
Mxid,
DisplayName,
AvatarUrl,
Timestamp,
RawTimestamp,
};
explicit ReadReceiptsModel(QString event_id, QString room_id, QObject *parent = nullptr);
QString eventId() const { return event_id_; }
QString roomId() const { return room_id_; }
QHash<int, QByteArray> roleNames() const override;
int rowCount(const QModelIndex &parent) const override
{
Q_UNUSED(parent)
return readReceipts_.size();
}
QVariant data(const QModelIndex &index, int role) const override;
public slots:
2021-09-18 01:22:33 +03:00
void addUsers(const std::multimap<uint64_t, std::string, std::greater<uint64_t>> &users);
void update();
private:
2021-09-18 01:22:33 +03:00
QString dateFormat(const QDateTime &then) const;
2021-07-24 05:19:48 +03:00
2021-09-18 01:22:33 +03:00
QString event_id_;
QString room_id_;
QVector<QPair<QString, QDateTime>> readReceipts_;
};
class ReadReceiptsProxy : public QSortFilterProxyModel
{
2021-09-18 01:22:33 +03:00
Q_OBJECT
2021-09-18 01:22:33 +03:00
Q_PROPERTY(QString eventId READ eventId CONSTANT)
Q_PROPERTY(QString roomId READ roomId CONSTANT)
public:
2021-09-18 01:22:33 +03:00
explicit ReadReceiptsProxy(QString event_id, QString room_id, QObject *parent = nullptr);
2021-09-18 01:22:33 +03:00
QString eventId() const { return event_id_; }
QString roomId() const { return room_id_; }
private:
2021-09-18 01:22:33 +03:00
QString event_id_;
QString room_id_;
2021-09-18 01:22:33 +03:00
ReadReceiptsModel model_;
};
#endif // READRECEIPTSMODEL_H