From 8d82e92fcb04d42fa5efbd23e155ac9f076c7c9c Mon Sep 17 00:00:00 2001 From: Samuli Piippo Date: Tue, 2 Apr 2019 17:09:38 +0300 Subject: 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 --- src/applicationsmodel.cpp | 92 ++++++++++++++++++++++------------------------- 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 results; QList 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 &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 &results); + signals: void indexingFinished(QList results); public: QString root; ApplicationsModel *model = nullptr; - QString target; }; #endif // APPLICATIONSMODEL_P_H -- cgit v1.2.3