| 1 | /* |
| 2 | SPDX-FileCopyrightText: 2022 Alexander Lohnau <alexander.lohnau@gmx.de> |
| 3 | |
| 4 | SPDX-License-Identifier: LGPL-2.0-or-later |
| 5 | */ |
| 6 | |
| 7 | #include <KConfigGroup> |
| 8 | #include <KDesktopFile> |
| 9 | #include <KPluginMetaData> |
| 10 | #include <QJsonArray> |
| 11 | #include <QJsonObject> |
| 12 | #include <QString> |
| 13 | |
| 14 | template<class T = QString> |
| 15 | inline void copyIfExists(const KConfigGroup &grp, QJsonObject &obj, const char *key, const T &t = QString()) |
| 16 | { |
| 17 | copyAndRenameIfExists(grp, obj, key, key, t); |
| 18 | } |
| 19 | |
| 20 | template<class T> |
| 21 | inline void copyAndRenameIfExists(const KConfigGroup &grp, QJsonObject &obj, const char *oldKey, const char *key, const T &t) |
| 22 | { |
| 23 | if (grp.hasKey(key: oldKey)) { |
| 24 | obj.insert(QLatin1String(key), grp.readEntry(oldKey, t)); |
| 25 | } |
| 26 | } |
| 27 | inline KPluginMetaData parseMetaDataFromDesktopFile(const QString &fileName) |
| 28 | { |
| 29 | KDesktopFile file(fileName); |
| 30 | const KConfigGroup grp = file.desktopGroup(); |
| 31 | |
| 32 | QJsonObject kplugin; |
| 33 | copyIfExists(grp, obj&: kplugin, key: "Name" ); |
| 34 | copyIfExists(grp, obj&: kplugin, key: "Icon" ); |
| 35 | copyAndRenameIfExists(grp, obj&: kplugin, oldKey: "X-KDE-PluginInfo-Name" , key: "Id" , t: QString()); |
| 36 | copyAndRenameIfExists(grp, obj&: kplugin, oldKey: "Comment" , key: "Description" , t: QString()); |
| 37 | copyAndRenameIfExists(grp, obj&: kplugin, oldKey: "X-KDE-PluginInfo-EnabledByDefault" , key: "EnabledByDefault" , t: false); |
| 38 | QJsonObject root; |
| 39 | root.insert(key: QLatin1String("KPlugin" ), value: kplugin); |
| 40 | |
| 41 | copyIfExists(grp, obj&: root, key: "X-Plasma-DBusRunner-Service" ); |
| 42 | copyIfExists(grp, obj&: root, key: "X-Plasma-DBusRunner-Path" ); |
| 43 | copyIfExists(grp, obj&: root, key: "X-Plasma-Runner-Unique-Results" , t: false); |
| 44 | copyIfExists(grp, obj&: root, key: "X-Plasma-Runner-Weak-Results" , t: false); |
| 45 | copyIfExists(grp, obj&: root, key: "X-Plasma-API" ); |
| 46 | copyIfExists(grp, obj&: root, key: "X-Plasma-Request-Actions-Once" , t: false); |
| 47 | copyIfExists(grp, obj&: root, key: "X-Plasma-Runner-Min-Letter-Count" , t: 0); |
| 48 | copyIfExists(grp, obj&: root, key: "X-Plasma-Runner-Match-Regex" ); |
| 49 | copyIfExists(grp, obj&: root, key: "X-KDE-ConfigModule" ); // DBus-Runners may also specify KCMs |
| 50 | root.insert(key: QLatin1String("X-Plasma-Runner-Syntaxes" ), value: QJsonArray::fromStringList(list: grp.readEntry(key: "X-Plasma-Runner-Syntaxes" , aDefault: QStringList()))); |
| 51 | root.insert(key: QLatin1String("X-Plasma-Runner-Syntax-Descriptions" ), |
| 52 | value: QJsonArray::fromStringList(list: grp.readEntry(key: "X-Plasma-Runner-Syntax-Descriptions" , aDefault: QStringList()))); |
| 53 | QJsonObject author; |
| 54 | author.insert(key: QLatin1String("Name" ), value: grp.readEntry(key: "X-KDE-PluginInfo-Author" )); |
| 55 | author.insert(key: QLatin1String("Email" ), value: grp.readEntry(key: "X-KDE-PluginInfo-Email" )); |
| 56 | author.insert(key: QLatin1String("Website" ), value: grp.readEntry(key: "X-KDE-PluginInfo-Website" )); |
| 57 | |
| 58 | return KPluginMetaData(root, fileName); |
| 59 | } |
| 60 | |