Warning, file /network/kdeconnect-kde/interfaces/pluginmodel.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /** 0002 * SPDX-FileCopyrightText: 2019 Nicolas Fella <nicolas.fella@gmx.de> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "pluginmodel.h" 0008 0009 #include <QDebug> 0010 0011 #include <KConfigGroup> 0012 #include <KPluginLoader> 0013 0014 PluginModel::PluginModel(QObject *parent) 0015 : QAbstractListModel(parent) 0016 { 0017 connect(this, &QAbstractItemModel::rowsInserted, this, &PluginModel::rowsChanged); 0018 connect(this, &QAbstractItemModel::rowsRemoved, this, &PluginModel::rowsChanged); 0019 0020 beginResetModel(); 0021 m_plugins = KPluginLoader::findPlugins(QStringLiteral("kdeconnect/")); 0022 endResetModel(); 0023 } 0024 0025 PluginModel::~PluginModel() 0026 { 0027 } 0028 0029 void PluginModel::setDeviceId(const QString &deviceId) 0030 { 0031 if (deviceId == m_deviceId) 0032 return; 0033 0034 m_deviceId = deviceId; 0035 DeviceDbusInterface *device = new DeviceDbusInterface(m_deviceId); 0036 m_config = KSharedConfig::openConfig(device->pluginsConfigFile()); 0037 } 0038 0039 QVariant PluginModel::data(const QModelIndex &index, int role) const 0040 { 0041 if (!index.isValid()) { 0042 return QVariant(); 0043 } 0044 0045 const KPluginMetaData &pluginEntry = m_plugins[index.row()]; 0046 0047 switch (role) { 0048 case Qt::CheckStateRole: { 0049 const QString def = pluginEntry.isEnabledByDefault() ? QStringLiteral("true") : QStringLiteral("false"); 0050 return m_config->group("Plugins").readEntry(QStringLiteral("%1Enabled").arg(pluginEntry.pluginId()), def) == QStringLiteral("true"); 0051 } 0052 case Qt::DisplayRole: 0053 return pluginEntry.name(); 0054 case IconRole: 0055 return pluginEntry.iconName(); 0056 case IdRole: 0057 return pluginEntry.pluginId(); 0058 case ConfigSourceRole: { 0059 const QString configFile = 0060 QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kdeconnect/%1_config.qml").arg(pluginEntry.pluginId())); 0061 if (configFile.isEmpty()) 0062 return QUrl(); 0063 0064 return QUrl::fromLocalFile(configFile); 0065 } 0066 case DescriptionRole: 0067 return pluginEntry.description(); 0068 default: 0069 return QVariant(); 0070 } 0071 } 0072 0073 QHash<int, QByteArray> PluginModel::roleNames() const 0074 { 0075 QHash<int, QByteArray> roles = QAbstractItemModel::roleNames(); 0076 roles[Qt::DisplayRole] = "name"; 0077 roles[Qt::CheckStateRole] = "isChecked"; 0078 roles[IconRole] = "iconName"; 0079 roles[IdRole] = "pluginId"; 0080 roles[ConfigSourceRole] = "configSource"; 0081 roles[DescriptionRole] = "description"; 0082 return roles; 0083 } 0084 0085 bool PluginModel::setData(const QModelIndex &index, const QVariant &value, int role) 0086 { 0087 if (!index.isValid()) { 0088 return false; 0089 } 0090 0091 bool ret = false; 0092 0093 if (role == Qt::CheckStateRole) { 0094 const KPluginMetaData &pluginEntry = m_plugins[index.row()]; 0095 m_config->group("Plugins").writeEntry(QStringLiteral("%1Enabled").arg(pluginEntry.pluginId()), value); 0096 ret = true; 0097 } 0098 0099 m_config->sync(); 0100 0101 if (ret) { 0102 Q_EMIT dataChanged(index, index); 0103 } 0104 0105 return ret; 0106 } 0107 0108 int PluginModel::rowCount(const QModelIndex &parent) const 0109 { 0110 if (parent.isValid()) { 0111 return 0; 0112 } 0113 0114 return m_plugins.size(); 0115 } 0116 0117 QString PluginModel::deviceId() 0118 { 0119 return m_deviceId; 0120 }