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 }