summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/ChangeLog2
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend.cpp35
2 files changed, 25 insertions, 12 deletions
diff --git a/libopie2/opiepim/ChangeLog b/libopie2/opiepim/ChangeLog
index e94fa59..52b3f6b 100644
--- a/libopie2/opiepim/ChangeLog
+++ b/libopie2/opiepim/ChangeLog
@@ -1,6 +1,8 @@
12005-03-18 Stefan Eilers <stefan@eilers-online.net>
2 * Rewrote generic sorted filter and added filter for "DoNotShowWithCategory", needed by addressbook (other filters need to be added!)
12005-01-16 Stefan Eilers <stefan@eilers-online.net> 32005-01-16 Stefan Eilers <stefan@eilers-online.net>
2 * Added new OPimEventSortVector class, improved OPimSortVector 4 * Added new OPimEventSortVector class, improved OPimSortVector
3 * OPimAccessBackend now supports generic sorting. 5 * OPimAccessBackend now supports generic sorting.
42005-01-03 Stefan Eilers <stefan@eilers-online.net> 62005-01-03 Stefan Eilers <stefan@eilers-online.net>
5 * Fixing bug in API documentation 7 * Fixing bug in API documentation
6 * Moving hasQuerySettings() and querySettings() to OPimAccessTemplate to be available for all frontends 8 * Moving hasQuerySettings() and querySettings() to OPimAccessTemplate to be available for all frontends
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
@@ -243,41 +243,52 @@ UIDArray OPimContactAccessBackend::sorted( const UIDArray& ar, bool asc, int sor
243 243
244 Internal::OPimContactSortVector vector(ar.count(), asc, sortOrder ); 244 Internal::OPimContactSortVector vector(ar.count(), asc, sortOrder );
245 245
246 int item = 0; 246 int item = 0;
247 uint cat_count = categories.count(); 247 uint cat_count = categories.count();
248 uint eve_count = ar.count(); 248 uint eve_count = ar.count();
249 bool bCat = filter & OPimContactAccess::FilterCategory ? true : false; 249 bool contactPassed = false;
250 bool catPassed = false;
251 int cat; 250 int cat;
252 251
253 for ( uint i = 0; i < eve_count; ++i ) { 252 for ( uint i = 0; i < eve_count; ++i ) {
254 OPimContact contact = find( ar[i], ar, i, Frontend::Forward ); 253 OPimContact contact = find( ar[i], ar, i, Frontend::Forward );
255 if ( contact.isEmpty() ) 254 if ( contact.isEmpty() )
256 continue; 255 continue;
257 256
257 contactPassed = true;
258
259 // Filter all Contacts which have any category
260 if ( (filter & OPimContactAccess::DoNotShowWithCategory) ? true : false ){
261 if ( !contact.categories().isEmpty() )
262 continue;
263 }
264
258 /* show category */ 265 /* show category */
259 /* -1 == unfiled */ 266 /* -1 == unfiled */
260 catPassed = false;
261 for ( uint cat_nu = 0; cat_nu < cat_count; ++cat_nu ) { 267 for ( uint cat_nu = 0; cat_nu < cat_count; ++cat_nu ) {
262 cat = categories[cat_nu]; 268 cat = categories[cat_nu];
263 if ( bCat && cat == -1 ) { 269
264 if(!contact.categories().isEmpty() ) 270 if ( (filter & OPimContactAccess::FilterCategory) ? true : false ){
265 continue; 271 if ( cat == -1 ) {
266 } else if ( bCat && cat != 0) 272 // We should search unfiled contacts.
267 if (!contact.categories().contains( cat ) ) 273 // Unfiled categories have no category set, thus continue if
268 continue; 274 // this contact has no empty category.
269 catPassed = true; 275 if( !contact.categories().isEmpty() )
270 break; 276 contactPassed = false;
277 } else if ( cat != 0 )
278 if ( !contact.categories().contains( cat ) )
279 contactPassed = false;
280 }
281
271 } 282 }
272 283
273 /* 284 /*
274 * If none of the Categories matched 285 * If none of the Categories matched
275 * continue 286 * continue
276 */ 287 */
277 if ( !catPassed ) 288 if ( !contactPassed )
278 continue; 289 continue;
279 290
280 vector.insert(item++, contact ); 291 vector.insert(item++, contact );
281 } 292 }
282 293
283 vector.resize( item ); 294 vector.resize( item );