SeasidePeopleModelPriv::SeasidePeopleModelPriv(SeasidePeopleModel *parent) : QObject(parent) , q(parent) { QContactSortOrder sort; sort.setDetailDefinitionName(QContactName::DefinitionName, QContactName::FieldFirstName); sort.setDirection(Qt::AscendingOrder); sortOrder.clear(); sortOrder.append(sort); MODEL_DEBUG() << Q_FUNC_INFO << QContactManager::availableManagers(); if (!qgetenv("NEMO_CONTACT_MANAGER").isNull()) manager = new QContactManager(qgetenv("NEMO_CONTACT_MANAGER")); else manager = new QContactManager; MODEL_DEBUG() << Q_FUNC_INFO << "Manager is " << manager->managerName(); localeHelper = LocaleUtils::self(); connect(manager, SIGNAL(contactsAdded(QList<QContactLocalId>)), this, SLOT(contactsAdded(QList<QContactLocalId>))); connect(manager, SIGNAL(contactsChanged(QList<QContactLocalId>)), this, SLOT(contactsChanged(QList<QContactLocalId>))); connect(manager, SIGNAL(contactsRemoved(QList<QContactLocalId>)), this, SLOT(contactsRemoved(QList<QContactLocalId>))); connect(manager, SIGNAL(dataChanged()), this, SLOT(dataReset())); dataReset(); }
void QDeclarativeContactSortOrder::setSortOrder(const QContactSortOrder& sortOrder) { m_sortOrder = sortOrder; m_field = sortOrder.detailFieldName(); m_detail = sortOrder.detailDefinitionName(); emit sortOrderChanged(); }
void SeasideCache::displayLabelOrderChanged() { #ifdef HAS_MLITE QVariant displayLabelOrder = m_displayLabelOrderConf.value(); if (displayLabelOrder.isValid() && displayLabelOrder.toInt() != m_displayLabelOrder) { m_displayLabelOrder = SeasideFilteredModel::DisplayLabelOrder(displayLabelOrder.toInt()); #ifdef SEASIDE_SPARQL_QUERIES m_contactIdRequest.setSortOnFirstName(true); #else QContactSortOrder firstNameOrder; firstNameOrder.setDetailDefinitionName( QContactName::DefinitionName, QContactName::FieldFirstName); firstNameOrder.setCaseSensitivity(Qt::CaseInsensitive); firstNameOrder.setDirection(Qt::AscendingOrder); firstNameOrder.setBlankPolicy(QContactSortOrder::BlanksFirst); QContactSortOrder secondNameOrder; secondNameOrder.setDetailDefinitionName( QContactName::DefinitionName, QContactName::FieldLastName); secondNameOrder.setCaseSensitivity(Qt::CaseInsensitive); secondNameOrder.setDirection(Qt::AscendingOrder); secondNameOrder.setBlankPolicy(QContactSortOrder::BlanksFirst); QList<QContactSortOrder> sorting = m_displayLabelOrder == SeasideFilteredModel::FirstNameFirst ? (QList<QContactSortOrder>() << firstNameOrder << secondNameOrder) : (QList<QContactSortOrder>() << secondNameOrder << firstNameOrder); m_fetchRequest.setSorting(sorting); m_contactIdRequest.setSorting(sorting); #endif typedef QHash<QContactLocalId, SeasideCacheItem>::iterator iterator; for (iterator it = m_people.begin(); it != m_people.begin(); ++it) { if (it->person) { it->person->recalculateDisplayLabel(SeasideProxyModel::DisplayLabelOrder(m_displayLabelOrder)); it->contact = it->person->contact(); } else { QContactName name = it->contact.detail<QContactName>(); name.setCustomLabel(SeasidePerson::generateDisplayLabel(it->contact)); it->contact.saveDetail(&name); } } for (int i = 0; i < SeasideFilteredModel::FilterTypesCount; ++i) { for (int j = 0; j < m_models[i].count(); ++j) m_models[i].at(j)->updateDisplayLabelOrder(); } m_refreshRequired = true; requestUpdate(); } #endif }
QContact DecodedDataDocumentParser::getContact(string name, string surname) { QContactFetchRequest fetchRequest; QContactSortOrder s; s.setDirection(Qt::DescendingOrder); s.setCaseSensitivity(Qt::CaseInsensitive); s.setDetailDefinitionName("Name","FirstName"); s.setBlankPolicy(QContactSortOrder::BlanksFirst); QList<QContactSortOrder> sortList; sortList.push_back(s); //Search filters QContactUnionFilter nameFilter; QContactDetailFilter subFilterF; subFilterF.setDetailDefinitionName("Name", "FirstName"); subFilterF.setValue(name.c_str()); subFilterF.setMatchFlags(QContactFilter::MatchContains); nameFilter.append(subFilterF); QContactDetailFilter subFilterL; subFilterL.setDetailDefinitionName("Name", "LastName"); subFilterL.setValue(surname.c_str()); subFilterL.setMatchFlags(QContactFilter::MatchContains); nameFilter.append(subFilterL); fetchRequest.setSorting(sortList); fetchRequest.setFilter(nameFilter); fetchRequest.setManager(new QContactManager(&fetchRequest)); //connect(request, SIGNAL(stateChanged(QContactAbstractRequest::State)), //SLOT(onStateChanged(QContactAbstractRequest::State)) fetchRequest.start(); QEventLoop loop; QObject::connect(&fetchRequest, SIGNAL(stateChanged(QContactAbstractRequest::State)), &loop, SLOT(quit())); loop.exec(); QList<QContact> list=fetchRequest.contacts(); qWarning("Contacts readed %d",list.count()); if(list.count()>0) { return list.at(0); } else { QContact c; return c; } }
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 }
QString CntDbInfo::getSortQuery( const QList<QContactSortOrder> &sortOrders, const QString& selectQuery, QContactManager::Error* error) { // Set to initial select query QString sortQuery = selectQuery; if(*error == QContactManager::NoError) { QStringList list; QString tempColumn; QString concatString; bool blanksLast = true; QContactSortOrder tempOrder; foreach(const QContactSortOrder& s, sortOrders ) { QString tableName; QString columnName; bool isSubType; // Get column names for sort order getDbTableAndColumnName(s.detailDefinitionName(), s.detailFieldName(), tableName, columnName, isSubType); if (tableName.compare("contact") != 0 || columnName.isEmpty()) { // Skip invalid sort clause continue; } else { // // ORDER BY str_column_1 || str_column_2 || str_column_N COLLATE (comparison function); // // The || operator concatenates the strings to avoid wrong orders in cases where // one of the rows in the colums has a NULL value // if (isStringFieldType(s.detailDefinitionName())) { if ( tempColumn.isEmpty() ) { // This is the first string. Store sortOrder and // columnName in temp variable to be used later tempColumn = columnName; tempOrder = s; continue; } else { // Check if the previous sort order has the same direction and // case sensitivity as the current one. If true store the temp // variables to be used later if (s.direction() == tempOrder.direction() && s.caseSensitivity() == tempOrder.caseSensitivity() && s.blankPolicy() == tempOrder.blankPolicy()) { tempColumn += " || " + columnName; tempOrder = s; continue; } else { // Its time to break the loop and use the tempColumn string concatString = tempColumn; setDirAndCaseSensitivity(tempOrder, tempColumn); list.append(tempColumn); tempColumn.clear(); } } } QString col = ' ' + columnName + ' '; setDirAndCaseSensitivity(s, col); list.append(col); } }