#include "gsettingsbackend.h"
-#include <QDebug>
+//#include <QDebug>
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
public:
GSettingsBackendPrivate(GSettingsBackend *parent) : q_ptr(parent) {}
- QGSettings *settings;
+ QGSettings *gsettings;
QMap<QString, QString> keyMap;
GSettingsBackend *q_ptr;
d->keyMap.insert(gsettingsKey, key);
}
- d->settings = new QGSettings(id.toUtf8(), path.toUtf8(), this);
+ d->gsettings = new QGSettings(id.toUtf8(), path.toUtf8(), this);
- connect(d->settings, &QGSettings::changed, this, [ = ](const QString & key) {
+ connect(d->gsettings, &QGSettings::changed, this, [ = ](const QString & key) {
auto dk = d->keyMap.value(unqtifyName(key));
- Q_EMIT optionChanged(dk, d->settings->get(key));
+// qDebug() << "gsetting change" << key << d->gsettings->get(key);
+ Q_EMIT optionChanged(dk, d->gsettings->get(key));
});
}
QStringList GSettingsBackend::keys() const
{
Q_D(const GSettingsBackend);
- return d->settings->keys();
+ return d->gsettings->keys();
}
QVariant GSettingsBackend::getOption(const QString &key) const
{
Q_D(const GSettingsBackend);
- return d->settings->get(qtifyName(key));
+ return d->gsettings->get(qtifyName(key));
}
void GSettingsBackend::doSetOption(const QString &key, const QVariant &value)
{
Q_D(GSettingsBackend);
- d->settings->set(qtifyName(key), value);
- Q_EMIT setOption(key, value);
+ if (value != d->gsettings->get(qtifyName(key))) {
+// qDebug() << "doSetOption" << key << d->gsettings->get(qtifyName(key));
+ d->gsettings->set(qtifyName(key), value);
+ }
}
void GSettingsBackend::doSync()
d->backend->moveToThread(backendWriteThread);
connect(d->backend, &DSettingsBackend::optionChanged,
- this, &DSettings::valueChanged);
+ this, [ = ](const QString & key, const QVariant & value) {
+ option(key)->setValue(value);
+ });
backendWriteThread->start();
connect(option.data(), &DSettingsOption::valueChanged,
this, [ = ](QVariant value) {
Q_EMIT d->backend->setOption(option->key(), value);
+ Q_EMIT valueChanged(option->key(), value);
});
}
}
for (QString key : settings->keys()) {
auto codeKey = QString(key).replace(".", "-").replace("_", "-");
auto value = settings->option(key)->value();
+ auto gtype = gsettings_type_from_QVarint(value.type());
+ if (gtype.isEmpty()) {
+ qDebug() << "skip unsupport type:" << value.type() << key;
+ continue;
+ }
+
QDomElement keyXml = document.createElement("key");
- keyXml.setAttribute("dsetting-key", key);
keyXml.setAttribute("name", codeKey);
- keyXml.setAttribute("type", gsettings_type_from_QVarint(value.type()));
+ keyXml.setAttribute("type", gtype);
QString defaultData = gsettings_value_from_QVarint(value);
QDomElement defaultEle = document.createElement("default");