update: plugin settings daemon interface

Change-Id: I2157ff9e14a6c878a30810e9ad008593bb61272b
This commit is contained in:
listenerri 2019-01-16 16:55:01 +08:00
parent cfec30b03e
commit f190e4de76
Notes: gerrit 2019-01-16 16:57:59 +08:00
Reviewed-on: https://cr.deepin.io/41365
Project: dde/dde-dock
Branch: refs/heads/dev/daemon-plugin-settings
4 changed files with 25 additions and 24 deletions

View File

@ -122,11 +122,11 @@ void DockPluginsController::requestSetAppletVisible(PluginsItemInterface * const
void DockPluginsController::startLoader()
{
#ifdef QT_DEBUG
const QString pluginsDir("../plugins");
#else
const QString pluginsDir("../lib/dde-dock/plugins");
#endif
QString pluginsDir("../plugins");
if (!QDir(pluginsDir).exists()) {
pluginsDir = "/usr/lib/dde-dock/plugins";
}
qDebug() << "using dock plugins dir:" << pluginsDir;
AbstractPluginsController::startLoader(new PluginLoader(pluginsDir, this));
}

View File

@ -26,8 +26,6 @@
#include <QDir>
#include <QGSettings>
qlonglong currentNanoTime() { return QDateTime::currentMSecsSinceEpoch() / 1000 / 1000; }
AbstractPluginsController::AbstractPluginsController(QObject *parent)
: QObject(parent)
, m_dbusDaemonInterface(QDBusConnection::sessionBus().interface())
@ -35,23 +33,28 @@ AbstractPluginsController::AbstractPluginsController(QObject *parent)
{
qApp->installEventFilter(this);
refreshPluginSettings(currentNanoTime());
refreshPluginSettings();
connect(m_dockDaemonInter, &DockDaemonInter::PluginSettingsUpdated, this, &AbstractPluginsController::refreshPluginSettings, Qt::QueuedConnection);
connect(m_dockDaemonInter, &DockDaemonInter::PluginSettingsSynced, this, &AbstractPluginsController::refreshPluginSettings, Qt::QueuedConnection);
}
void AbstractPluginsController::saveValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant &value) {
refreshPluginSettings(currentNanoTime());
refreshPluginSettings();
QJsonObject valueObject = m_pluginSettingsObject.value(itemInter->pluginName()).toObject();
valueObject.insert(key, value.toJsonValue());
m_pluginSettingsObject.insert(itemInter->pluginName(), valueObject);
// save to local cache
QJsonObject localObject = m_pluginSettingsObject.value(itemInter->pluginName()).toObject();
localObject.insert(key, value.toJsonValue());
m_pluginSettingsObject.insert(itemInter->pluginName(), localObject);
m_dockDaemonInter->SetPluginSettings(currentNanoTime(),
QJsonDocument(m_pluginSettingsObject).toJson(QJsonDocument::JsonFormat::Compact));
// save to daemon
QJsonObject remoteObject, remoteObjectInter;
remoteObjectInter.insert(key, value.toJsonValue());
remoteObject.insert(itemInter->pluginName(), remoteObjectInter);
m_dockDaemonInter->MergePluginSettings(QJsonDocument(remoteObject).toJson(QJsonDocument::JsonFormat::Compact));
}
const QVariant AbstractPluginsController::getValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant& fallback) {
// load from local cache
QVariant v = m_pluginSettingsObject.value(itemInter->pluginName()).toObject().value(key).toVariant();
if (v.isNull() || !v.isValid()) {
v = fallback;
@ -173,10 +176,8 @@ void AbstractPluginsController::initPlugin(PluginsItemInterface *interface) {
qDebug() << objectName() << "init plugin finished: " << interface->pluginName();
}
void AbstractPluginsController::refreshPluginSettings(qlonglong ts)
void AbstractPluginsController::refreshPluginSettings()
{
// TODO: handle nano seconds
const QString &pluginSettings = m_dockDaemonInter->GetPluginSettings().value();
if (pluginSettings.isEmpty()) {
qDebug() << "Error! get plugin settings from dbus failed!";

View File

@ -60,7 +60,7 @@ private slots:
void positionChanged();
void loadPlugin(const QString &pluginFile);
void initPlugin(PluginsItemInterface *interface);
void refreshPluginSettings(qlonglong ts);
void refreshPluginSettings();
private:
bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;

View File

@ -157,11 +157,11 @@ void SystemTraysController::saveValueSystemTrayItem(const QString &itemKey, cons
void SystemTraysController::startLoader()
{
#ifdef QT_DEBUG
const QString pluginsDir("../plugins/system-trays");
#else
const QString pluginsDir("../lib/dde-dock/plugins/system-trays");
#endif
QString pluginsDir("../plugins/system-trays");
if (!QDir(pluginsDir).exists()) {
pluginsDir = "/usr/lib/dde-dock/plugins/system-trays";
}
qDebug() << "using system tray plugins dir:" << pluginsDir;
AbstractPluginsController::startLoader(new PluginLoader(pluginsDir, this));
}