fix: plugin settings lost after save to daemon dbus

Change-Id: I267e5654f66288bc7c5a9256c35eaec9f2b77f6b
This commit is contained in:
listenerri 2019-01-10 17:20:13 +08:00
parent 88ee44c66a
commit cfec30b03e
Notes: gerrit 2019-01-10 18:15:20 +08:00
Verified+1: <jenkins@deepin.com>
Code-Review+2: listenerri <listenerri@gmail.com>
Submitted-by: listenerri <listenerri@gmail.com>
Submitted-at: Thu, 10 Jan 2019 18:15:20 +0800
Reviewed-on: https://cr.deepin.io/41275
Project: dde/dde-dock
Branch: refs/heads/dev/daemon-plugin-settings
2 changed files with 18 additions and 6 deletions

View File

@ -26,6 +26,8 @@
#include <QDir>
#include <QGSettings>
qlonglong currentNanoTime() { return QDateTime::currentMSecsSinceEpoch() / 1000 / 1000; }
AbstractPluginsController::AbstractPluginsController(QObject *parent)
: QObject(parent)
, m_dbusDaemonInterface(QDBusConnection::sessionBus().interface())
@ -33,18 +35,19 @@ AbstractPluginsController::AbstractPluginsController(QObject *parent)
{
qApp->installEventFilter(this);
refreshPluginSettings(QDateTime::currentMSecsSinceEpoch() / 1000 / 1000);
refreshPluginSettings(currentNanoTime());
connect(m_dockDaemonInter, &DockDaemonInter::PluginSettingsUpdated, this, &AbstractPluginsController::refreshPluginSettings);
connect(m_dockDaemonInter, &DockDaemonInter::PluginSettingsUpdated, this, &AbstractPluginsController::refreshPluginSettings, Qt::QueuedConnection);
}
void AbstractPluginsController::saveValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant &value) {
refreshPluginSettings(currentNanoTime());
QJsonObject valueObject = m_pluginSettingsObject.value(itemInter->pluginName()).toObject();
valueObject.insert(key, value.toJsonValue());
m_pluginSettingsObject.insert(itemInter->pluginName(), valueObject);
m_dockDaemonInter->SetPluginSettings(
QDateTime::currentMSecsSinceEpoch() / 1000 / 1000,
m_dockDaemonInter->SetPluginSettings(currentNanoTime(),
QJsonDocument(m_pluginSettingsObject).toJson(QJsonDocument::JsonFormat::Compact));
}
@ -53,6 +56,7 @@ const QVariant AbstractPluginsController::getValue(PluginsItemInterface *const i
if (v.isNull() || !v.isValid()) {
v = fallback;
}
return v;
}
@ -181,11 +185,18 @@ void AbstractPluginsController::refreshPluginSettings(qlonglong ts)
const QJsonObject &settingsObject = QJsonDocument::fromJson(pluginSettings.toLocal8Bit()).object();
if (settingsObject.isEmpty()) {
qDebug() << "Error! parse plugin settings from json failed!";
return;
}
m_pluginSettingsObject = settingsObject;
for (auto pluginsIt = settingsObject.constBegin(); pluginsIt != settingsObject.constEnd(); ++pluginsIt) {
const QString &pluginName = pluginsIt.key();
const QJsonObject &settingsObject = pluginsIt.value().toObject();
QJsonObject newSettingsObject = m_pluginSettingsObject.value(pluginName).toObject();
for (auto settingsIt = settingsObject.constBegin(); settingsIt != settingsObject.constEnd(); ++settingsIt) {
newSettingsObject.insert(settingsIt.key(), settingsIt.value());
}
m_pluginSettingsObject.insert(pluginName, newSettingsObject);
}
// not notify plugins to refresh settings if this update is not emit by dock daemon
if (sender() != m_dockDaemonInter) {

View File

@ -70,6 +70,7 @@ private:
DockDaemonInter *m_dockDaemonInter;
QMap<PluginsItemInterface *, QMap<QString, QObject *>> m_pluginsMap;
QJsonObject m_pluginSettingsObject;
};