File indexing completed on 2024-04-21 04:56:45
0001 /** 0002 * SPDX-FileCopyrightText: 2015 Albert Vaca <albertvaka@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "kdeconnectpluginconfig.h" 0008 0009 #include <QDBusConnection> 0010 #include <QDBusMessage> 0011 #include <QDebug> 0012 #include <QDir> 0013 #include <QSettings> 0014 0015 #include "dbushelper.h" 0016 #include "kdeconnectconfig.h" 0017 0018 struct KdeConnectPluginConfigPrivate { 0019 QDir m_configDir; 0020 QSettings *m_config; 0021 QDBusMessage m_signal; 0022 }; 0023 0024 KdeConnectPluginConfig::KdeConnectPluginConfig(QObject *parent) 0025 : QObject(parent) 0026 , d(new KdeConnectPluginConfigPrivate()) 0027 { 0028 } 0029 0030 KdeConnectPluginConfig::KdeConnectPluginConfig(const QString &deviceId, const QString &pluginName, QObject *parent) 0031 : QObject(parent) 0032 , d(new KdeConnectPluginConfigPrivate()) 0033 { 0034 d->m_configDir = KdeConnectConfig::instance().pluginConfigDir(deviceId, pluginName); 0035 QDir().mkpath(d->m_configDir.path()); 0036 0037 d->m_config = new QSettings(d->m_configDir.absoluteFilePath(QStringLiteral("config")), QSettings::IniFormat); 0038 0039 d->m_signal = QDBusMessage::createSignal(QStringLiteral("/kdeconnect/") + deviceId + QStringLiteral("/") + pluginName, 0040 QStringLiteral("org.kde.kdeconnect.config"), 0041 QStringLiteral("configChanged")); 0042 QDBusConnection::sessionBus().connect(QLatin1String(""), 0043 QStringLiteral("/kdeconnect/") + deviceId + QStringLiteral("/") + pluginName, 0044 QStringLiteral("org.kde.kdeconnect.config"), 0045 QStringLiteral("configChanged"), 0046 this, 0047 SLOT(slotConfigChanged())); 0048 } 0049 0050 KdeConnectPluginConfig::~KdeConnectPluginConfig() 0051 { 0052 delete d->m_config; 0053 } 0054 0055 QString KdeConnectPluginConfig::getString(const QString &key, const QString &defaultValue) 0056 { 0057 if (!d->m_config) { 0058 loadConfig(); 0059 } 0060 0061 d->m_config->sync(); 0062 return d->m_config->value(key, defaultValue).toString(); 0063 } 0064 0065 bool KdeConnectPluginConfig::getBool(const QString &key, const bool defaultValue) 0066 { 0067 if (!d->m_config) { 0068 loadConfig(); 0069 } 0070 0071 d->m_config->sync(); 0072 return d->m_config->value(key, defaultValue).toBool(); 0073 } 0074 0075 int KdeConnectPluginConfig::getInt(const QString &key, const int defaultValue) 0076 { 0077 if (!d->m_config) { 0078 loadConfig(); 0079 } 0080 0081 d->m_config->sync(); 0082 return d->m_config->value(key, defaultValue).toInt(); 0083 } 0084 0085 QByteArray KdeConnectPluginConfig::getByteArray(const QString &key, const QByteArray defaultValue) 0086 { 0087 if (!d->m_config) { 0088 loadConfig(); 0089 } 0090 0091 d->m_config->sync(); 0092 return d->m_config->value(key, defaultValue).toByteArray(); 0093 } 0094 0095 QVariantList KdeConnectPluginConfig::getList(const QString &key, const QVariantList &defaultValue) 0096 { 0097 QVariantList list; 0098 d->m_config->sync(); // note: need sync() to get recent changes signalled from other process 0099 int size = d->m_config->beginReadArray(key); 0100 if (size < 1) { 0101 d->m_config->endArray(); 0102 return defaultValue; 0103 } 0104 for (int i = 0; i < size; ++i) { 0105 d->m_config->setArrayIndex(i); 0106 list << d->m_config->value(QStringLiteral("value")); 0107 } 0108 d->m_config->endArray(); 0109 return list; 0110 } 0111 0112 void KdeConnectPluginConfig::set(const QString &key, const QVariant &value) 0113 { 0114 d->m_config->setValue(key, value); 0115 d->m_config->sync(); 0116 QDBusConnection::sessionBus().send(d->m_signal); 0117 } 0118 0119 void KdeConnectPluginConfig::setList(const QString &key, const QVariantList &list) 0120 { 0121 d->m_config->beginWriteArray(key); 0122 for (int i = 0; i < list.size(); ++i) { 0123 d->m_config->setArrayIndex(i); 0124 d->m_config->setValue(QStringLiteral("value"), list.at(i)); 0125 } 0126 d->m_config->endArray(); 0127 d->m_config->sync(); 0128 QDBusConnection::sessionBus().send(d->m_signal); 0129 } 0130 0131 void KdeConnectPluginConfig::slotConfigChanged() 0132 { 0133 Q_EMIT configChanged(); 0134 } 0135 0136 void KdeConnectPluginConfig::setDeviceId(const QString &deviceId) 0137 { 0138 if (deviceId != m_deviceId) { 0139 m_deviceId = deviceId; 0140 } 0141 0142 if (!m_deviceId.isEmpty() && !m_pluginName.isEmpty()) { 0143 loadConfig(); 0144 } 0145 0146 Q_EMIT deviceIdChanged(deviceId); 0147 } 0148 0149 QString KdeConnectPluginConfig::deviceId() 0150 { 0151 return m_deviceId; 0152 } 0153 0154 void KdeConnectPluginConfig::setPluginName(const QString &pluginName) 0155 { 0156 if (pluginName != m_pluginName) { 0157 m_pluginName = pluginName; 0158 } 0159 0160 if (!m_deviceId.isEmpty() && !m_pluginName.isEmpty()) { 0161 loadConfig(); 0162 } 0163 } 0164 0165 QString KdeConnectPluginConfig::pluginName() 0166 { 0167 return m_pluginName; 0168 } 0169 0170 void KdeConnectPluginConfig::loadConfig() 0171 { 0172 d->m_configDir = KdeConnectConfig::instance().pluginConfigDir(m_deviceId, m_pluginName); 0173 QDir().mkpath(d->m_configDir.path()); 0174 0175 d->m_config = new QSettings(d->m_configDir.absoluteFilePath(QStringLiteral("config")), QSettings::IniFormat); 0176 0177 d->m_signal = QDBusMessage::createSignal(QStringLiteral("/kdeconnect/") + m_deviceId + QStringLiteral("/") + m_pluginName, 0178 QStringLiteral("org.kde.kdeconnect.config"), 0179 QStringLiteral("configChanged")); 0180 QDBusConnection::sessionBus().connect(QLatin1String(""), 0181 QStringLiteral("/kdeconnect/") + m_deviceId + QStringLiteral("/") + m_pluginName, 0182 QStringLiteral("org.kde.kdeconnect.config"), 0183 QStringLiteral("configChanged"), 0184 this, 0185 SLOT(slotConfigChanged())); 0186 Q_EMIT configChanged(); 0187 } 0188 0189 #include "moc_kdeconnectpluginconfig.cpp"