diff options
| -rw-r--r-- | daemon/daemon.pro | 2 | ||||
| -rw-r--r-- | daemon/manager.cpp | 41 | ||||
| -rw-r--r-- | daemon/manager.h | 6 | ||||
| -rw-r--r-- | rpm/pebble.yaml | 1 |
4 files changed, 50 insertions, 0 deletions
diff --git a/daemon/daemon.pro b/daemon/daemon.pro index 01ea8d1..ca7fd70 100644 --- a/daemon/daemon.pro +++ b/daemon/daemon.pro @@ -2,12 +2,14 @@ TARGET = pebbled CONFIG += console CONFIG -= app_bundle +CONFIG += link_pkgconfig QT -= gui INCLUDEPATH += ../lib LIBS += -L$$OUT_PWD/../lib -lpebble QT += bluetooth dbus contacts +PKGCONFIG += commhistory-qt5 QMAKE_CXXFLAGS += -std=c++0x SOURCES += \ diff --git a/daemon/manager.cpp b/daemon/manager.cpp index c00694e..5e09c75 100644 --- a/daemon/manager.cpp +++ b/daemon/manager.cpp @@ -15,6 +15,12 @@ Manager::Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallMan numberFilter.setDetailType(QContactDetail::TypePhoneNumber, QContactPhoneNumber::FieldNumber); numberFilter.setMatchFlags(QContactFilter::MatchPhoneNumber); + conversations = new GroupManager(this); + connect(conversations, SIGNAL(groupAdded(GroupObject*)), SLOT(onConversationGroupAdded(GroupObject*))); + connect(conversations, SIGNAL(groupUpdated(GroupObject*)), SLOT(onConversationGroupUpdated(GroupObject*))); + connect(conversations, SIGNAL(groupDeleted(GroupObject*)), SLOT(onConversationGroupDeleted(GroupObject*))); + conversations->getGroups(); + connect(voice, SIGNAL(activeVoiceCallChanged()), SLOT(onActiveVoiceCallChanged())); connect(voice, SIGNAL(error(const QString &)), SLOT(onVoiceError(const QString &))); @@ -106,3 +112,38 @@ void Manager::hangupAll() handler->hangup(); } } + +void Manager::onConversationGroupAdded(GroupObject *group) +{ + if (!group) { + qWarning() << "Got null conversation group"; + return; + } + + connect(group, SIGNAL(unreadMessagesChanged()), SLOT(onUnreadMessagesChanged())); + if (group->unreadMessages()) processUnreadMessages(group); +} + + +void Manager::onUnreadMessagesChanged() +{ + GroupObject *group = qobject_cast<GroupObject*>(sender()); + if (!group) { + qWarning() << "Got unreadMessagesChanged for null group"; + return; + } + processUnreadMessages(group); +} + +void Manager::processUnreadMessages(GroupObject *group) +{ + if (group->unreadMessages()) { + QString name = group->contactName(); + QString message = group->lastMessageText(); + qDebug() << "Msg:" << message; + qDebug() << "From:" << name; + watch->sendSMSNotification(name.isEmpty()?"Unknown":name, message); + } else { + qWarning() << "Got processUnreadMessages for group with no new messages"; + } +} diff --git a/daemon/manager.h b/daemon/manager.h index dae33fe..0d6e8ac 100644 --- a/daemon/manager.h +++ b/daemon/manager.h @@ -9,8 +9,10 @@ #include <QBluetoothLocalDevice> #include <QtContacts/QContactManager> #include <QtContacts/QContactDetailFilter> +#include <CommHistory/GroupModel> using namespace QtContacts; +using namespace CommHistory; class Manager : public QObject { @@ -24,11 +26,13 @@ class Manager : public QObject QContactManager *contacts; QContactDetailFilter numberFilter; + GroupManager *conversations; public: explicit Manager(watch::WatchConnector *watch, DBusConnector *dbus, VoiceCallManager *voice); Q_INVOKABLE QString findPersonByNumber(QString number); + Q_INVOKABLE void processUnreadMessages(GroupObject *group); signals: @@ -39,6 +43,8 @@ protected slots: void onActiveVoiceCallChanged(); void onVoiceError(const QString &message); void onActiveVoiceCallStatusChanged(); + void onConversationGroupAdded(GroupObject *group); + void onUnreadMessagesChanged(); }; diff --git a/rpm/pebble.yaml b/rpm/pebble.yaml index 7495643..bc5ee9b 100644 --- a/rpm/pebble.yaml +++ b/rpm/pebble.yaml @@ -18,6 +18,7 @@ PkgConfigBR: - Qt5Quick - Qt5Qml - Qt5Core +- commhistory-qt5 - sailfishapp >= 0.0.10 Requires: - sailfishsilica-qt5 >= 0.10.9 |
