summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2014-06-30 01:59:14 +0200
committerTomasz Sterna <tomek@xiaoka.com>2014-06-30 01:59:14 +0200
commit3c52767b24f27ac166f9c68e2fc73811527bafe1 (patch)
treed4a4050de526967ac4c3407f643b51d616cc31fe /daemon
parent1d5e1b8dbb04d1ba916ff90445d22e0a145fd041 (diff)
Reworked WatchConnector connection/disconnection handling
Fixed crash after Pebble disconnecting
Diffstat (limited to 'daemon')
-rw-r--r--daemon/dbusconnector.cpp23
-rw-r--r--daemon/dbusconnector.h10
-rw-r--r--daemon/manager.cpp18
-rw-r--r--daemon/manager.h2
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();