File indexing completed on 2024-04-21 04:00:34
0001 /* 0002 SPDX-FileCopyrightText: 2015 Aleix Pol Gonzalez <aleixpol@blue-systems.com> 0003 0004 SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include "helper.h" 0008 #include <QDebug> 0009 #include <QDir> 0010 #include <QFile> 0011 #include <QFileInfo> 0012 #include <QJsonDocument> 0013 #include <QStandardPaths> 0014 0015 using namespace Purpose; 0016 0017 QJsonObject Purpose::readPluginType(const QString &pluginType) 0018 { 0019 const QString lookup = QStringLiteral("purpose/types/") + pluginType + QStringLiteral("PluginType.json"); 0020 0021 QString path = QStringLiteral(":/") + lookup; 0022 if (!QFileInfo::exists(path)) { 0023 path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, lookup); 0024 if (path.isEmpty()) { 0025 qWarning() << "Couldn't find" << lookup << QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); 0026 return QJsonObject(); 0027 } 0028 } 0029 QFile typeFile(path); 0030 if (!typeFile.open(QFile::ReadOnly)) { 0031 qWarning() << "Couldn't open" << lookup; 0032 return QJsonObject(); 0033 } 0034 0035 QJsonParseError error; 0036 QJsonDocument doc = QJsonDocument::fromJson(typeFile.readAll(), &error); 0037 if (error.error) { 0038 qWarning() << "JSON error in " << path << error.offset << ":" << error.errorString(); 0039 return QJsonObject(); 0040 } 0041 0042 Q_ASSERT(doc.isObject()); 0043 return doc.object(); 0044 } 0045 0046 KPluginMetaData Purpose::createMetaData(const QString &file) 0047 { 0048 const QFileInfo fi(file); 0049 const QString fileName = fi.absoluteFilePath(); 0050 QJsonObject metaData; 0051 0052 QFile f(fileName); 0053 if (f.open(QIODevice::ReadOnly)) { 0054 const QJsonDocument doc = QJsonDocument::fromJson(f.readAll()); 0055 metaData = doc.object(); 0056 } 0057 0058 QDir dir = fi.dir().filePath(QStringLiteral("contents/code")); 0059 QStringList mainFile = dir.entryList({QStringLiteral("main.*")}, QDir::Files); 0060 if (mainFile.isEmpty()) { 0061 qWarning() << "no main file for" << file; 0062 return KPluginMetaData(); 0063 } 0064 0065 auto info = KPluginMetaData(metaData, dir.absoluteFilePath(mainFile.first())); 0066 Q_ASSERT(info.isValid() && !info.rawData().isEmpty()); 0067 return info; 0068 }