#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(); }