diff --git a/src/seasidecache.cpp b/src/seasidecache.cpp index f8edb68..18d3a63 100644 --- a/src/seasidecache.cpp +++ b/src/seasidecache.cpp @@ -33,8 +33,11 @@ #include "synchronizelists.h" -#include "qtcontacts-extensions_impl.h" -#include "qcontactstatusflags_impl.h" +#include +#include +#include + +#include #include #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) @@ -98,7 +101,7 @@ QString managerName() { #ifdef USING_QTPIM // Temporary override until qtpim supports QTCONTACTS_MANAGER_OVERRIDE - return QStringLiteral("org.nemomobile.contacts.sqlite"); + return QString::fromLatin1("org.nemomobile.contacts.sqlite"); #endif QByteArray environmentManager = qgetenv("NEMO_CONTACT_MANAGER"); return !environmentManager.isEmpty() @@ -106,7 +109,17 @@ QString managerName() : QString(); } -Q_GLOBAL_STATIC_WITH_ARGS(QContactManager, manager, (managerName())) +QMap managerParameters() +{ + QMap rv; +#ifdef USING_QTPIM + // Report presence changes independently from other contact changes + rv.insert(QString::fromLatin1("mergePresenceChanges"), QString::fromLatin1("false")); +#endif + return rv; +} + +Q_GLOBAL_STATIC_WITH_ARGS(QContactManager, manager, (managerName(), managerParameters())) typedef QList DetailList; @@ -514,12 +527,19 @@ SeasideCache::SeasideCache() QContactManager *mgr(manager()); + // The contactsPresenceChanged signal is not exported by QContactManager, so we + // need to find it from the manager's engine object + typedef QtContactsSqliteExtensions::ContactManagerEngine EngineType; + EngineType *cme = dynamic_cast(QContactManagerData::managerData(mgr)->m_engine); + #ifdef USING_QTPIM connect(mgr, SIGNAL(dataChanged()), this, SLOT(updateContacts())); connect(mgr, SIGNAL(contactsAdded(QList)), this, SLOT(contactsAdded(QList))); connect(mgr, SIGNAL(contactsChanged(QList)), this, SLOT(contactsChanged(QList))); + connect(cme, SIGNAL(contactsPresenceChanged(QList)), + this, SLOT(contactsPresenceChanged(QList))); connect(mgr, SIGNAL(contactsRemoved(QList)), this, SLOT(contactsRemoved(QList))); #else @@ -528,6 +548,8 @@ SeasideCache::SeasideCache() this, SLOT(contactsAdded(QList))); connect(mgr, SIGNAL(contactsChanged(QList)), this, SLOT(contactsChanged(QList))); + connect(cme, SIGNAL(contactsPresenceChanged(QList)), + this, SLOT(contactsPresenceChanged(QList))); connect(mgr, SIGNAL(contactsRemoved(QList)), this, SLOT(contactsRemoved(QList))); #endif @@ -1610,6 +1632,12 @@ void SeasideCache::contactsChanged(const QList &ids) } } +void SeasideCache::contactsPresenceChanged(const QList &ids) +{ + // For now, treat presence change equivalently to other changes + contactsChanged(ids); +} + void SeasideCache::contactsRemoved(const QList &ids) { QList presentIds; diff --git a/src/seasidecache.h b/src/seasidecache.h index 2b1272c..d602295 100644 --- a/src/seasidecache.h +++ b/src/seasidecache.h @@ -363,10 +363,12 @@ private slots: #ifdef USING_QTPIM void contactsAdded(const QList &contactIds); void contactsChanged(const QList &contactIds); + void contactsPresenceChanged(const QList &contactIds); void contactsRemoved(const QList &contactIds); #else void contactsAdded(const QList &contactIds); void contactsChanged(const QList &contactIds); + void contactsPresenceChanged(const QList &contactIds); void contactsRemoved(const QList &contactIds); #endif void displayLabelOrderChanged(); diff --git a/src/src.pro b/src/src.pro index bec7f55..36279da 100644 --- a/src/src.pro +++ b/src/src.pro @@ -36,6 +36,19 @@ equals(QT_MAJOR_VERSION, 5) { DEFINES += CONTACTCACHE_BUILD +# We need access to QtContacts private headers +QT += contacts-private + +# We need the moc output for ContactManagerEngine from sqlite-extensions +equals(QT_MAJOR_VERSION, 4) { + extensionsIncludePath = $$system(pkg-config --cflags-only-I qtcontacts-sqlite-extensions) +} +equals(QT_MAJOR_VERSION, 5) { + extensionsIncludePath = $$system(pkg-config --cflags-only-I qtcontacts-sqlite-qt5-extensions) +} +VPATH += $$replace(extensionsIncludePath, -I, ) +HEADERS += contactmanagerengine.h + SOURCES += \ $$PWD/seasidecache.cpp \ $$PWD/seasideimport.cpp \