summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuli Piippo <samuli.piippo@qt.io>2019-04-02 17:09:38 +0300
committerSamuli Piippo <samuli.piippo@qt.io>2019-04-04 09:58:51 +0000
commit8d82e92fcb04d42fa5efbd23e155ac9f076c7c9c (patch)
tree240d5f11d955387b1cfd3d12ead8e6c06384742c
parent1a9567ff314fd737b52bffb3195d64b600252c59 (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>
-rw-r--r--src/applicationsmodel.cpp92
-rw-r--r--src/applicationsmodel_p.h4
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