File indexing completed on 2024-05-05 05:50:42

0001 /*
0002     SPDX-FileCopyrightText: 2016 Elvis Angelaccio <elvis.angelaccio@kde.org>
0003 
0004     SPDX-License-Identifier: BSD-2-Clause
0005 */
0006 
0007 #include "plugin.h"
0008 #include "ark_debug.h"
0009 
0010 #include <QJsonArray>
0011 #include <QStandardPaths>
0012 
0013 namespace Kerfuffle
0014 {
0015 Plugin::Plugin(QObject *parent, const KPluginMetaData &metaData)
0016     : QObject(parent)
0017     , m_enabled(true)
0018     , m_metaData(metaData)
0019 {
0020 }
0021 
0022 int Plugin::priority() const
0023 {
0024     const int priority = m_metaData.rawData()[QStringLiteral("X-KDE-Priority")].toInt();
0025     return (priority > 0 ? priority : 0);
0026 }
0027 
0028 bool Plugin::isEnabled() const
0029 {
0030     return m_enabled;
0031 }
0032 
0033 void Plugin::setEnabled(bool enabled)
0034 {
0035     m_enabled = enabled;
0036     Q_EMIT enabledChanged();
0037 }
0038 
0039 bool Plugin::isReadWrite() const
0040 {
0041     const bool isDeclaredReadWrite = m_metaData.rawData()[QStringLiteral("X-KDE-Kerfuffle-ReadWrite")].toBool();
0042     return isDeclaredReadWrite && findExecutables(readWriteExecutables());
0043 }
0044 
0045 QStringList Plugin::readOnlyExecutables() const
0046 {
0047     QStringList readOnlyExecutables;
0048 
0049     const QJsonArray array = m_metaData.rawData()[QStringLiteral("X-KDE-Kerfuffle-ReadOnlyExecutables")].toArray();
0050     for (const QJsonValue &value : array) {
0051         readOnlyExecutables << value.toString();
0052     }
0053 
0054     return readOnlyExecutables;
0055 }
0056 
0057 QStringList Plugin::readWriteExecutables() const
0058 {
0059     QStringList readWriteExecutables;
0060 
0061     const QJsonArray array = m_metaData.rawData()[QStringLiteral("X-KDE-Kerfuffle-ReadWriteExecutables")].toArray();
0062     for (const QJsonValue &value : array) {
0063         readWriteExecutables << value.toString();
0064     }
0065 
0066     return readWriteExecutables;
0067 }
0068 
0069 KPluginMetaData Plugin::metaData() const
0070 {
0071     return m_metaData;
0072 }
0073 
0074 bool Plugin::hasRequiredExecutables() const
0075 {
0076     return findExecutables(readOnlyExecutables());
0077 }
0078 
0079 bool Plugin::isValid() const
0080 {
0081     return isEnabled() && m_metaData.isValid() && hasRequiredExecutables();
0082 }
0083 
0084 bool Plugin::findExecutables(const QStringList &executables)
0085 {
0086     for (const QString &executable : executables) {
0087         if (executable.isEmpty()) {
0088             continue;
0089         }
0090 
0091         if (QStandardPaths::findExecutable(executable).isEmpty()) {
0092             return false;
0093         }
0094     }
0095 
0096     return true;
0097 }
0098 
0099 }
0100 
0101 #include "moc_plugin.cpp"