summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Sterna <tomek@xiaoka.com>2014-06-26 00:27:21 +0200
committerTomasz Sterna <tomek@xiaoka.com>2014-06-26 00:27:21 +0200
commitc1a2a4ccc49ebba2e99348ee4021cab26fcd450e (patch)
tree97af3b6e5a2f67ba0646f1ea8871e72d8ecc4bb0
parenta52656164da956cc13b52fa4a99d4c475c68d4c8 (diff)
Resolve number to contact name in notification
-rw-r--r--daemon/daemon.pro2
-rw-r--r--daemon/dbusconnector.cpp24
-rw-r--r--daemon/manager.cpp26
-rw-r--r--daemon/manager.h9
4 files changed, 46 insertions, 15 deletions
diff --git a/daemon/daemon.pro b/daemon/daemon.pro
index f7f055d..27baac9 100644
--- a/daemon/daemon.pro
+++ b/daemon/daemon.pro
@@ -7,7 +7,7 @@ QT -= gui
INCLUDEPATH += ../lib
LIBS += -L$$OUT_PWD/../lib -lpebble
-QT += bluetooth dbus
+QT += bluetooth dbus contacts
QMAKE_CXXFLAGS += -std=c++0x
SOURCES += \
diff --git a/daemon/dbusconnector.cpp b/daemon/dbusconnector.cpp
index 78992f9..8cf5713 100644
--- a/daemon/dbusconnector.cpp
+++ b/daemon/dbusconnector.cpp
@@ -40,38 +40,38 @@ bool DBusConnector::findPebble()
return false;
}
- QDBusReply<QHash<QString,QVariant>> AdapterPropertiesReply = system.call(QDBusMessage::createMethodCall("org.bluez",
- adapters.at(0).path(),
- "org.bluez.Adapter",
- "GetProperties"));
+ QDBusReply<QVariantMap> AdapterPropertiesReply = system.call(QDBusMessage::createMethodCall("org.bluez",
+ adapters[0].path(),
+ "org.bluez.Adapter",
+ "GetProperties"));
if (not AdapterPropertiesReply.isValid()) {
qWarning() << AdapterPropertiesReply.error().message();
return false;
}
QList<QDBusObjectPath> devices;
- AdapterPropertiesReply.value().value("Devices").value<QDBusArgument>() >> devices;
+ AdapterPropertiesReply.value()["Devices"].value<QDBusArgument>() >> devices;
QString name;
QString address;
foreach (QDBusObjectPath path, devices) {
- QDBusReply<QHash<QString,QVariant>> DevicePropertiesReply = system.call(QDBusMessage::createMethodCall("org.bluez",
- path.path(),
- "org.bluez.Device",
- "GetProperties"));
+ QDBusReply<QVariantMap> DevicePropertiesReply = system.call(QDBusMessage::createMethodCall("org.bluez",
+ path.path(),
+ "org.bluez.Device",
+ "GetProperties"));
if (not DevicePropertiesReply.isValid()) {
qWarning() << DevicePropertiesReply.error().message();
continue;
}
- const QHash<QString,QVariant> &dict = DevicePropertiesReply.value();
+ const QVariantMap &dict = DevicePropertiesReply.value();
- QString tmp = dict.value("Name").toString();
+ QString tmp = dict["Name"].toString();
qDebug() << "Found BT device:" << tmp;
if (tmp.startsWith("Pebble")) {
name = tmp;
- address = dict.value("Address").toString();
+ address = dict["Address"].toString();
qDebug() << "Found Pebble:" << name << address;
}
}
diff --git a/daemon/manager.cpp b/daemon/manager.cpp
index 739f891..c00694e 100644
--- a/daemon/manager.cpp
+++ b/daemon/manager.cpp
@@ -1,10 +1,20 @@
#include "manager.h"
#include <QDebug>
+#include <QtContacts/QContact>
+#include <QtContacts/QContactPhoneNumber>
Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice) :
QObject(0), watch(watch), dbus(dbus), voice(voice)
{
+ // We don't need to handle presence changes, so report them separately and ignore them
+ QMap<QString, QString> parameters;
+ parameters.insert(QString::fromLatin1("mergePresenceChanges"), QString::fromLatin1("false"));
+ contacts = new QContactManager("", parameters, this);
+
+ numberFilter.setDetailType(QContactDetail::TypePhoneNumber, QContactPhoneNumber::FieldNumber);
+ numberFilter.setMatchFlags(QContactFilter::MatchPhoneNumber);
+
connect(voice, SIGNAL(activeVoiceCallChanged()), SLOT(onActiveVoiceCallChanged()));
connect(voice, SIGNAL(error(const QString &)), SLOT(onVoiceError(const QString &)));
@@ -52,12 +62,12 @@ void Manager::onActiveVoiceCallStatusChanged()
case VoiceCallHandler::STATUS_ALERTING:
case VoiceCallHandler::STATUS_DIALING:
qDebug() << "Tell outgoing:" << handler->lineId();
- watch->ring("+48123123123", "person", false);
+ watch->ring(handler->lineId(), findPersonByNumber(handler->lineId()), false);
break;
case VoiceCallHandler::STATUS_INCOMING:
case VoiceCallHandler::STATUS_WAITING:
qDebug() << "Tell incoming:" << handler->lineId();
- watch->ring("+48123123123", "person");
+ watch->ring(handler->lineId(), findPersonByNumber(handler->lineId()));
break;
case VoiceCallHandler::STATUS_NULL:
case VoiceCallHandler::STATUS_DISCONNECTED:
@@ -73,6 +83,18 @@ void Manager::onActiveVoiceCallStatusChanged()
}
}
+QString Manager::findPersonByNumber(QString number)
+{
+ numberFilter.setValue(number);
+
+ const QList<QContact> &found = contacts->contacts(numberFilter);
+ if (found.size() == 1) {
+ return found[0].detail(QContactDetail::TypeDisplayLabel).value(0).toString();
+ }
+
+ return QString();
+}
+
void Manager::onVoiceError(const QString &message)
{
qWarning() << "Error: " << message;
diff --git a/daemon/manager.h b/daemon/manager.h
index 9de5496..dae33fe 100644
--- a/daemon/manager.h
+++ b/daemon/manager.h
@@ -7,6 +7,10 @@
#include <QObject>
#include <QBluetoothLocalDevice>
+#include <QtContacts/QContactManager>
+#include <QtContacts/QContactDetailFilter>
+
+using namespace QtContacts;
class Manager : public QObject
{
@@ -18,9 +22,14 @@ class Manager : public QObject
DBusConnector *dbus;
VoiceCallManager *voice;
+ QContactManager *contacts;
+ QContactDetailFilter numberFilter;
+
public:
explicit Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice);
+ Q_INVOKABLE QString findPersonByNumber(QString number);
+
signals:
public slots: