File indexing completed on 2025-02-23 04:35:16

0001 // SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
0002 // SPDX-License-Identifier: GPL-3.0-or-later
0003 
0004 #pragma once
0005 
0006 #include <QAbstractListModel>
0007 #include <QDateTime>
0008 #include <QNetworkAccessManager>
0009 #include <QUrl>
0010 #include <QtQml>
0011 
0012 class PeerTubeInstancesModel : public QAbstractListModel
0013 {
0014     Q_OBJECT
0015     QML_ELEMENT
0016 
0017     Q_PROPERTY(bool loading READ loading NOTIFY loadingChanged)
0018     Q_PROPERTY(QString filterString READ filterString WRITE setFilterString NOTIFY filterStringChanged)
0019 
0020 public:
0021     enum CustomRoles { URLRole = Qt::UserRole };
0022 
0023     explicit PeerTubeInstancesModel(QObject *parent = nullptr);
0024 
0025     bool loading() const;
0026     void setLoading(bool loading);
0027 
0028     QVariant data(const QModelIndex &index, int role) const override;
0029     int rowCount(const QModelIndex &parent) const override;
0030     QHash<int, QByteArray> roleNames() const override;
0031 
0032     void setFilterString(const QString &filterString);
0033     QString filterString() const;
0034 
0035 Q_SIGNALS:
0036     void loadingChanged();
0037     void filterStringChanged();
0038 
0039 private:
0040     void fill();
0041 
0042     struct PeerTubeInstance {
0043         QString url;
0044     };
0045 
0046     QList<PeerTubeInstance> m_instances;
0047     bool m_loading = false;
0048     QString m_filterString;
0049     PeerTubeInstance fromSourceData(const QJsonObject &object) const;
0050     QNetworkAccessManager m_netManager;
0051 };