diff options
author | Katja Marttila <katja.marttila@qt.io> | 2020-11-19 07:25:01 +0200 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2020-12-07 07:36:36 +0200 |
commit | e82ab45ed71d9b807dc23eae559c759f4584b79d (patch) | |
tree | 1ff8a7379a7c0fbd1908783404babd9b83e4d414 /src/libs/kdtools | |
parent | b43ab89a64c6484a8af4be424ab695b956d7f7bc (diff) |
Add option to define operations in component.xml
Operations can from now on be declared also in component.xml. The
operations are performed, backuped and rollbacked the same way as they
would be when defined from scripting api.
Task-number: QTIFW-507
Change-Id: Ia509219b94737136c3de25db0cb0c72076b48380
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'src/libs/kdtools')
-rw-r--r-- | src/libs/kdtools/updatesinfo.cpp | 30 | ||||
-rw-r--r-- | src/libs/kdtools/updatesinfodata_p.h | 2 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/libs/kdtools/updatesinfo.cpp b/src/libs/kdtools/updatesinfo.cpp index 2d7e001ea..3119b6240 100644 --- a/src/libs/kdtools/updatesinfo.cpp +++ b/src/libs/kdtools/updatesinfo.cpp @@ -154,6 +154,10 @@ bool UpdatesInfoData::parsePackageUpdateElement(const QDomElement &updateE) } else if (childE.tagName() == QLatin1String("UpdateFile")) { info.data[QLatin1String("CompressedSize")] = childE.attribute(QLatin1String("CompressedSize")); info.data[QLatin1String("UncompressedSize")] = childE.attribute(QLatin1String("UncompressedSize")); + } else if (childE.tagName() == QLatin1String("Operations")) { + const QDomNodeList operationNodes = childE.childNodes(); + QVariant operationListVariant = parseOperations(childE.childNodes()); + info.data.insert(QLatin1String("Operations"), operationListVariant); } else { info.data[childE.tagName()] = childE.text(); } @@ -197,6 +201,32 @@ void UpdatesInfoData::processLocalizedTag(const QDomElement &childE, QHash<QStri info[childE.tagName()] = childE.text(); } +QVariant UpdatesInfoData::parseOperations(const QDomNodeList &operationNodes) +{ + QVariant operationListVariant; + QList<QPair<QString, QVariant>> operationsList; + for (int i = 0; i < operationNodes.count(); ++i) { + const QDomNode operationNode = operationNodes.at(i); + if (operationNode.nodeName() == QLatin1String("Operation")) { + const QDomNodeList argumentNodes = operationNode.childNodes(); + QStringList attributes; + for (int i = 0; i < argumentNodes.count(); ++i) { + const QDomNode argumentNode = argumentNodes.at(i); + if (argumentNode.nodeName() == QLatin1String("Argument")) { + QDomElement argumentElement = argumentNode.toElement(); + attributes.append(argumentElement.text()); + } + } + QPair<QString, QVariant> pair; + pair.first = operationNode.toElement().attributeNode(QLatin1String("name")).value(); + pair.second = attributes; + operationsList.append(pair); + } + } + operationListVariant.setValue(operationsList); + return operationListVariant; +} + // // UpdatesInfo diff --git a/src/libs/kdtools/updatesinfodata_p.h b/src/libs/kdtools/updatesinfodata_p.h index 69b004bc3..07da6fcf0 100644 --- a/src/libs/kdtools/updatesinfodata_p.h +++ b/src/libs/kdtools/updatesinfodata_p.h @@ -33,6 +33,7 @@ #include <QSharedData> QT_FORWARD_DECLARE_CLASS(QDomElement) +QT_FORWARD_DECLARE_CLASS(QDomNodeList) namespace KDUpdater { @@ -60,6 +61,7 @@ public: private: void processLocalizedTag(const QDomElement &childE, QHash<QString, QVariant> &info) const; + QVariant parseOperations(const QDomNodeList &operationNodes); }; } // namespace KDUpdater |