File indexing completed on 2024-04-28 11:44:19

0001 /*
0002     SPDX-FileCopyrightText: 2022 Alexander Lohnau <alexander.lohnau@gmx.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <KAboutData>
0008 #include <KConfigGroup>
0009 #include <KDesktopFile>
0010 #include <KPluginMetaData>
0011 #include <QJsonArray>
0012 #include <QJsonObject>
0013 #include <QString>
0014 
0015 template<class T = QString>
0016 inline void copyIfExists(const KConfigGroup &grp, QJsonObject &obj, const char *key, const T &t = QString())
0017 {
0018     copyAndRenameIfExists(grp, obj, key, key, t);
0019 }
0020 
0021 template<class T>
0022 inline void copyAndRenameIfExists(const KConfigGroup &grp, QJsonObject &obj, const char *oldKey, const char *key, const T &t)
0023 {
0024     if (grp.hasKey(oldKey)) {
0025         obj.insert(QLatin1String(key), grp.readEntry(oldKey, t));
0026     }
0027 }
0028 inline KPluginMetaData parseMetaDataFromDesktopFile(const QString &fileName)
0029 {
0030     KDesktopFile file(fileName);
0031     const KConfigGroup grp = file.desktopGroup();
0032 
0033     QJsonObject kplugin;
0034     copyIfExists(grp, kplugin, "Name");
0035     copyIfExists(grp, kplugin, "Icon");
0036     copyAndRenameIfExists(grp, kplugin, "X-KDE-PluginInfo-Name", "Id", QString());
0037     copyIfExists(grp, kplugin, "Description");
0038     copyAndRenameIfExists(grp, kplugin, "Comment", "Description", QString());
0039     copyAndRenameIfExists(grp, kplugin, "X-KDE-PluginInfo-EnabledByDefault", "EnabledByDefault", false);
0040     QJsonObject root;
0041     root.insert(QLatin1String("KPlugin"), kplugin);
0042 
0043     copyIfExists(grp, root, "X-Plasma-DBusRunner-Service");
0044     copyIfExists(grp, root, "X-Plasma-DBusRunner-Path");
0045     copyIfExists(grp, root, "X-Plasma-Runner-Unique-Results", false);
0046     copyIfExists(grp, root, "X-Plasma-Runner-Weak-Results", false);
0047     copyIfExists(grp, root, "X-Plasma-API");
0048     copyIfExists(grp, root, "X-Plasma-Request-Actions-Once", false);
0049     copyIfExists(grp, root, "X-Plasma-AdvertiseSingleRunnerQueryMode", false);
0050     copyIfExists(grp, root, "X-Plasma-Runner-Min-Letter-Count", 0);
0051     copyIfExists(grp, root, "X-Plasma-Runner-Match-Regex");
0052     root.insert(QLatin1String("X-Plasma-Runner-Syntaxes"), QJsonArray::fromStringList(grp.readEntry("X-Plasma-Runner-Syntaxes", QStringList())));
0053     root.insert(QLatin1String("X-Plasma-Runner-Syntax-Descriptions"),
0054                 QJsonArray::fromStringList(grp.readEntry("X-Plasma-Runner-Syntax-Descriptions", QStringList())));
0055     QJsonObject author;
0056     author.insert(QLatin1String("Name"), grp.readEntry("X-KDE-PluginInfo-Author"));
0057     author.insert(QLatin1String("Email"), grp.readEntry("X-KDE-PluginInfo-Email"));
0058     author.insert(QLatin1String("Website"), grp.readEntry("X-KDE-PluginInfo-Website"));
0059 
0060     return KPluginMetaData(root, fileName);
0061 }