22#include <org_aethercast.h>
23#include "dbus-shared.h"
27Displays::Displays(QObject *parent):
28 Displays(QDBusConnection::systemBus(), parent)
32Displays::Displays(
const QDBusConnection &dbus, QObject *parent):
36 m_manager.reset(
new OrgAethercastManagerInterface(AETHERCAST_SERVICE, AETHERCAST_PATH, m_dbus));
37 m_manager->setTimeout(1000);
39 m_aethercastProperties.reset(
new OrgFreedesktopDBusPropertiesInterface(AETHERCAST_SERVICE, AETHERCAST_PATH, m_dbus));
40 m_aethercastProperties->setTimeout(1000);
42 QObject::connect(m_aethercastProperties.data(), SIGNAL(PropertiesChanged(
const QString&,
const QVariantMap&,
const QStringList&)),
43 this, SLOT(slotPropertiesChanged(
const QString&,
const QVariantMap&,
const QStringList&)));
46 connect(m_dbus.interface(), &QDBusConnectionInterface::serviceRegistered,
this, [=](QString service) {
47 if (service != AETHERCAST_SERVICE)
54void Displays::getAll()
56 watchCall(m_aethercastProperties->GetAll(AETHERCAST_MANAGER_IFACE), [=](QDBusPendingCallWatcher *watcher) {
57 QDBusPendingReply<QVariantMap> reply = *watcher;
59 if (reply.isError()) {
60 qWarning() <<
"Failed to retrieve properties for manager";
61 watcher->deleteLater();
65 auto properties = reply.argumentAt<0>();
66 setProperties(properties);
67 watcher->deleteLater();
71void Displays::slotPropertiesChanged(
const QString &interface,
const QVariantMap &changedProperties,
72 const QStringList &invalidatedProperties)
74 Q_UNUSED(invalidatedProperties);
76 if (interface != AETHERCAST_MANAGER_IFACE)
79 setProperties(changedProperties);
82void Displays::setProperties(
const QMap<QString,QVariant> &properties)
84 QMapIterator<QString,QVariant> it(properties);
85 while (it.hasNext()) {
87 updateProperty(it.key(), it.value());
91void Displays::setEnabled(
bool enabled)
96 m_manager->setEnabled(enabled);
97 Q_EMIT enabledChanged(enabled);
100void Displays::handleConnectError(QDBusError error)
102 if (error.name() ==
"org.aethercast.Error.None")
103 Q_EMIT(connectError(Error::None));
104 else if (error.name() ==
"org.aethercast.Error.Failed")
105 Q_EMIT(connectError(Error::Failed));
106 else if (error.name() ==
"org.aethercast.Error.Already")
107 Q_EMIT(connectError(Error::Already));
108 else if (error.name() ==
"org.aethercast.Error.ParamInvalid")
109 Q_EMIT(connectError(Error::ParamInvalid));
110 else if (error.name() ==
"org.aethercast.Error.InvalidState")
111 Q_EMIT(connectError(Error::InvalidState));
112 else if (error.name() ==
"org.aethercast.Error.NotConnected")
113 Q_EMIT(connectError(Error::NotConnected));
114 else if (error.name() ==
"org.aethercast.Error.NotReady")
115 Q_EMIT(connectError(Error::NotReady));
117 Q_EMIT(connectError(Error::Unknown));
120void Displays::callFinishedSlot(QDBusPendingCallWatcher *call)
122 QDBusPendingReply<void> reply = *call;
123 if (reply.isFinished() && reply.isError())
124 handleConnectError(reply.error());
128void Displays::updateProperty(
const QString &key,
const QVariant &value)
130 if (key ==
"Scanning")
131 Q_EMIT(scanningChanged(value.toBool()));
133 Q_EMIT(stateChanged());
134 if (key ==
"Enabled")
135 Q_EMIT(enabledChanged(value.toBool()));