summaryrefslogtreecommitdiff
authoreilers <eilers>2005-03-18 16:03:58 (UTC)
committer eilers <eilers>2005-03-18 16:03:58 (UTC)
commitb37f4395889351829e295d6fd1b4535ad3a67728 (patch) (unidiff)
tree4d3d4f518d66df4c837f0496ce59a0a8808ebce2
parent0a81bea077a7142d3133fadcb5eba75dceadf444 (diff)
downloadopie-b37f4395889351829e295d6fd1b4535ad3a67728.zip
opie-b37f4395889351829e295d6fd1b4535ad3a67728.tar.gz
opie-b37f4395889351829e295d6fd1b4535ad3a67728.tar.bz2
Reworte generic sorted() and added filter for "DoNotShowWithCategory" needed
by addressbook
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,16 +1,18 @@
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
72004-12-28 Stefan Eilers <stefan@eilers-online.net> 92004-12-28 Stefan Eilers <stefan@eilers-online.net>
8 * Make improved query by example accessable via frontend 10 * Make improved query by example accessable via frontend
9 * Some API documentation improvement 11 * Some API documentation improvement
10 * Cleanup of backend api.. 12 * Cleanup of backend api..
11 * Fixing bug #1501 13 * Fixing bug #1501
122004-11-23 Stefan Eilers <stefan@eilers-online.net> 142004-11-23 Stefan Eilers <stefan@eilers-online.net>
13 * Implement fast and full featured version of sorted() for addressbook 15 * Implement fast and full featured version of sorted() for addressbook
14 * Implement generic queryByExample for all Addressboook backends. It allows incremental search. 16 * Implement generic queryByExample for all Addressboook backends. It allows incremental search.
15 * Update of API Documentation 17 * Update of API Documentation
162004-11-18 Holger Freyther <freyther@handhelds.org> 182004-11-18 Holger Freyther <freyther@handhelds.org>
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
@@ -233,61 +233,72 @@ bool OPimContactAccessBackend::hasQuerySettings (uint querySettings) const
233 return ( true ); 233 return ( true );
234 default: 234 default:
235 return ( false ); 235 return ( false );
236 } 236 }
237} 237}
238 238
239 239
240UIDArray OPimContactAccessBackend::sorted( const UIDArray& ar, bool asc, int sortOrder, 240UIDArray OPimContactAccessBackend::sorted( const UIDArray& ar, bool asc, int sortOrder,
241 int filter, const QArray<int>& categories )const { 241 int filter, const QArray<int>& categories )const {
242 odebug << "Using Unaccelerated OPimContactAccessBackend sorted Implementation" << oendl; 242 odebug << "Using Unaccelerated OPimContactAccessBackend sorted Implementation" << oendl;
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 );
284 /* sort it now */ 295 /* sort it now */
285 vector.sort(); 296 vector.sort();
286 /* now get the uids */ 297 /* now get the uids */
287 UIDArray array( vector.count() ); 298 UIDArray array( vector.count() );
288 for (uint i= 0; i < vector.count(); i++ ) 299 for (uint i= 0; i < vector.count(); i++ )
289 array[i] = vector.uidAt( i ); 300 array[i] = vector.uidAt( i );
290 301
291 return array; 302 return array;
292} 303}
293 304