mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +00:00
fix: plugin settings lost after save to daemon dbus
Change-Id: I267e5654f66288bc7c5a9256c35eaec9f2b77f6b
This commit is contained in:
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
@ -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) {
|
||||
|
@ -70,6 +70,7 @@ private:
|
||||
DockDaemonInter *m_dockDaemonInter;
|
||||
|
||||
QMap<PluginsItemInterface *, QMap<QString, QObject *>> m_pluginsMap;
|
||||
|
||||
QJsonObject m_pluginSettingsObject;
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user