3#include <QtCore/QAbstractListModel>
4#include <QtCore/QByteArray>
5#include <QtCore/QStringList>
7#include <QtCore/QVariantList>
8#include <QtQml/QQmlEngine>
12#include "qml_material/export.hpp"
14class QXmlStreamReader;
19class QML_MATERIAL_API AppStreamReleaseModel :
public QAbstractListModel {
23 Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
24 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
25 Q_PROPERTY(QString errorString READ errorString NOTIFY errorStringChanged)
26 Q_PROPERTY(
int count READ rowCount NOTIFY countChanged)
39 VersionRole = Qt::UserRole + 1,
44 explicit AppStreamReleaseModel(QObject* parent =
nullptr);
46 int rowCount(
const QModelIndex& parent = QModelIndex())
const override;
47 QVariant data(
const QModelIndex& index,
int role)
const override;
48 QHash<int, QByteArray> roleNames()
const override;
51 void setSource(
const QUrl& source);
52 Status status()
const;
53 QString errorString()
const;
55 Q_INVOKABLE
void reload();
60 void errorStringChanged();
67 QVariantList sections;
70 static bool parseDocument(QByteArray xml, std::vector<Release>& releases, QString& error);
71 static void collectReleases(QXmlStreamReader& reader, std::vector<Release>& releases);
72 static Release parseRelease(QXmlStreamReader& reader);
73 static QVariantList parseDescription(QXmlStreamReader& reader);
75 void replace(std::vector<Release> releases, Status status, QString error);
78 Status m_status { Null };
79 QString m_error_string;
80 std::vector<Release> m_releases;