Files
neochat/src/roomlistmodel.h
2020-11-03 12:09:06 +01:00

97 lines
2.4 KiB
C++

#ifndef ROOMLISTMODEL_H
#define ROOMLISTMODEL_H
#include "connection.h"
#include "events/roomevent.h"
#include "room.h"
#include "spectralroom.h"
#include <QtCore/QAbstractListModel>
using namespace Quotient;
class RoomType : public QObject
{
Q_OBJECT
public:
enum Types {
Invited = 1,
Favorite,
Direct,
Normal,
Deprioritized,
};
Q_ENUMS(Types)
};
class RoomListModel : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(Connection *connection READ connection WRITE setConnection)
Q_PROPERTY(int notificationCount READ notificationCount NOTIFY notificationCountChanged)
public:
enum EventRoles {
NameRole = Qt::UserRole + 1,
AvatarRole,
TopicRole,
CategoryRole,
UnreadCountRole,
NotificationCountRole,
HighlightCountRole,
LastEventRole,
LastActiveTimeRole,
JoinStateRole,
CurrentRoomRole,
};
Q_ENUM(EventRoles)
RoomListModel(QObject *parent = nullptr);
virtual ~RoomListModel() override;
Connection *connection() const
{
return m_connection;
}
void setConnection(Connection *connection);
void doResetModel();
Q_INVOKABLE SpectralRoom *roomAt(int row) const;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QHash<int, QByteArray> roleNames() const override;
int notificationCount() const
{
return m_notificationCount;
}
private Q_SLOTS:
void doAddRoom(Room *room);
void updateRoom(Room *room, Room *prev);
void deleteRoom(Room *room);
void refresh(SpectralRoom *room, const QVector<int> &roles = {});
void refreshNotificationCount();
private:
Connection *m_connection = nullptr;
QList<SpectralRoom *> m_rooms;
int m_notificationCount = 0;
void connectRoomSignals(SpectralRoom *room);
Q_SIGNALS:
void connectionChanged();
void notificationCountChanged();
void roomAdded(SpectralRoom *room);
void newMessage(const QString &roomId, const QString &eventId, const QString &roomName, const QString &senderName, const QString &text, const QImage &icon);
void newHighlight(const QString &roomId, const QString &eventId, const QString &roomName, const QString &senderName, const QString &text, const QImage &icon);
};
#endif // ROOMLISTMODEL_H