diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp index 26e2d2c455b..5f3b46b7dcc 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.cpp @@ -25,7 +25,6 @@ #include "assetexporter.h" #include "componentexporter.h" #include "exportnotification.h" -#include "assetexportpluginconstants.h" #include "rewriterview.h" #include "qmlitemnode.h" @@ -141,12 +140,9 @@ bool AssetExporter::isBusy() const m_currentState == AssetExporter::ParsingState::WritingJson; } -Utils::FilePath AssetExporter::exportAsset(const QmlObjectNode &node) +Utils::FilePath AssetExporter::exportAsset(const QmlObjectNode &node, const QString &uuid) { - // TODO: Use this hash as UUID and add to the node. - QByteArray hash = addNodeUUID(node.modelNode()); - Utils::FilePath assetPath = m_exportPath.pathAppended(QString("assets/%1.png") - .arg(QString::fromLatin1(hash))); + Utils::FilePath assetPath = m_exportPath.pathAppended(QString("assets/%1.png").arg(uuid)); m_assetDumper->dumpAsset(node.toQmlItemNode().instanceRenderPixmap(), assetPath); return assetPath; } @@ -194,19 +190,13 @@ void AssetExporter::onQmlFileLoaded() triggerLoadNextFile(); } -QByteArray AssetExporter::addNodeUUID(ModelNode node) +QByteArray AssetExporter::generateUuid(const ModelNode &node) { - QByteArray uuid = node.auxiliaryData(Constants::UuidTag).toByteArray(); - qDebug() << node.id() << "UUID" << uuid; - if (uuid.isEmpty()) { - // Assign a new hash. - do { - uuid = generateHash(node.id()); - } while (m_usedHashes.contains(uuid)); - m_usedHashes.insert(uuid); - node.setAuxiliaryData(Constants::UuidAuxTag, QString::fromLatin1(uuid)); - node.model()->rewriterView()->writeAuxiliaryData(); - } + QByteArray uuid; + do { + uuid = generateHash(node.id()); + } while (m_usedHashes.contains(uuid)); + m_usedHashes.insert(uuid); return uuid; } diff --git a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.h b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.h index 2aa238fb327..377142a16c0 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/assetexporter.h +++ b/src/plugins/qmldesigner/assetexporterplugin/assetexporter.h @@ -70,7 +70,8 @@ public: void cancel(); bool isBusy() const; - Utils::FilePath exportAsset(const QmlObjectNode& node); + Utils::FilePath exportAsset(const QmlObjectNode& node, const QString &uuid); + QByteArray generateUuid(const ModelNode &node); signals: void stateChanged(ParsingState); @@ -87,8 +88,6 @@ private: void onQmlFileLoaded(); - QByteArray addNodeUUID(ModelNode node); - private: mutable class State { public: diff --git a/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp b/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp index 819fa3d328f..b661830b266 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/componentexporter.cpp @@ -23,6 +23,8 @@ ** ****************************************************************************/ #include "componentexporter.h" +#include "assetexporter.h" +#include "assetexportpluginconstants.h" #include "parsers/modelnodeparser.h" #include "model.h" @@ -102,8 +104,15 @@ QJsonObject Component::nodeToJson(const ModelNode &node) { QJsonObject jsonObject; std::unique_ptr parser(createNodeParser(node)); - if (parser) + if (parser) { + if (parser->uuid().isEmpty()) { + // Assign an unique identifier to the node. + QByteArray uuid = m_exporter.generateUuid(node); + node.setAuxiliaryData(Constants::UuidAuxTag, QString::fromLatin1(uuid)); + node.model()->rewriterView()->writeAuxiliaryData(); + } jsonObject = parser->json(*this); + } QJsonArray children; for (const ModelNode &childnode : node.directSubModelNodes()) diff --git a/src/plugins/qmldesigner/assetexporterplugin/parsers/assetnodeparser.cpp b/src/plugins/qmldesigner/assetexporterplugin/parsers/assetnodeparser.cpp index 159eccec460..a42b7300624 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/parsers/assetnodeparser.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/parsers/assetnodeparser.cpp @@ -55,8 +55,7 @@ QJsonObject AssetNodeParser::json(Component &component) const QJsonObject jsonObject = ItemNodeParser::json(component); QPixmap asset = objectNode().toQmlItemNode().instanceRenderPixmap(); - Utils::FilePath assetPath = component.exporter().exportAsset(objectNode()); - + Utils::FilePath assetPath = component.exporter().exportAsset(objectNode(), uuid()); QJsonObject assetData; assetData.insert(AssetPathTag, assetPath.toString()); jsonObject.insert(AssetDataTag, assetData); diff --git a/src/plugins/qmldesigner/assetexporterplugin/parsers/modelitemnodeparser.cpp b/src/plugins/qmldesigner/assetexporterplugin/parsers/modelitemnodeparser.cpp index 355983f2215..0ed6cd74916 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/parsers/modelitemnodeparser.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/parsers/modelitemnodeparser.cpp @@ -60,6 +60,7 @@ QJsonObject QmlDesigner::ItemNodeParser::json(QmlDesigner::Component &component) jsonObject.insert(WidthTag, size.width()); jsonObject.insert(HeightTag, size.height()); + jsonObject.insert(UuidTag, uuid()); return jsonObject; } } diff --git a/src/plugins/qmldesigner/assetexporterplugin/parsers/modelnodeparser.cpp b/src/plugins/qmldesigner/assetexporterplugin/parsers/modelnodeparser.cpp index 31787b83cc3..d9cb9b61781 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/parsers/modelnodeparser.cpp +++ b/src/plugins/qmldesigner/assetexporterplugin/parsers/modelnodeparser.cpp @@ -23,6 +23,7 @@ ** ****************************************************************************/ #include "modelnodeparser.h" +#include "assetexportpluginconstants.h" namespace QmlDesigner { ModelNodeParser::ModelNodeParser(const QByteArrayList &lineage, const ModelNode &node) : @@ -38,4 +39,9 @@ QVariant ModelNodeParser::propertyValue(const PropertyName &name) const return m_objectNode.instanceValue(name); } +QString ModelNodeParser::uuid() const +{ + return m_node.auxiliaryData(Constants::UuidAuxTag).toString(); +} + } diff --git a/src/plugins/qmldesigner/assetexporterplugin/parsers/modelnodeparser.h b/src/plugins/qmldesigner/assetexporterplugin/parsers/modelnodeparser.h index 4ca17746e8d..c91b2eae022 100644 --- a/src/plugins/qmldesigner/assetexporterplugin/parsers/modelnodeparser.h +++ b/src/plugins/qmldesigner/assetexporterplugin/parsers/modelnodeparser.h @@ -47,6 +47,7 @@ public: const QByteArrayList& lineage() const { return m_lineage; } const QmlObjectNode& objectNode() const { return m_objectNode; } QVariant propertyValue(const PropertyName &name) const; + QString uuid() const; protected: const ModelNode &m_node;