File indexing completed on 2024-05-05 05:01:24

0001 // SPDX-FileCopyrightText: 2023 Tobias Fella <tobias.fella@kde.org>
0002 // SPDX-License-Identifier: LGPL-2.0-or-later
0003 
0004 #pragma once
0005 
0006 #include "neochatconnection.h"
0007 #include <QAbstractListModel>
0008 #include <QPointer>
0009 #include <QQmlEngine>
0010 #include <QVariant>
0011 #include <Quotient/csapi/notifications.h>
0012 
0013 class NotificationsModel : public QAbstractListModel
0014 {
0015     Q_OBJECT
0016     QML_ELEMENT
0017 
0018     Q_PROPERTY(NeoChatConnection *connection READ connection WRITE setConnection NOTIFY connectionChanged)
0019     Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged)
0020     Q_PROPERTY(QString nextToken READ nextToken NOTIFY nextTokenChanged)
0021 
0022 public:
0023     enum Roles {
0024         TextRole = Qt::DisplayRole,
0025         RoomIdRole,
0026         AuthorName,
0027         AuthorAvatar,
0028         RoomRole,
0029         EventIdRole,
0030         RoomDisplayNameRole,
0031         UriRole,
0032     };
0033     Q_ENUM(Roles);
0034 
0035     struct Notification {
0036         QString roomId;
0037         QString text;
0038         QString authorName;
0039         QUrl authorAvatar;
0040         QString eventId;
0041         QString roomDisplayName;
0042     };
0043 
0044     NotificationsModel(QObject *parent = nullptr);
0045 
0046     int rowCount(const QModelIndex &parent) const override;
0047     QVariant data(const QModelIndex &index, int role) const override;
0048     QHash<int, QByteArray> roleNames() const override;
0049     bool canFetchMore(const QModelIndex &parent) const override;
0050     void fetchMore(const QModelIndex &parent) override;
0051 
0052     NeoChatConnection *connection() const;
0053     void setConnection(NeoChatConnection *connection);
0054     bool loading() const;
0055     QString nextToken() const;
0056 
0057 Q_SIGNALS:
0058     void connectionChanged();
0059     void loadingChanged();
0060     void nextTokenChanged();
0061 
0062 private:
0063     QPointer<NeoChatConnection> m_connection;
0064     void loadData();
0065     QList<Notification> m_notifications;
0066     QString m_nextToken;
0067     QPointer<Quotient::GetNotificationsJob> m_job;
0068 };