diff options
Diffstat (limited to 'src/tools/qml2puppet/qml2puppet/import3d/import3d.cpp')
-rw-r--r-- | src/tools/qml2puppet/qml2puppet/import3d/import3d.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/tools/qml2puppet/qml2puppet/import3d/import3d.cpp b/src/tools/qml2puppet/qml2puppet/import3d/import3d.cpp new file mode 100644 index 0000000000..70857065ee --- /dev/null +++ b/src/tools/qml2puppet/qml2puppet/import3d/import3d.cpp @@ -0,0 +1,65 @@ +// Copyright (C) 2021 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0 + +#include "import3d.h" + +#ifdef IMPORT_QUICK3D_ASSETS +#include <QtQuick3DAssetImport/private/qssgassetimportmanager_p.h> +#endif + +#include <QCoreApplication> +#include <QDebug> +#include <QFile> +#include <QJsonDocument> +#include <QJsonObject> +#include <QScopedPointer> +#include <QTextStream> +#include <QTimer> + +namespace Import3D +{ + +void import3D([[maybe_unused]] const QString &sourceAsset, + [[maybe_unused]] const QString &outDir, + [[maybe_unused]] const QString &options) +{ + QString errorStr; +#ifdef IMPORT_QUICK3D_ASSETS + QScopedPointer importer {new QSSGAssetImportManager}; + + QJsonParseError error; + QJsonDocument optDoc = QJsonDocument::fromJson(options.toUtf8(), &error); + + if (!optDoc.isNull() && optDoc.isObject()) { + QJsonObject optObj = optDoc.object(); +#if (QT_VERSION >= QT_VERSION_CHECK(6, 4, 0)) + const auto &optionsMap = optObj; +#else + const auto optionsMap = optObj.toVariantMap(); +#endif // QT_VERSION >= 6.4.0 + if (importer->importFile(sourceAsset, outDir, optionsMap, &errorStr) + != QSSGAssetImportManager::ImportState::Success) { + } + } else { + errorStr = QObject::tr("Failed to parse import options: %1").arg(error.errorString()); + } +#endif + if (!errorStr.isEmpty()) { + qWarning() << __FUNCTION__ << "Failed to import asset:" << errorStr << outDir; + + // Write the error into a file in outDir to pass it to creator side + QString errorFileName = outDir + "/__error.log"; + QFile file(errorFileName); + if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + QTextStream out(&file); + out << errorStr; + file.close(); + } + } + + QTimer::singleShot(0, nullptr, []() { + qApp->quit(); + }); +} + +} |