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 };