bool CntFilterDetail::filterSupported(const QContactFilter& filter) 
{
    bool result = false;
    if (QContactFilter::ContactDetailFilter == filter.type()) {
        QContactDetailFilter detailFilter = static_cast<QContactFilter>(filter);
        if (m_dbInfo.SupportsDetail(detailFilter.detailDefinitionName(),
                detailFilter.detailFieldName())) {
            result = true;
        }
        else if (detailFilter.detailDefinitionName() == QContactPhoneNumber::DefinitionName &&
            detailFilter.detailFieldName() == QContactPhoneNumber::FieldNumber) {
            //special case - phone number matching 
            result = true;
        }
        else if (detailFilter.detailDefinitionName() == QContactType::DefinitionName &&
            detailFilter.detailFieldName() == QContactType::FieldType) {
            //filtering by contact type is supported
            result = true;
        }
        else if (detailFilter.detailDefinitionName() == QContactGuid::DefinitionName &&
            detailFilter.detailFieldName() == QContactGuid::FieldGuid) {
            //filtering by global Uid is supported
            result = true;
        }
    }
    return result;
}
示例#2
0
bool CntFilterIntersection::filterSupported(const QContactFilter& filter) 
{
    bool result = false;
    if (QContactFilter::IntersectionFilter == filter.type()) {
       result = true;
    }
    return result;
}
示例#3
0
bool CntFilterDefault::filterSupported(const QContactFilter& filter)
{
    bool result = false;
    if(QContactFilter::DefaultFilter == filter.type())
    {
        result = true;
    }

    return result;
}
/*!
 * The contact database version implementation for QContactManager::contacts
 * function. See filterSupported for the list of supported filters.
 * All the other filtering flags fallback to the generic filtering done
 * in QContactManagerEngine (expected to be done by to the caller). Contacts
 * are sorted only if the sort order is supported by contacts database. See
 * CntSymbianSorterDbms::filterSupportLevel for the list of supported sort
 * orders.
 * 
 * Using detail filter with match flag MatchPhoneNumber is implemented by the
 * contact model "phone number match" that filters by comparing the search
 * string characters (digits) starting from the rightmost digit. The detail
 * filter value must be at least 7 digits, otherwise an error code
 * NotSupportedError is given. The actual digit count that is used is 7 to 15
 * digits, depending on the configuration of the device.
 *
 * \a filter The QContactFilter to be used.
 * \a sortOrders The sort orders to be used. If the sort orders are not
 * supported by contacts database this parameter is ignored and sorting needs
 * to be done by the caller.
 * \a error On return, contains the possible error in filtering/sorting.
 */
QList<QContactLocalId> CntSymbianFilter::contacts(
    const QContactFilter &filter,
    const QList<QContactSortOrder> &sortOrders,
    bool &filterSupportedFlag,
    QContactManager::Error* error)
{
    QList<QContactLocalId> result;

    // No need to proceed if some of the filters in the chain is not supported
    if(!filterSupportedFlag) return result;

    // Intersection filter is handled by a recursive function call for each
    // contained filter (unless at least one requires slow filtering)
    if (filter.type() == QContactFilter::IntersectionFilter) {
        QList<QContactFilter> filters = ((QContactIntersectionFilter) filter).filters();
        for(int i(0); filterSupportedFlag && i < filters.count(); i++) {
            if(result.isEmpty())
                result = contacts(filters[i], sortOrders, filterSupportedFlag, error);
            else
                result = contacts(filters[i], sortOrders, filterSupportedFlag, error).toSet().intersect(result.toSet()).toList();
        }
    // Union filter is handled by a recursive function call for each
    // contained filter (unless at least one requires slow filtering)
    } else if (filter.type() == QContactFilter::UnionFilter) {
        QList<QContactFilter> filters = ((QContactUnionFilter) filter).filters();
        for(int i(0); filterSupportedFlag && i < filters.count(); i++) {
            if(result.isEmpty())
                result = contacts(filters[i], sortOrders, filterSupportedFlag, error);
            else
                result = (contacts(filters[i], sortOrders, filterSupportedFlag, error).toSet() + result.toSet()).toList();
        }
    // Detail filter with a string list is split and re-constructed into
    // an intersection filter
    } else if (filter.type() == QContactFilter::ContactDetailFilter
            && (static_cast<const QContactDetailFilter &>(filter)).value().type() == QVariant::StringList) {
        QStringList values = (static_cast<const QContactDetailFilter &>(filter)).value().toStringList();
        QContactIntersectionFilter intersectionFilter;
        foreach(const QString& value, values) {
            QContactDetailFilter detailFilter = filter;
            detailFilter.setValue(value);
            intersectionFilter.append(detailFilter);
        }
示例#5
0
bool CntFilterRelationship::filterSupported(const QContactFilter& filter) 
{
    bool result = false;
    if (QContactFilter::RelationshipFilter == filter.type()) {
        QContactRelationshipFilter relationfilter(filter);
        if(relationfilter.relationshipType() == QContactRelationship::HasMember) {
            result = true;
        }
    }
 
    return result;
}
示例#6
0
void CntFilterIntersection::getSelectQueryforFilter(const QContactFilter& filter,
                                                    QString& sqlSelectQuery,
                                                    QContactManager::Error* error)
{
    switch(filter.type()) {
        case QContactFilter::DefaultFilter: {
            CntFilterDefault defaultfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
            defaultfltr.createSelectQuery(filter,sqlSelectQuery,error);
            break;
        }
        case QContactFilter::ContactDetailFilter: {
            QContactDetailFilter detailfilter(filter);
            if (detailfilter.detailDefinitionName() == QContactPhoneNumber::DefinitionName ) {
                CntFilterDetail dtlfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
#ifdef PBK_UNIT_TEST
            if (m_emulateBestMatching) {
                dtlfltr.emulateBestMatching();
            }
#endif
                dtlfltr.createPhoneNumberQuery(filter,sqlSelectQuery,error);
            }
            else {
                CntFilterDetail dtlfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
                dtlfltr.createSelectQuery(filter,sqlSelectQuery,error);
            }
            break;
        }
        case QContactFilter::RelationshipFilter: {
            CntFilterRelationship relationfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
            relationfltr.createSelectQuery(filter,sqlSelectQuery,error);
            break;
        }
        case QContactFilter::IntersectionFilter: {
            sqlSelectQuery += "SELECT DISTINCT contact_id FROM (";
            CntFilterIntersection intersectionfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
            intersectionfltr.createSelectQuery(filter,sqlSelectQuery,error);
            sqlSelectQuery += ')';
            break;
        }
        case QContactFilter::UnionFilter: {
            sqlSelectQuery += "SELECT DISTINCT contact_id FROM (";
            CntFilterUnion unionfltr(m_contactdatabase,m_srvConnection,m_dbInfo);
            unionfltr.createSelectQuery(filter,sqlSelectQuery,error);
            sqlSelectQuery += ')';
            break;
        }
        default: {
            *error = QContactManager::NotSupportedError;
            break;
        }
    }
}
示例#7
0
/*! Returns true if the filter has the same type and criteria as \a other
  \since 1.0
*/
bool QContactFilter::operator==(const QContactFilter& other) const
{
    /* A default filter is only equal to other default filters */
    if (!d_ptr)
        return !other.d_ptr;

    /* Different types can't be equal */
    if (other.type() != type())
        return false;

    /* Otherwise, use the virtual op == */
    return d_ptr->compare(other.d_ptr);
}
/*! \reimp */
bool QContactWinCEEngine::isFilterSupported(const QContactFilter& filter) const
{
    switch (filter.type()) {
        case QContactFilter::InvalidFilter:
        case QContactFilter::DefaultFilter:
        case QContactFilter::LocalIdFilter:
        case QContactFilter::ContactDetailFilter:
        case QContactFilter::ContactDetailRangeFilter:
        case QContactFilter::ActionFilter:
        case QContactFilter::IntersectionFilter:
        case QContactFilter::UnionFilter:
            return true;
    }
    return false;
}
bool CntFilterDetailDisplayLabel::filterSupported(const QContactFilter& filter) 
{
    bool result = false;

    if( filter.type() == QContactFilter::ContactDetailFilter)
    {
        const QContactDetailFilter detailFilter(filter);
        
        if (detailFilter.detailDefinitionName() == QContactDisplayLabel::DefinitionName)
        {
            result = true;
        }
    }
    
    return false;
}
bool CntFilterDetail::filterSupported(const QContactFilter& filter) 
{
    bool result = false;
    if (QContactFilter::ContactDetailFilter == filter.type()) {
        QContactDetailFilter detailFilter = static_cast<QContactFilter>(filter);
        if (m_dbInfo.SupportsDetail(detailFilter.detailDefinitionName(),
                detailFilter.detailFieldName())) {
            result = true;
        }
        if (detailFilter.detailDefinitionName() == QContactPhoneNumber::DefinitionName &&
            detailFilter.detailFieldName() == QContactPhoneNumber::FieldNumber) {
            //cpecial case - phone number matching 
            result = true;
        }
    }
    return result;
}
QList<QContactLocalId>  CntFilterDetail::HandlePredictiveSearchFilter(const QContactFilter& filter,
                                                                      QContactManager::Error* error)
{
    if (filter.type() == QContactFilter::ContactDetailFilter) {
        const QContactDetailFilter detailFilter(filter);
        if (detailFilter.matchFlags() == QContactFilter::MatchKeypadCollation) {
            QString pattern = detailFilter.value().toString();
            //if ( detailFilter.detailFieldName() == QContactEmailAddress::FieldEmailAddress ) {
                return  m_srvConnection.searchOnServer(
                        pattern, CntSymbianSrvConnection::CntPredictiveSearchList, error);
            /*} else {
                QString sqlQuery;
                CntSqlSearch sqlSearch;
                //convert string to numeric format
                sqlQuery = sqlSearch.CreatePredictiveSearch(pattern);
                return  m_srvConnection.searchContacts(sqlQuery, error);
            }*/
        }
    }
    return QList<QContactLocalId>();
}