diff options
| author | Tomasz Sterna <tomek@xiaoka.com> | 2014-06-26 00:27:21 +0200 |
|---|---|---|
| committer | Tomasz Sterna <tomek@xiaoka.com> | 2014-06-26 00:27:21 +0200 |
| commit | c1a2a4ccc49ebba2e99348ee4021cab26fcd450e (patch) | |
| tree | 97af3b6e5a2f67ba0646f1ea8871e72d8ecc4bb0 | |
| parent | a52656164da956cc13b52fa4a99d4c475c68d4c8 (diff) | |
Resolve number to contact name in notification
| -rw-r--r-- | daemon/daemon.pro | 2 | ||||
| -rw-r--r-- | daemon/dbusconnector.cpp | 24 | ||||
| -rw-r--r-- | daemon/manager.cpp | 26 | ||||
| -rw-r--r-- | daemon/manager.h | 9 |
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: |
