diff options
| author | Tomasz Sterna <tomek@xiaoka.com> | 2014-06-30 01:59:14 +0200 |
|---|---|---|
| committer | Tomasz Sterna <tomek@xiaoka.com> | 2014-06-30 01:59:14 +0200 |
| commit | 3c52767b24f27ac166f9c68e2fc73811527bafe1 (patch) | |
| tree | d4a4050de526967ac4c3407f643b51d616cc31fe /daemon | |
| parent | 1d5e1b8dbb04d1ba916ff90445d22e0a145fd041 (diff) | |
Reworked WatchConnector connection/disconnection handling
Fixed crash after Pebble disconnecting
Diffstat (limited to 'daemon')
| -rw-r--r-- | daemon/dbusconnector.cpp | 23 | ||||
| -rw-r--r-- | daemon/dbusconnector.h | 10 | ||||
| -rw-r--r-- | daemon/manager.cpp | 18 | ||||
| -rw-r--r-- | daemon/manager.h | 2 |
4 files changed, 34 insertions, 19 deletions
diff --git a/daemon/dbusconnector.cpp b/daemon/dbusconnector.cpp index 8cf5713..e5bed8f 100644 --- a/daemon/dbusconnector.cpp +++ b/daemon/dbusconnector.cpp @@ -7,18 +7,14 @@ #include <QDBusArgument> #include <QDBusObjectPath> -DBusConnector::DBusConnector(QObject *parent) : - QObject(parent) -{ //dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.ListAdapters //dbus-send --system --dest=org.bluez --print-reply $path org.bluez.Adapter.GetProperties //dbus-send --system --dest=org.bluez --print-reply $devpath org.bluez.Device.GetProperties //dbus-send --system --dest=org.bluez --print-reply $devpath org.bluez.Input.Connect - QDBusConnection session = QDBusConnection::sessionBus(); - - findPebble(); -} +DBusConnector::DBusConnector(QObject *parent) : + QObject(parent) +{} bool DBusConnector::findPebble() { @@ -70,15 +66,12 @@ bool DBusConnector::findPebble() QString tmp = dict["Name"].toString(); qDebug() << "Found BT device:" << tmp; if (tmp.startsWith("Pebble")) { - name = tmp; - address = dict["Address"].toString(); - qDebug() << "Found Pebble:" << name << address; + qDebug() << "Found Pebble:" << tmp; + pebbleProps = dict; + emit pebbleChanged(); + return true; } } - if (name.isEmpty() or address.isEmpty()) return false; - - pebbleName = name; - pebbleAddress = address; - return true; + return false; } diff --git a/daemon/dbusconnector.h b/daemon/dbusconnector.h index 8dadb5a..e166238 100644 --- a/daemon/dbusconnector.h +++ b/daemon/dbusconnector.h @@ -2,17 +2,23 @@ #define DBUSCONNECTOR_H #include <QObject> +#include <QVariantMap> class DBusConnector : public QObject { Q_OBJECT + + Q_PROPERTY(QVariantMap pebble READ pebble NOTIFY pebbleChanged) + + QVariantMap pebbleProps; + public: explicit DBusConnector(QObject *parent = 0); - QString pebbleName; - QString pebbleAddress; + QVariantMap pebble() { return pebbleProps; } signals: + void pebbleChanged(); public slots: bool findPebble(); diff --git a/daemon/manager.cpp b/daemon/manager.cpp index 5e09c75..691d7a5 100644 --- a/daemon/manager.cpp +++ b/daemon/manager.cpp @@ -5,7 +5,8 @@ #include <QtContacts/QContactPhoneNumber> Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice) : - QObject(0), watch(watch), dbus(dbus), voice(voice) + QObject(0), watch(watch), dbus(dbus), voice(voice), + notification(MNotification::DeviceEvent) { // We don't need to handle presence changes, so report them separately and ignore them QMap<QString, QString> parameters; @@ -26,10 +27,23 @@ Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallMan // Watch instantiated hangup, follow the orders connect(watch, SIGNAL(hangup()), SLOT(hangupAll())); + connect(watch, SIGNAL(connectedChanged()), SLOT(onConnectedChanged())); if (btDevice.isValid()) { qDebug() << "BT local name:" << btDevice.name(); - watch->deviceConnect(dbus->pebbleName, dbus->pebbleAddress); + connect(dbus, SIGNAL(pebbleChanged()), SLOT(onPebbleChanged())); + dbus->findPebble(); + } +} + +void Manager::onPebbleChanged() +{ + const QVariantMap & pebble = dbus->pebble(); + QString name = pebble["Name"].toString(); + if (name.isEmpty()) { + qDebug() << "Pebble gone"; + } else { + watch->deviceConnect(name, pebble["Address"].toString()); } } diff --git a/daemon/manager.h b/daemon/manager.h index 0d6e8ac..a1b206e 100644 --- a/daemon/manager.h +++ b/daemon/manager.h @@ -40,6 +40,8 @@ public slots: void hangupAll(); protected slots: + void onPebbleChanged(); + void onConnectedChanged(); void onActiveVoiceCallChanged(); void onVoiceError(const QString &message); void onActiveVoiceCallStatusChanged(); |
