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 | |||
@@ -201,115 +201,126 @@ bool OPimContactAccessBackend::hasQuerySettings (uint querySettings) const | |||
201 | OPimContactAccess::IgnoreCase | 201 | OPimContactAccess::IgnoreCase |
202 | | OPimContactAccess::WildCards | 202 | | OPimContactAccess::WildCards |
203 | | OPimContactAccess::DateDiff | 203 | | OPimContactAccess::DateDiff |
204 | | OPimContactAccess::DateYear | 204 | | OPimContactAccess::DateYear |
205 | | OPimContactAccess::DateMonth | 205 | | OPimContactAccess::DateMonth |
206 | | OPimContactAccess::DateDay | 206 | | OPimContactAccess::DateDay |
207 | | OPimContactAccess::RegExp | 207 | | OPimContactAccess::RegExp |
208 | | OPimContactAccess::ExactMatch | 208 | | OPimContactAccess::ExactMatch |
209 | ) ) != querySettings ) | 209 | ) ) != querySettings ) |
210 | return false; | 210 | return false; |
211 | 211 | ||
212 | // Step 2: Check whether the given combinations are ok.. | 212 | // Step 2: Check whether the given combinations are ok.. |
213 | 213 | ||
214 | // IngoreCase alone is invalid | 214 | // IngoreCase alone is invalid |
215 | if ( querySettings == OPimContactAccess::IgnoreCase ) | 215 | if ( querySettings == OPimContactAccess::IgnoreCase ) |
216 | return false; | 216 | return false; |
217 | 217 | ||
218 | // WildCards, RegExp and ExactMatch should never used at the same time | 218 | // WildCards, RegExp and ExactMatch should never used at the same time |
219 | switch ( querySettings & ~( OPimContactAccess::IgnoreCase | 219 | switch ( querySettings & ~( OPimContactAccess::IgnoreCase |
220 | | OPimContactAccess::DateDiff | 220 | | OPimContactAccess::DateDiff |
221 | | OPimContactAccess::DateYear | 221 | | OPimContactAccess::DateYear |
222 | | OPimContactAccess::DateMonth | 222 | | OPimContactAccess::DateMonth |
223 | | OPimContactAccess::DateDay | 223 | | OPimContactAccess::DateDay |
224 | ) | 224 | ) |
225 | ){ | 225 | ){ |
226 | case OPimContactAccess::RegExp: | 226 | case OPimContactAccess::RegExp: |
227 | return ( true ); | 227 | return ( true ); |
228 | case OPimContactAccess::WildCards: | 228 | case OPimContactAccess::WildCards: |
229 | return ( true ); | 229 | return ( true ); |
230 | case OPimContactAccess::ExactMatch: | 230 | case OPimContactAccess::ExactMatch: |
231 | return ( true ); | 231 | return ( true ); |
232 | case 0: // one of the upper removed bits were set.. | 232 | case 0: // one of the upper removed bits were set.. |
233 | return ( true ); | 233 | return ( true ); |
234 | default: | 234 | default: |
235 | return ( false ); | 235 | return ( false ); |
236 | } | 236 | } |
237 | } | 237 | } |
238 | 238 | ||
239 | 239 | ||
240 | UIDArray OPimContactAccessBackend::sorted( const UIDArray& ar, bool asc, int sortOrder, | 240 | UIDArray 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 | ||
294 | OPimBackendOccurrence::List OPimContactAccessBackend::occurrences( const QDate& start, | 305 | OPimBackendOccurrence::List OPimContactAccessBackend::occurrences( const QDate& start, |
295 | const QDate& end)const { | 306 | const QDate& end)const { |
296 | OPimBackendOccurrence::List lst; | 307 | OPimBackendOccurrence::List lst; |
297 | 308 | ||
298 | UIDArray records = allRecords(); | 309 | UIDArray records = allRecords(); |
299 | const uint count = records.count(); | 310 | const uint count = records.count(); |
300 | int uid; | 311 | int uid; |
301 | 312 | ||
302 | for ( uint i = 0; i < count; ++i ) { | 313 | for ( uint i = 0; i < count; ++i ) { |
303 | uid = records[i]; | 314 | uid = records[i]; |
304 | OPimContact contact = find(uid, records, i, Frontend::Forward ); | 315 | OPimContact contact = find(uid, records, i, Frontend::Forward ); |
305 | 316 | ||
306 | QDate date = contact.anniversary(); | 317 | QDate date = contact.anniversary(); |
307 | date = QDate( start.year(), date.month(),date.day() ); | 318 | date = QDate( start.year(), date.month(),date.day() ); |
308 | 319 | ||
309 | // if ( date.isValid() && date.) { | 320 | // if ( date.isValid() && date.) { |
310 | // } | 321 | // } |
311 | } | 322 | } |
312 | 323 | ||
313 | return lst; | 324 | return lst; |
314 | } | 325 | } |
315 | } | 326 | } |