summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2014-07-12 01:13:04 +0200
committerTomasz Sterna <tomek@xiaoka.com>2014-07-12 01:13:04 +0200
commit4d55e3d01c1c75a979ad6f53ac18648fc90c6934 (patch)
treef4b169bc70a13c644ec7da4d5c995ad367999c10
parentc84773de3af76832d15806647d8529c2e5b75257 (diff)
Reworked PebbledInterface DBus handling
-rw-r--r--app/pebbledinterface.cpp62
-rw-r--r--app/pebbledinterface.h6
-rw-r--r--daemon/manager.cpp1
-rw-r--r--daemon/watchconnector.cpp4
4 files changed, 39 insertions, 34 deletions
diff --git a/app/pebbledinterface.cpp b/app/pebbledinterface.cpp
index 390964a..1bd9b50 100644
--- a/app/pebbledinterface.cpp
+++ b/app/pebbledinterface.cpp
@@ -1,25 +1,28 @@
#include "pebbledinterface.h"
QString PebbledInterface::PEBBLED_SYSTEMD_UNIT("pebbled.service");
-QString PebbledInterface::SYSTEMD_UNIT_IFACE("org.freedesktop.systemd1.Unit");
+QString PebbledInterface::PEBBLED_DBUS_SERVICE("org.pebbled");
+QString PebbledInterface::PEBBLED_DBUS_PATH("/");
+QString PebbledInterface::PEBBLED_DBUS_IFACE("org.pebbled");
PebbledInterface::PebbledInterface(QObject *parent) :
- QObject(parent), pebbled(0), systemd(0), unitprops(0)
+ QObject(parent), pebbled(0), systemd(0)
{
- pebbled = new QDBusInterface("org.pebbled",
- "/",
- "org.pebbled",
- QDBusConnection::sessionBus(), this);
- pebbled->connection()
- .connect(pebbled->service(), pebbled->path(), pebbled->interface(),
- "connectedChanged", this, SIGNAL(connectedChanged()));
- pebbled->connection()
- .connect(pebbled->service(), pebbled->path(), pebbled->interface(),
- "pebbleChanged", this, SLOT(onPebbleChanged()));
+ QDBusConnection::sessionBus().connect(
+ PEBBLED_DBUS_SERVICE, PEBBLED_DBUS_PATH, PEBBLED_DBUS_IFACE,
+ "connectedChanged", this, SIGNAL(connectedChanged()));
+
+ QDBusConnection::sessionBus().connect(
+ PEBBLED_DBUS_SERVICE, PEBBLED_DBUS_PATH, PEBBLED_DBUS_IFACE,
+ "pebbleChanged", this, SLOT(onPebbleChanged()));
// simulate connected change on active changed
- connect(this, SIGNAL(activeChanged()), this, SIGNAL(connectedChanged()));
+ // as the daemon might not had a chance to send connectedChanged()
+ connect(this, SIGNAL(activeChanged()), SIGNAL(connectedChanged()));
+
+ pebbled = new QDBusInterface(PEBBLED_DBUS_SERVICE, PEBBLED_DBUS_PATH, PEBBLED_DBUS_IFACE,
+ QDBusConnection::sessionBus(), this);
systemd = new QDBusInterface("org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
@@ -29,29 +32,30 @@ PebbledInterface::PebbledInterface(QObject *parent) :
systemd->call("Subscribe");
QDBusReply<QDBusObjectPath> unit = systemd->call("LoadUnit", PEBBLED_SYSTEMD_UNIT);
- if (not unit.isValid()) {
- qWarning() << unit.error().message();
- } else {
- unitprops = new QDBusInterface("org.freedesktop.systemd1",
- unit.value().path(),
- "org.freedesktop.DBus.Properties",
- QDBusConnection::sessionBus(), this);
+ if (unit.isValid()) {
+ unitPath = unit.value();
+
getUnitProperties();
- unitprops->connection()
- .connect("org.freedesktop.systemd1",
- unitprops->path(),
- "org.freedesktop.DBus.Properties",
- "PropertiesChanged",
- this,
- SLOT(onPropertiesChanged(QString,QMap<QString,QVariant>,QStringList))
- );
+ QDBusConnection::sessionBus().connect(
+ "org.freedesktop.systemd1",
+ unitPath.path(),
+ "org.freedesktop.DBus.Properties",
+ "PropertiesChanged",
+ this,
+ SLOT(onPropertiesChanged(QString,QMap<QString,QVariant>,QStringList)));
+ } else {
+ qWarning() << unit.error().message();
}
}
void PebbledInterface::getUnitProperties()
{
- QDBusReply<QVariantMap> reply = unitprops->call("GetAll", SYSTEMD_UNIT_IFACE);
+ QDBusMessage request = QDBusMessage::createMethodCall(
+ "org.freedesktop.systemd1", unitPath.path(),
+ "org.freedesktop.DBus.Properties", "GetAll");
+ request << "org.freedesktop.systemd1.Unit";
+ QDBusReply<QVariantMap> reply = QDBusConnection::sessionBus().call(request);
if (reply.isValid()) {
QVariantMap newProperties = reply.value();
bool emitEnabledChanged = (properties["UnitFileState"] != newProperties["UnitFileState"]);
diff --git a/app/pebbledinterface.h b/app/pebbledinterface.h
index eccc766..df9cd3d 100644
--- a/app/pebbledinterface.h
+++ b/app/pebbledinterface.h
@@ -10,7 +10,9 @@ class PebbledInterface : public QObject
Q_OBJECT
static QString PEBBLED_SYSTEMD_UNIT;
- static QString SYSTEMD_UNIT_IFACE;
+ static QString PEBBLED_DBUS_SERVICE;
+ static QString PEBBLED_DBUS_PATH;
+ static QString PEBBLED_DBUS_IFACE;
Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
bool enabled() const;
@@ -58,7 +60,7 @@ private slots:
private:
QDBusInterface *pebbled;
QDBusInterface *systemd;
- QDBusInterface *unitprops;
+ QDBusObjectPath unitPath;
QVariantMap properties;
};
diff --git a/daemon/manager.cpp b/daemon/manager.cpp
index c045c1b..8ff6785 100644
--- a/daemon/manager.cpp
+++ b/daemon/manager.cpp
@@ -24,7 +24,6 @@ Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallMan
connect(voice, SIGNAL(activeVoiceCallChanged()), SLOT(onActiveVoiceCallChanged()));
connect(voice, SIGNAL(error(const QString &)), SLOT(onVoiceError(const QString &)));
- // Watch instantiated hangup, follow the orders
connect(watch, SIGNAL(hangup()), SLOT(hangupAll()));
connect(watch, SIGNAL(connectedChanged()), SLOT(onConnectedChanged()));
diff --git a/daemon/watchconnector.cpp b/daemon/watchconnector.cpp
index d0fcdad..088384d 100644
--- a/daemon/watchconnector.cpp
+++ b/daemon/watchconnector.cpp
@@ -176,11 +176,11 @@ void WatchConnector::onDisconnected()
bool was_connected = is_connected;
is_connected = false;
+ if (was_connected) emit connectedChanged();
+
QBluetoothSocket *socket = qobject_cast<QBluetoothSocket *>(sender());
if (!socket) return;
- if (was_connected) emit connectedChanged();
-
socket->deleteLater();
reconnectTimer.setInterval(reconnectTimer.interval() + __reconnect_timeout);