author | eilers <eilers> | 2005-03-18 16:03:58 (UTC) |
---|---|---|
committer | eilers <eilers> | 2005-03-18 16:03:58 (UTC) |
commit | b37f4395889351829e295d6fd1b4535ad3a67728 (patch) (side-by-side diff) | |
tree | 4d3d4f518d66df4c837f0496ce59a0a8808ebce2 /libopie2/opiepim/backend/ocontactaccessbackend.cpp | |
parent | 0a81bea077a7142d3133fadcb5eba75dceadf444 (diff) | |
download | opie-b37f4395889351829e295d6fd1b4535ad3a67728.zip opie-b37f4395889351829e295d6fd1b4535ad3a67728.tar.gz opie-b37f4395889351829e295d6fd1b4535ad3a67728.tar.bz2 |
Reworte generic sorted() and added filter for "DoNotShowWithCategory" needed
by addressbook
Diffstat (limited to 'libopie2/opiepim/backend/ocontactaccessbackend.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie2/opiepim/backend/ocontactaccessbackend.cpp | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend.cpp b/libopie2/opiepim/backend/ocontactaccessbackend.cpp index c09427c..6ac9934 100644 --- a/libopie2/opiepim/backend/ocontactaccessbackend.cpp +++ b/libopie2/opiepim/backend/ocontactaccessbackend.cpp @@ -185,131 +185,142 @@ const uint OPimContactAccessBackend::querySettings() const | OPimContactAccess::DateDiff | OPimContactAccess::DateYear | OPimContactAccess::DateMonth | OPimContactAccess::DateDay ); } bool OPimContactAccessBackend::hasQuerySettings (uint querySettings) const { /* OPimContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay * may be added with any of the other settings. IgnoreCase should never used alone. * Wildcards, RegExp, ExactMatch should never used at the same time... */ // Step 1: Check whether the given settings are supported by this backend if ( ( querySettings & ( OPimContactAccess::IgnoreCase | OPimContactAccess::WildCards | OPimContactAccess::DateDiff | OPimContactAccess::DateYear | OPimContactAccess::DateMonth | OPimContactAccess::DateDay | OPimContactAccess::RegExp | OPimContactAccess::ExactMatch ) ) != querySettings ) return false; // Step 2: Check whether the given combinations are ok.. // IngoreCase alone is invalid if ( querySettings == OPimContactAccess::IgnoreCase ) return false; // WildCards, RegExp and ExactMatch should never used at the same time switch ( querySettings & ~( OPimContactAccess::IgnoreCase | OPimContactAccess::DateDiff | OPimContactAccess::DateYear | OPimContactAccess::DateMonth | OPimContactAccess::DateDay ) ){ case OPimContactAccess::RegExp: return ( true ); case OPimContactAccess::WildCards: return ( true ); case OPimContactAccess::ExactMatch: return ( true ); case 0: // one of the upper removed bits were set.. return ( true ); default: return ( false ); } } UIDArray OPimContactAccessBackend::sorted( const UIDArray& ar, bool asc, int sortOrder, int filter, const QArray<int>& categories )const { odebug << "Using Unaccelerated OPimContactAccessBackend sorted Implementation" << oendl; Internal::OPimContactSortVector vector(ar.count(), asc, sortOrder ); int item = 0; uint cat_count = categories.count(); uint eve_count = ar.count(); - bool bCat = filter & OPimContactAccess::FilterCategory ? true : false; - bool catPassed = false; + bool contactPassed = false; int cat; for ( uint i = 0; i < eve_count; ++i ) { OPimContact contact = find( ar[i], ar, i, Frontend::Forward ); if ( contact.isEmpty() ) continue; + contactPassed = true; + + // Filter all Contacts which have any category + if ( (filter & OPimContactAccess::DoNotShowWithCategory) ? true : false ){ + if ( !contact.categories().isEmpty() ) + continue; + } + /* show category */ /* -1 == unfiled */ - catPassed = false; for ( uint cat_nu = 0; cat_nu < cat_count; ++cat_nu ) { cat = categories[cat_nu]; - if ( bCat && cat == -1 ) { - if(!contact.categories().isEmpty() ) - continue; - } else if ( bCat && cat != 0) - if (!contact.categories().contains( cat ) ) - continue; - catPassed = true; - break; + + if ( (filter & OPimContactAccess::FilterCategory) ? true : false ){ + if ( cat == -1 ) { + // We should search unfiled contacts. + // Unfiled categories have no category set, thus continue if + // this contact has no empty category. + if( !contact.categories().isEmpty() ) + contactPassed = false; + } else if ( cat != 0 ) + if ( !contact.categories().contains( cat ) ) + contactPassed = false; + } + } /* * If none of the Categories matched * continue */ - if ( !catPassed ) + if ( !contactPassed ) continue; vector.insert(item++, contact ); } vector.resize( item ); /* sort it now */ vector.sort(); /* now get the uids */ UIDArray array( vector.count() ); for (uint i= 0; i < vector.count(); i++ ) array[i] = vector.uidAt( i ); return array; } OPimBackendOccurrence::List OPimContactAccessBackend::occurrences( const QDate& start, const QDate& end)const { OPimBackendOccurrence::List lst; UIDArray records = allRecords(); const uint count = records.count(); int uid; for ( uint i = 0; i < count; ++i ) { uid = records[i]; OPimContact contact = find(uid, records, i, Frontend::Forward ); QDate date = contact.anniversary(); date = QDate( start.year(), date.month(),date.day() ); // if ( date.isValid() && date.) { // } } return lst; } } |