From 4b508d6344f76ce69055ee8eb79bf43cc89ad69c Mon Sep 17 00:00:00 2001 From: Javier Date: Sun, 29 Mar 2015 04:45:23 +0200 Subject: support recent comms and contacts --- saltoqd/contactsmanager.cpp | 111 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 saltoqd/contactsmanager.cpp (limited to 'saltoqd/contactsmanager.cpp') diff --git a/saltoqd/contactsmanager.cpp b/saltoqd/contactsmanager.cpp new file mode 100644 index 0000000..2bc79d2 --- /dev/null +++ b/saltoqd/contactsmanager.cpp @@ -0,0 +1,111 @@ +#include "contactsmanager.h" +#include +#include + +QTCONTACTS_USE_NAMESPACE + +ContactsManager::ContactsManager(StorageManager *storage, ToqManager *toq) : + QObject(toq), _toq(toq), _storage(storage), + _contacts(new QContactManager(this)), + _refreshTimer(new QTimer(this)) +{ + connect(_contacts, &QContactManager::contactsAdded, + this, &ContactsManager::scheduleRefresh); + connect(_contacts, &QContactManager::dataChanged, + this, &ContactsManager::scheduleRefresh); + + connect(_refreshTimer, &QTimer::timeout, + this, &ContactsManager::refresh); + + _refreshTimer->setSingleShot(true); + _refreshTimer->setInterval(2000); + _refreshTimer->start(); +} + +qint64 ContactsManager::getRecordIdForContact(uint contactId) +{ + return contactId; +} + +void ContactsManager::scheduleRefresh() +{ + if (!_refreshTimer->isActive()) { + _refreshTimer->start(); + } +} + +void ContactsManager::refresh() +{ + qDebug() << "Refreshing contacts"; + + QContactSortOrder order; + order.setBlankPolicy(QContactSortOrder::BlanksLast); + order.setCaseSensitivity(Qt::CaseInsensitive); + order.setDetailType(QContactDetail::TypeDisplayLabel, QContactDisplayLabel::FieldLabel); + + QList contacts = _contacts->contacts(order); + + QJsonArray records; + for (const QContact &contact : contacts) { + QJsonObject payload; + QContactName cName = contact.detail(); + QContactDisplayLabel cDisplay = contact.detail(); + QContactFavorite cFav = contact.detail(); + QJsonObject name; + name.insert("Initial", cName.prefix()); + name.insert("First", cName.firstName()); + name.insert("Middle", cName.middleName()); + name.insert("Last", cName.lastName()); + name.insert("Display", cDisplay.label()); + QJsonArray phones; + for (const QContactPhoneNumber &cPhone : contact.details()) { + QJsonObject phone; + QString type; + if (!cPhone.subTypes().isEmpty()) { + if (cPhone.subTypes().first() == QContactPhoneNumber::SubTypeMobile) { + type = "Mobile"; + } + } + if (type.isEmpty() && !cPhone.contexts().isEmpty()) { + switch (cPhone.contexts().first()) { + case QContactDetail::ContextHome: + type = "Home"; + break; + case QContactDetail::ContextWork: + type = "Work"; + break; + default: + break; + } + } + if (type.isEmpty()) { + type = "Other"; + } + phone.insert("Type", type); + phone.insert("Number", cPhone.number()); + phones.append(phone); + } + payload.insert("Name", name); + payload.insert("PhoneNumber", phones); + payload.insert("IsFav", cFav.isFavorite()); + QJsonObject record; + record.insert("RecordId", getRecordIdForContact(QtContactsSqliteExtensions::internalContactId(contact.id()))); + record.insert("RecordPayload", payload); + records.append(record); + } + + QString storeName("Phub.Phone.Contacts"); + QJsonObject store; + store.insert("Name", storeName); + store.insert("Records", records); + + QJsonObject root; + root.insert("DataStore", store); + + QJsonDocument doc(root); + qDebug() << doc.toJson(); + + _storage->updateStore(storeName, root); + + emit changed(); +} -- cgit v1.2.3