diff options
author | Samuli Piippo <samuli.piippo@qt.io> | 2019-04-02 17:09:38 +0300 |
---|---|---|
committer | Samuli Piippo <samuli.piippo@qt.io> | 2019-04-04 09:58:51 +0000 |
commit | 8d82e92fcb04d42fa5efbd23e155ac9f076c7c9c (patch) | |
tree | 240d5f11d955387b1cfd3d12ead8e6c06384742c /src | |
parent | 1a9567ff314fd737b52bffb3195d64b600252c59 (diff) |
Parse individual demo.xml files
Instead of single demos.xml for all the demo descriptions, use
individual demo.xml files that are located in the demo folder.
This makes possible to easily select which demos are shown in
a particular device, when unwanted demos can be simple removed
without editing the common xml file.
Actual folder path is used for the location and exclude list
is no longer used.
Task-number: QTBUG-74930
Change-Id: If6819a80650084feb6f3e68d5a5a7a8468394bfa
Reviewed-by: Kari Oikarinen <kari.oikarinen@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/applicationsmodel.cpp | 92 | ||||
-rw-r--r-- | src/applicationsmodel_p.h | 4 |
2 files changed, 45 insertions, 51 deletions
diff --git a/src/applicationsmodel.cpp b/src/applicationsmodel.cpp index 9fb4487..5c29c93 100644 --- a/src/applicationsmodel.cpp +++ b/src/applicationsmodel.cpp @@ -50,73 +50,65 @@ void IndexingThread::run() { QList<AppData> results; QList<QString> roots = root.split(":"); - target = qgetenv("B2QT_BASE") + "-" + qgetenv("B2QT_PLATFORM"); foreach (const QString &root, roots) { - if (QFile::exists(root + "/demos.xml")) { - - QFile file(root + "/demos.xml"); - - if (!file.open(QIODevice::ReadOnly)) - break; - - QXmlStreamReader xml(&file); - - AppData data; - bool exclude = false; - - while (!xml.atEnd()) { - switch (xml.readNext()) { - - case QXmlStreamReader::StartElement: - if (xml.name().toString().toLower() == "application") { - - const QStringList excludeList = xml.attributes().value("exclude").toString().split(QStringLiteral(";")); - - exclude = excludeList.contains(target) || excludeList.contains(QStringLiteral("all")); + QDirIterator it(root, QDir::Dirs | QDir::NoDotDot); + while (it.hasNext()) { + QString path = it.next(); + if (QFile::exists(path + "/demo.xml")) + parseDemo(path, results); + } + } - if (exclude) - break; + std::sort(results.begin(), results.end(), appOrder); - data.name = xml.attributes().value("title").toString().trimmed(); + qDebug() << "Indexer: all done... total:" << results.size(); + emit indexingFinished(results); +} - QString path = xml.attributes().value("location").toString(); - data.location = QUrl::fromLocalFile(path); +void IndexingThread::parseDemo(QString path, QList<AppData> &results) { + QFile file(path + "/demo.xml"); - data.main = QString("/%1").arg(xml.attributes().value("main").toString()); + if (!file.open(QIODevice::ReadOnly)) + return; - QString imageName = xml.attributes().value("icon").toString(); + QXmlStreamReader xml(&file); - data.icon = QFile::exists(imageName) - ? QUrl::fromLocalFile(imageName) - : QUrl("qrc:///qml/images/codeless.png"); + AppData data; + while (!xml.atEnd()) { + switch (xml.readNext()) { + case QXmlStreamReader::StartElement: + if (xml.name().toString().toLower() == "application") { + data.location = QUrl::fromLocalFile(path); + data.name = xml.attributes().value("title").toString().trimmed(); + data.main = QString("/%1").arg(xml.attributes().value("main").toString()); - data.priority = xml.attributes().value("priority").toInt(); + QString imageName = QString("%1/%2") + .arg(path, xml.attributes().value("icon").toString()); - } else if (xml.name().toString().toLower() == "description") { - data.description = xml.readElementText().trimmed(); - } - break; + data.icon = QFile::exists(imageName) + ? QUrl::fromLocalFile(imageName) + : QUrl(); - case QXmlStreamReader::EndElement: - if (xml.name().toString().toLower() == "application" && !exclude) - results << data; - break; + data.priority = xml.attributes().value("priority").toInt(); - default: - break; - } + } else if (xml.name().toString().toLower() == "description") { + data.description = xml.readElementText().trimmed(); } + break; + + case QXmlStreamReader::EndElement: + if (xml.name().toString().toLower() == "application") + results << data; + break; - if (xml.error() != QXmlStreamReader::NoError) - qWarning("XML Parser error: %s", qPrintable(xml.errorString())); + default: + break; } } - std::sort(results.begin(), results.end(), appOrder); - - qDebug() << "Indexer: all done... total:" << results.size(); - emit indexingFinished(results); + if (xml.error() != QXmlStreamReader::NoError) + qWarning("XML Parser error: %s", qPrintable(xml.errorString())); } ApplicationsModel::ApplicationsModel(QObject *parent) : diff --git a/src/applicationsmodel_p.h b/src/applicationsmodel_p.h index 7ae5368..ba1254b 100644 --- a/src/applicationsmodel_p.h +++ b/src/applicationsmodel_p.h @@ -40,13 +40,15 @@ public: virtual ~IndexingThread() = default; void run() final; +private: + void parseDemo(QString path, QList<AppData> &results); + signals: void indexingFinished(QList<AppData> results); public: QString root; ApplicationsModel *model = nullptr; - QString target; }; #endif // APPLICATIONSMODEL_P_H |