bool QContactManagerEngineV2Wrapper::startRequest(QContactAbstractRequest* req) { if ((req->type() == QContactAbstractRequest::ContactSaveRequest && !static_cast<QContactSaveRequest*>(req)->definitionMask().isEmpty()) || (req->type() == QContactAbstractRequest::ContactFetchByIdRequest)) { RequestController* controller; if (req->type() == QContactAbstractRequest::ContactFetchByIdRequest) controller = new FetchByIdRequestController(m_engine); else controller = new PartialSaveRequestController(m_engine, this); controller->setRequest(req); connect(controller, SIGNAL(stateChanged(QContactAbstractRequest::State)), this, SLOT(requestStateChanged(QContactAbstractRequest::State)), Qt::QueuedConnection); m_controllerForRequest.insert(req, controller); if (controller->start()) { updateRequestState(req, QContactAbstractRequest::ActiveState); return true; } else { return false; } } // Otherwise, pass it on return m_engine->startRequest(req); }
SeasideCache::SeasideCache() : m_manager(managerName()) #ifdef HAS_MLITE , m_displayLabelOrderConf(QLatin1String("/org/nemomobile/contacts/display_label_order")) #endif , m_resultsRead(0) , m_populated(0) , m_cacheIndex(0) , m_queryIndex(0) , m_selfId(0) , m_fetchFilter(SeasideFilteredModel::FilterFavorites) , m_displayLabelOrder(SeasideFilteredModel::FirstNameFirst) , m_updatesPending(true) , m_refreshRequired(false) { Q_ASSERT(!instance); instance = this; m_timer.start(); #ifdef HAS_MLITE connect(&m_displayLabelOrderConf, SIGNAL(valueChanged()), this, SLOT(displayLabelOrderChanged())); QVariant displayLabelOrder = m_displayLabelOrderConf.value(); if (displayLabelOrder.isValid()) m_displayLabelOrder = SeasideFilteredModel::DisplayLabelOrder(displayLabelOrder.toInt()); #endif connect(&m_manager, SIGNAL(dataChanged()), this, SLOT(updateContacts())); connect(&m_manager, SIGNAL(contactsChanged(QList<QContactLocalId>)), this, SLOT(updateContacts(QList<QContactLocalId>))); connect(&m_manager, SIGNAL(contactsAdded(QList<QContactLocalId>)), this, SLOT(updateContacts(QList<QContactLocalId>))); connect(&m_manager, SIGNAL(contactsRemoved(QList<QContactLocalId>)), this, SLOT(contactsRemoved(QList<QContactLocalId>))); connect(&m_fetchRequest, SIGNAL(resultsAvailable()), this, SLOT(contactsAvailable())); connect(&m_contactIdRequest, SIGNAL(resultsAvailable()), this, SLOT(contactIdsAvailable())); connect(&m_fetchRequest, SIGNAL(stateChanged(QContactAbstractRequest::State)), this, SLOT(requestStateChanged(QContactAbstractRequest::State))); connect(&m_contactIdRequest, SIGNAL(stateChanged(QContactAbstractRequest::State)), this, SLOT(requestStateChanged(QContactAbstractRequest::State))); connect(&m_removeRequest, SIGNAL(stateChanged(QContactAbstractRequest::State)), this, SLOT(requestStateChanged(QContactAbstractRequest::State))); connect(&m_saveRequest, SIGNAL(stateChanged(QContactAbstractRequest::State)), this, SLOT(requestStateChanged(QContactAbstractRequest::State))); m_fetchRequest.setManager(&m_manager); m_removeRequest.setManager(&m_manager); m_saveRequest.setManager(&m_manager); #ifdef SEASIDE_SPARQL_QUERIES m_contactIdRequest.setQueryData(true); m_contactIdRequest.setFavoritesOnly(true); m_contactIdRequest.setSortOnFirstName(m_displayLabelOrder == SeasideFilteredModel::FirstNameFirst); m_contactIdRequest.start(); #else m_selfId = m_manager.selfContactId(); m_contactIdRequest.setManager(&m_manager); QContactFetchHint fetchHint; fetchHint.setOptimizationHints(QContactFetchHint::NoRelationships | QContactFetchHint::NoActionPreferences | QContactFetchHint::NoBinaryBlobs); fetchHint.setDetailDefinitionsHint(QStringList() << QContactName::DefinitionName << QContactAvatar::DefinitionName << QContactPhoneNumber::DefinitionName << QContactEmailAddress::DefinitionName << QContactOrganization::DefinitionName << QContactOnlineAccount::DefinitionName); m_fetchRequest.setFetchHint(fetchHint); m_fetchRequest.setFilter(QContactFavorite::match()); QContactSortOrder firstLabelOrder; firstLabelOrder.setDetailDefinitionName( QContactName::DefinitionName, QContactName::FieldFirstName); firstLabelOrder.setCaseSensitivity(Qt::CaseInsensitive); firstLabelOrder.setDirection(Qt::AscendingOrder); firstLabelOrder.setBlankPolicy(QContactSortOrder::BlanksFirst); QContactSortOrder secondLabelOrder; secondLabelOrder.setDetailDefinitionName( QContactName::DefinitionName, QContactName::FieldLastName); secondLabelOrder.setCaseSensitivity(Qt::CaseInsensitive); secondLabelOrder.setDirection(Qt::AscendingOrder); secondLabelOrder.setBlankPolicy(QContactSortOrder::BlanksFirst); QList<QContactSortOrder> sorting = m_displayLabelOrder == SeasideFilteredModel::FirstNameFirst ? (QList<QContactSortOrder>() << firstLabelOrder << secondLabelOrder) : (QList<QContactSortOrder>() << secondLabelOrder << firstLabelOrder); m_fetchRequest.setSorting(sorting); m_contactIdRequest.setSorting(sorting); m_fetchRequest.start(); #endif }