File indexing completed on 2024-05-26 05:56:49

0001 /*
0002     This file is part of the Okteta Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2022 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "structuremetadata.hpp"
0010 
0011 // tool
0012 #include <structureslogging.hpp>
0013 // KF
0014 #include <KDesktopFile>
0015 #include <KConfigGroup>
0016 #include <KAboutData>
0017 // Qt
0018 #include <QSharedData>
0019 
0020 class StructureMetaDataPrivsate : public QSharedData
0021 {
0022 public:
0023     StructureMetaDataPrivsate();
0024 
0025 public:
0026     QString id;
0027     QString name;
0028     QString comment;
0029     QString categoryId;
0030     QString version;
0031     QString authorName;
0032     QString authorEmailAddress;
0033     QString iconName;
0034     QString website;
0035     QString entryPath;
0036 
0037     KAboutLicense license;
0038 };
0039 
0040 StructureMetaDataPrivsate::StructureMetaDataPrivsate() = default;
0041 
0042 
0043 StructureMetaData::StructureMetaData(const QString& filename)
0044     : d(new StructureMetaDataPrivsate)
0045 {
0046     KDesktopFile file(filename);
0047 
0048     KConfigGroup cg = file.desktopGroup();
0049     if (!cg.exists()) {
0050         qCWarning(LOG_KASTEN_OKTETA_CONTROLLERS_STRUCTURES) << filename << "has no [Desktop] group, cannot construct a StructureMetaData object from it.";
0051         return;
0052     }
0053     d->id = cg.readEntryUntranslated("X-KDE-PluginInfo-Name");
0054     if (d->id.isEmpty()) {
0055         qCWarning(LOG_KASTEN_OKTETA_CONTROLLERS_STRUCTURES) << filename << "has an empty X-KDE-PluginInfo-Name entry, cannot construct a StructureMetaData object from it.";
0056         return;
0057     }
0058 
0059     d->entryPath = filename;
0060 
0061     d->name = file.readName();
0062     d->comment = file.readComment();
0063     d->iconName = cg.readEntryUntranslated("Icon");
0064     d->authorName = cg.readEntryUntranslated("X-KDE-PluginInfo-Author");
0065     d->authorEmailAddress = cg.readEntryUntranslated("X-KDE-PluginInfo-Email");
0066     d->version = cg.readEntryUntranslated("X-KDE-PluginInfo-Version");
0067     d->website = cg.readEntryUntranslated("X-KDE-PluginInfo-Website");
0068     d->categoryId = cg.readEntryUntranslated("X-KDE-PluginInfo-Category");
0069     d->license = KAboutLicense::byKeyword(cg.readEntryUntranslated("X-KDE-PluginInfo-License"));
0070 }
0071 
0072 StructureMetaData::StructureMetaData()
0073     : d(new StructureMetaDataPrivsate())
0074 {
0075 }
0076 
0077 
0078 StructureMetaData::StructureMetaData(const StructureMetaData &rhs) = default;
0079 
0080 StructureMetaData::~StructureMetaData() = default;
0081 
0082 StructureMetaData& StructureMetaData::operator=(const StructureMetaData& rhs) = default;
0083 
0084 bool StructureMetaData::isValid() const
0085 {
0086     return !d->id.isEmpty();
0087 }
0088 
0089 QString StructureMetaData::id() const
0090 {
0091     return d->id;
0092 }
0093 
0094 QString StructureMetaData::name() const
0095 {
0096     return d->name;
0097 }
0098 
0099 QString StructureMetaData::comment() const
0100 {
0101     return d->comment;
0102 }
0103 
0104 QString StructureMetaData::categoryId() const
0105 {
0106     return d->categoryId;
0107 }
0108 
0109 QString StructureMetaData::version() const
0110 {
0111     return d->version;
0112 }
0113 
0114 bool StructureMetaData::hasAuthorName() const
0115 {
0116     return !d->authorName.isEmpty();
0117 }
0118 
0119 QString StructureMetaData::authorName() const
0120 {
0121     return d->authorName;
0122 }
0123 
0124 bool StructureMetaData::hasAuthorEmailAddress() const
0125 {
0126     return !d->authorEmailAddress.isEmpty();
0127 }
0128 
0129 QString StructureMetaData::authorEmailAddress() const
0130 {
0131     return d->authorEmailAddress;
0132 }
0133 
0134 bool StructureMetaData::hasIconName() const
0135 {
0136     return !d->iconName.isEmpty();
0137 }
0138 
0139 QString StructureMetaData::iconName() const
0140 {
0141     return d->iconName;
0142 }
0143 
0144 bool StructureMetaData::hasWebsite() const
0145 {
0146     return !d->website.isEmpty();
0147 }
0148 
0149 QString StructureMetaData::website() const
0150 {
0151     return d->website;
0152 }
0153 
0154 QString StructureMetaData::entryPath() const
0155 {
0156     return d->entryPath;
0157 }
0158 
0159 const KAboutLicense& StructureMetaData::license() const
0160 {
0161     return d->license;
0162 }