aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2022-03-22 10:01:55 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2022-03-22 14:39:27 +0000
commitfe711ebce43d389157cf68d0c42fb0ab06270533 (patch)
tree340db2bbef23f4921bb0259faac9e6e19a3b3fbe
parent635d6bab0fb28251a02cb8da4fd7ea320c5a52d4 (diff)
QmlDesigner: Parse .metainfo files from the share folder
We have some plugins that essentially only contain a .metainfo file. the possibility to drop .metainfo files into that folder simplifies things. In QDS 3.2 this will be used for the particle library. Change-Id: I0c4bb7f66bb8eaa3f806ec9d34c6991d08ef5a5f Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r--src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp
index c49a8c5035..322adb7b4c 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/metainfo.cpp
@@ -30,10 +30,16 @@
#include "iwidgetplugin.h"
#include <coreplugin/messagebox.h>
+#include <coreplugin/icore.h>
+
+#include <utils/filepath.h>
+
#include "pluginmanager/widgetpluginmanager.h"
#include <QDebug>
#include <QMessageBox>
+#include <QDir>
+#include <QDirIterator>
#include <QMutex>
enum {
@@ -43,6 +49,30 @@ enum {
namespace QmlDesigner {
namespace Internal {
+
+static QString globalMetaInfoPath()
+{
+#ifdef SHARE_QML_PATH
+ if (qEnvironmentVariableIsSet("LOAD_QML_FROM_SOURCE"))
+ return QLatin1String(SHARE_QML_PATH) + "/globalMetaInfo";
+#endif
+ return Core::ICore::resourcePath("qmldesigner/globalMetaInfo").toString();
+}
+
+Utils::FilePaths allGlobalMetaInfoFiles()
+{
+ static Utils::FilePaths paths;
+
+ if (!paths.isEmpty())
+ return paths;
+
+ QDirIterator it(globalMetaInfoPath(), { "*.metainfo" }, QDir::Files, QDirIterator::Subdirectories);
+ while (it.hasNext())
+ paths.append(Utils::FilePath::fromString(it.next()));
+
+ return paths;
+}
+
class MetaInfoPrivate
{
Q_DISABLE_COPY(MetaInfoPrivate)
@@ -99,6 +129,19 @@ void MetaInfoPrivate::parseItemLibraryDescriptions()
errorMessage);
}
}
+
+ const Utils::FilePaths allMetaInfoFiles = allGlobalMetaInfoFiles();
+ for (const Utils::FilePath &path : allMetaInfoFiles) {
+ Internal::MetaInfoReader reader(*m_q);
+ try {
+ reader.readMetaInfoFile(path.toString());
+ } catch (const InvalidMetaInfoException &e) {
+ qWarning() << e.description();
+ const QString errorMessage = path.toString() + QLatin1Char('\n') + QLatin1Char('\n') + reader.errors().join(QLatin1Char('\n'));
+ Core::AsynchronousMessageBox::warning(QCoreApplication::translate("QmlDesigner::Internal::MetaInfoPrivate", "Invalid meta info"),
+ errorMessage);
+ }
+ }
#endif
}