diff options
author | Mikko Gronoff <mikko.gronoff@qt.io> | 2019-04-26 09:55:15 +0300 |
---|---|---|
committer | Mikko Gronoff <mikko.gronoff@qt.io> | 2019-04-26 09:55:36 +0300 |
commit | 04cecef50d9316d98c11e8b82be5a492ef9bde70 (patch) | |
tree | dae4cf00b9473cdc274218091e5a29e8ab4f4767 | |
parent | 747d70eaa865aad25b0ee680a0090c059a0549a9 (diff) | |
parent | 8d82e92fcb04d42fa5efbd23e155ac9f076c7c9c (diff) |
Merge remote-tracking branch 'origin/5.12' into 5.13
* origin/5.12:
8d82e92 Parse individual demo.xml files
Change-Id: Ifb675485bf4ae14390a1ef0641ac23107f67d633
-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 |