mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +00:00
feat: access plugin settings from dock dbus daemon
Change-Id: I97f3f3e0b3bfa65cac2abda4e3b59494ea1c13d1
This commit is contained in:
parent
945d58a4b5
commit
57f8e6ee0a
@ -33,9 +33,13 @@ DockPluginsController::DockPluginsController(
|
||||
: QObject(itemControllerInter)
|
||||
, m_dbusDaemonInterface(QDBusConnection::sessionBus().interface())
|
||||
, m_itemControllerInter(itemControllerInter)
|
||||
, m_pluginsSetting("deepin", "dde-dock")
|
||||
, m_dockDaemonInter(new DockDaemonInter("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this))
|
||||
{
|
||||
qApp->installEventFilter(this);
|
||||
|
||||
refreshPluginSettings(QDateTime::currentMSecsSinceEpoch() / 1000 / 1000);
|
||||
|
||||
connect(m_dockDaemonInter, &DockDaemonInter::PluginSettingsUpdated, this, &DockPluginsController::refreshPluginSettings);
|
||||
}
|
||||
|
||||
void DockPluginsController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey)
|
||||
@ -193,6 +197,32 @@ void DockPluginsController::initPlugin(PluginsItemInterface *interface) {
|
||||
qDebug() << "init plugin finished: " << interface->pluginName();
|
||||
}
|
||||
|
||||
void DockPluginsController::refreshPluginSettings(qlonglong ts)
|
||||
{
|
||||
// TODO: handle nano seconds
|
||||
|
||||
const QString &pluginSettings = m_dockDaemonInter->GetPluginSettings().value();
|
||||
if (pluginSettings.isEmpty()) {
|
||||
qDebug() << "Error! get plugin settings from dbus failed!";
|
||||
return;
|
||||
}
|
||||
|
||||
const QJsonObject &settingsObject = QJsonDocument::fromJson(pluginSettings.toLocal8Bit()).object();
|
||||
if (settingsObject.isEmpty()) {
|
||||
qDebug() << "Error! parse plugin settings from json failed!";
|
||||
return;
|
||||
}
|
||||
|
||||
m_pluginSettingsObject = settingsObject;
|
||||
|
||||
// not notify plugins to refresh settings if this update is not emit by dock daemon
|
||||
if (sender() != m_dockDaemonInter) {
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: notify all plugins to reload plugin settings
|
||||
}
|
||||
|
||||
bool DockPluginsController::eventFilter(QObject *o, QEvent *e)
|
||||
{
|
||||
if (o != qApp)
|
||||
@ -219,15 +249,20 @@ PluginsItem *DockPluginsController::pluginItemAt(PluginsItemInterface * const it
|
||||
return m_pluginList[itemInter][itemKey];
|
||||
}
|
||||
|
||||
void DockPluginsController::saveValue(PluginsItemInterface *const itemInter, const QString &itemKey, const QVariant &value) {
|
||||
m_pluginsSetting.beginGroup(itemInter->pluginName());
|
||||
m_pluginsSetting.setValue(itemKey, value);
|
||||
m_pluginsSetting.endGroup();
|
||||
void DockPluginsController::saveValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant &value) {
|
||||
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,
|
||||
QJsonDocument(m_pluginSettingsObject).toJson());
|
||||
}
|
||||
|
||||
const QVariant DockPluginsController::getValue(PluginsItemInterface *const itemInter, const QString &itemKey, const QVariant& failback) {
|
||||
m_pluginsSetting.beginGroup(itemInter->pluginName());
|
||||
QVariant value(m_pluginsSetting.value(itemKey, failback));
|
||||
m_pluginsSetting.endGroup();
|
||||
return value;
|
||||
const QVariant DockPluginsController::getValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant& fallback) {
|
||||
QVariant v = m_pluginSettingsObject.value(itemInter->pluginName()).toObject().value(key).toVariant();
|
||||
if (v.isNull() || !v.isValid()) {
|
||||
v = fallback;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
@ -25,11 +25,15 @@
|
||||
#include "item/pluginsitem.h"
|
||||
#include "pluginproxyinterface.h"
|
||||
|
||||
#include <com_deepin_dde_daemon_dock.h>
|
||||
|
||||
#include <QPluginLoader>
|
||||
#include <QList>
|
||||
#include <QMap>
|
||||
#include <QDBusConnectionInterface>
|
||||
|
||||
using DockDaemonInter = com::deepin::dde::daemon::Dock;
|
||||
|
||||
class DockItemController;
|
||||
class PluginsItemInterface;
|
||||
class DockPluginsController : public QObject, PluginProxyInterface
|
||||
@ -48,8 +52,8 @@ public:
|
||||
void requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) Q_DECL_OVERRIDE;
|
||||
void requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) Q_DECL_OVERRIDE;
|
||||
void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) Q_DECL_OVERRIDE;
|
||||
void saveValue(PluginsItemInterface *const itemInter, const QString &itemKey, const QVariant &value) Q_DECL_OVERRIDE;
|
||||
const QVariant getValue(PluginsItemInterface *const itemInter, const QString &itemKey, const QVariant& failback = QVariant()) Q_DECL_OVERRIDE;
|
||||
void saveValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant &value) Q_DECL_OVERRIDE;
|
||||
const QVariant getValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant& fallback = QVariant()) Q_DECL_OVERRIDE;
|
||||
|
||||
signals:
|
||||
void pluginItemInserted(PluginsItem *pluginItem) const;
|
||||
@ -63,6 +67,7 @@ private slots:
|
||||
void positionChanged();
|
||||
void loadPlugin(const QString &pluginFile);
|
||||
void initPlugin(PluginsItemInterface *interface);
|
||||
void refreshPluginSettings(qlonglong ts);
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
|
||||
@ -70,9 +75,11 @@ private:
|
||||
|
||||
private:
|
||||
QDBusConnectionInterface *m_dbusDaemonInterface;
|
||||
QMap<PluginsItemInterface *, QMap<QString, PluginsItem *>> m_pluginList;
|
||||
DockItemController *m_itemControllerInter;
|
||||
QSettings m_pluginsSetting;
|
||||
DockDaemonInter *m_dockDaemonInter;
|
||||
|
||||
QMap<PluginsItemInterface *, QMap<QString, PluginsItem *>> m_pluginList;
|
||||
QJsonObject m_pluginSettingsObject;
|
||||
};
|
||||
|
||||
#endif // DOCKPLUGINSCONTROLLER_H
|
||||
|
@ -29,7 +29,7 @@ HoldContainer::HoldContainer(TrayPlugin *trayPlugin, QWidget *parent)
|
||||
|
||||
bool HoldContainer::acceptWrapper(FashionTrayWidgetWrapper *wrapper)
|
||||
{
|
||||
const QString &key = wrapper->itemKey() + HoldKeySuffix;
|
||||
const QString &key = HoldKeyPrefix + wrapper->itemKey();
|
||||
return trayPlugin()->getValue(wrapper->itemKey(), key, false).toBool();
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ void HoldContainer::addWrapper(FashionTrayWidgetWrapper *wrapper)
|
||||
AbstractContainer::addWrapper(wrapper);
|
||||
|
||||
if (containsWrapper(wrapper)) {
|
||||
const QString &key = wrapper->itemKey() + HoldKeySuffix;
|
||||
const QString &key = HoldKeyPrefix + wrapper->itemKey();
|
||||
trayPlugin()->saveValue(wrapper->itemKey(), key, true);
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ void NormalContainer::addWrapper(FashionTrayWidgetWrapper *wrapper)
|
||||
AbstractContainer::addWrapper(wrapper);
|
||||
|
||||
if (containsWrapper(wrapper)) {
|
||||
const QString &key = wrapper->itemKey() + HoldKeySuffix;
|
||||
const QString &key = HoldKeyPrefix + wrapper->itemKey();
|
||||
trayPlugin()->saveValue(wrapper->itemKey(), key, false);
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ namespace Dock {
|
||||
#define TrayWidgetHeightMin 24
|
||||
|
||||
|
||||
#define HoldKeySuffix "-holded"
|
||||
#define HoldKeyPrefix "holded_"
|
||||
|
||||
}
|
||||
|
||||
|
@ -29,9 +29,13 @@
|
||||
SystemTraysController::SystemTraysController(QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_dbusDaemonInterface(QDBusConnection::sessionBus().interface())
|
||||
, m_pluginsSetting("deepin", "dde-dock")
|
||||
, m_dockDaemonInter(new DockDaemonInter("com.deepin.dde.daemon.Dock", "/com/deepin/dde/daemon/Dock", QDBusConnection::sessionBus(), this))
|
||||
{
|
||||
qApp->installEventFilter(this);
|
||||
|
||||
refreshPluginSettings(QDateTime::currentMSecsSinceEpoch() / 1000 / 1000);
|
||||
|
||||
connect(m_dockDaemonInter, &DockDaemonInter::PluginSettingsUpdated, this, &SystemTraysController::refreshPluginSettings);
|
||||
}
|
||||
|
||||
void SystemTraysController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey)
|
||||
@ -182,6 +186,33 @@ void SystemTraysController::initPlugin(PluginsItemInterface *interface) {
|
||||
qDebug() << "SystemTray:" << "init plugin finished: " << interface->pluginName();
|
||||
}
|
||||
|
||||
void SystemTraysController::refreshPluginSettings(qlonglong ts)
|
||||
{
|
||||
// TODO: handle nano seconds
|
||||
|
||||
const QString &pluginSettings = m_dockDaemonInter->GetPluginSettings().value();
|
||||
if (pluginSettings.isEmpty()) {
|
||||
qDebug() << "Error! get plugin settings from dbus failed!";
|
||||
return;
|
||||
}
|
||||
|
||||
const QJsonObject &settingsObject = QJsonDocument::fromJson(pluginSettings.toLocal8Bit()).object();
|
||||
if (settingsObject.isEmpty()) {
|
||||
qDebug() << "Error! parse plugin settings from json failed!";
|
||||
return;
|
||||
}
|
||||
|
||||
m_pluginSettingsObject = settingsObject;
|
||||
|
||||
// not notify plugins to refresh settings if this update is not emit by dock daemon
|
||||
if (sender() != m_dockDaemonInter) {
|
||||
return;
|
||||
}
|
||||
|
||||
// static_cast<DockDaemonInter *>(sender())
|
||||
// TODO: notify all plugins to reload plugin settings
|
||||
}
|
||||
|
||||
bool SystemTraysController::eventFilter(QObject *o, QEvent *e)
|
||||
{
|
||||
if (o != qApp)
|
||||
@ -235,16 +266,21 @@ PluginsItemInterface *SystemTraysController::pluginInterAt(SystemTrayItem *syste
|
||||
}
|
||||
|
||||
void SystemTraysController::saveValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant &value) {
|
||||
m_pluginsSetting.beginGroup(itemInter->pluginName());
|
||||
m_pluginsSetting.setValue(key, value);
|
||||
m_pluginsSetting.endGroup();
|
||||
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,
|
||||
QJsonDocument(m_pluginSettingsObject).toJson());
|
||||
}
|
||||
|
||||
const QVariant SystemTraysController::getValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant& fallback) {
|
||||
m_pluginsSetting.beginGroup(itemInter->pluginName());
|
||||
QVariant value(m_pluginsSetting.value(key, fallback));
|
||||
m_pluginsSetting.endGroup();
|
||||
return value;
|
||||
QVariant v = m_pluginSettingsObject.value(itemInter->pluginName()).toObject().value(key).toVariant();
|
||||
if (v.isNull() || !v.isValid()) {
|
||||
v = fallback;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
int SystemTraysController::systemTrayItemSortKey(const QString &itemKey)
|
||||
|
@ -25,11 +25,15 @@
|
||||
#include "systemtrayitem.h"
|
||||
#include "pluginproxyinterface.h"
|
||||
|
||||
#include <com_deepin_dde_daemon_dock.h>
|
||||
|
||||
#include <QPluginLoader>
|
||||
#include <QList>
|
||||
#include <QMap>
|
||||
#include <QDBusConnectionInterface>
|
||||
|
||||
using DockDaemonInter = com::deepin::dde::daemon::Dock;
|
||||
|
||||
class PluginsItemInterface;
|
||||
class SystemTraysController : public QObject, PluginProxyInterface
|
||||
{
|
||||
@ -67,6 +71,7 @@ private slots:
|
||||
void positionChanged();
|
||||
void loadPlugin(const QString &pluginFile);
|
||||
void initPlugin(PluginsItemInterface *interface);
|
||||
void refreshPluginSettings(qlonglong ts);
|
||||
|
||||
private:
|
||||
bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
|
||||
@ -77,8 +82,9 @@ private:
|
||||
private:
|
||||
QDBusConnectionInterface *m_dbusDaemonInterface;
|
||||
QMap<PluginsItemInterface *, QMap<QString, SystemTrayItem *>> m_pluginsMap;
|
||||
DockDaemonInter *m_dockDaemonInter;
|
||||
|
||||
QSettings m_pluginsSetting;
|
||||
QJsonObject m_pluginSettingsObject;
|
||||
};
|
||||
|
||||
#endif // SYSTEMTRAYSCONTROLLER_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user