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();
}
Пример #2
0
void QDeclarativeContactSortOrder::setSortOrder(const QContactSortOrder& sortOrder)
{
    m_sortOrder = sortOrder;
    m_field = sortOrder.detailFieldName();
    m_detail = sortOrder.detailDefinitionName();
    emit sortOrderChanged();
}
Пример #3
0
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
}
Пример #4
0
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;    
	} 

} 
Пример #5
0
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

}
Пример #6
0
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);
            }
        }