summaryrefslogtreecommitdiff
path: root/libopie
authoreilers <eilers>2003-07-07 16:19:47 (UTC)
committer eilers <eilers>2003-07-07 16:19:47 (UTC)
commit7fed22ccbc1272fe0c5fb1c7f47bc330f118b854 (patch) (unidiff)
tree73bd04b4fa6592f2a4caeee503c9a32ac89e24e8 /libopie
parent1c24ec58bd7fc8a0a46cdaf41e4c6b7e68e4dba6 (diff)
downloadopie-7fed22ccbc1272fe0c5fb1c7f47bc330f118b854.zip
opie-7fed22ccbc1272fe0c5fb1c7f47bc330f118b854.tar.gz
opie-7fed22ccbc1272fe0c5fb1c7f47bc330f118b854.tar.bz2
Fixing serious bug in hasQuerySettings()
Diffstat (limited to 'libopie') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/pim/ocontactaccessbackend_xml.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/libopie/pim/ocontactaccessbackend_xml.cpp b/libopie/pim/ocontactaccessbackend_xml.cpp
index 661cd51..097142b 100644
--- a/libopie/pim/ocontactaccessbackend_xml.cpp
+++ b/libopie/pim/ocontactaccessbackend_xml.cpp
@@ -4,32 +4,35 @@
4 * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de) 4 * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de)
5 * 5 *
6 * ===================================================================== 6 * =====================================================================
7 *This program is free software; you can redistribute it and/or 7 *This program is free software; you can redistribute it and/or
8 *modify it under the terms of the GNU Library General Public 8 *modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
11 * ===================================================================== 11 * =====================================================================
12 * ToDo: XML-Backend: Automatic reload if something was changed... 12 * ToDo: XML-Backend: Automatic reload if something was changed...
13 * 13 *
14 * 14 *
15 * ===================================================================== 15 * =====================================================================
16 * Version: $Id$ 16 * Version: $Id$
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.6 2003/07/07 16:19:47 eilers
21 * Fixing serious bug in hasQuerySettings()
22 *
20 * Revision 1.5 2003/04/13 18:07:10 zecke 23 * Revision 1.5 2003/04/13 18:07:10 zecke
21 * More API doc 24 * More API doc
22 * QString -> const QString& 25 * QString -> const QString&
23 * QString = 0l -> QString::null 26 * QString = 0l -> QString::null
24 * 27 *
25 * Revision 1.4 2003/03/21 14:32:54 mickeyl 28 * Revision 1.4 2003/03/21 14:32:54 mickeyl
26 * g++ compliance fix: default arguments belong into the declaration, but not the definition 29 * g++ compliance fix: default arguments belong into the declaration, but not the definition
27 * 30 *
28 * Revision 1.3 2003/03/21 12:26:28 eilers 31 * Revision 1.3 2003/03/21 12:26:28 eilers
29 * Fixing small bug: If we search a birthday from today to today, it returned 32 * Fixing small bug: If we search a birthday from today to today, it returned
30 * every contact .. 33 * every contact ..
31 * 34 *
32 * Revision 1.2 2003/03/21 10:33:09 eilers 35 * Revision 1.2 2003/03/21 10:33:09 eilers
33 * Merged speed optimized xml backend for contacts to main. 36 * Merged speed optimized xml backend for contacts to main.
34 * Added QDateTime to querybyexample. For instance, it is now possible to get 37 * Added QDateTime to querybyexample. For instance, it is now possible to get
35 * all Birthdays/Anniversaries between two dates. This should be used 38 * all Birthdays/Anniversaries between two dates. This should be used
@@ -434,48 +437,67 @@ const uint OContactAccessBackend_XML::querySettings()
434 | OContactAccess::RegExp 437 | OContactAccess::RegExp
435 | OContactAccess::ExactMatch 438 | OContactAccess::ExactMatch
436 | OContactAccess::DateDiff 439 | OContactAccess::DateDiff
437 | OContactAccess::DateYear 440 | OContactAccess::DateYear
438 | OContactAccess::DateMonth 441 | OContactAccess::DateMonth
439 | OContactAccess::DateDay 442 | OContactAccess::DateDay
440 ); 443 );
441} 444}
442 445
443bool OContactAccessBackend_XML::hasQuerySettings (uint querySettings) const 446bool OContactAccessBackend_XML::hasQuerySettings (uint querySettings) const
444{ 447{
445 /* OContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay 448 /* OContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay
446 * may be added with any of the other settings. IgnoreCase should never used alone. 449 * may be added with any of the other settings. IgnoreCase should never used alone.
447 * Wildcards, RegExp, ExactMatch should never used at the same time... 450 * Wildcards, RegExp, ExactMatch should never used at the same time...
448 */ 451 */
449 452
453 // Step 1: Check whether the given settings are supported by this backend
454 if ( ( querySettings & (
455 OContactAccess::IgnoreCase
456 | OContactAccess::WildCards
457 | OContactAccess::DateDiff
458 | OContactAccess::DateYear
459 | OContactAccess::DateMonth
460 | OContactAccess::DateDay
461 | OContactAccess::RegExp
462 | OContactAccess::ExactMatch
463 ) ) != querySettings )
464 return false;
465
466 // Step 2: Check whether the given combinations are ok..
467
468 // IngoreCase alone is invalid
450 if ( querySettings == OContactAccess::IgnoreCase ) 469 if ( querySettings == OContactAccess::IgnoreCase )
451 return false; 470 return false;
452 471
472 // WildCards, RegExp and ExactMatch should never used at the same time
453 switch ( querySettings & ~( OContactAccess::IgnoreCase 473 switch ( querySettings & ~( OContactAccess::IgnoreCase
454 | OContactAccess::DateDiff 474 | OContactAccess::DateDiff
455 | OContactAccess::DateYear 475 | OContactAccess::DateYear
456 | OContactAccess::DateMonth 476 | OContactAccess::DateMonth
457 | OContactAccess::DateDay 477 | OContactAccess::DateDay
458 ) 478 )
459 ){ 479 ){
460 case OContactAccess::RegExp: 480 case OContactAccess::RegExp:
461 return ( true ); 481 return ( true );
462 case OContactAccess::WildCards: 482 case OContactAccess::WildCards:
463 return ( true ); 483 return ( true );
464 case OContactAccess::ExactMatch: 484 case OContactAccess::ExactMatch:
465 return ( true ); 485 return ( true );
486 case 0: // one of the upper removed bits were set..
487 return ( true );
466 default: 488 default:
467 return ( false ); 489 return ( false );
468 } 490 }
469} 491}
470 492
471// Currently only asc implemented.. 493// Currently only asc implemented..
472QArray<int> OContactAccessBackend_XML::sorted( bool asc, int , int , int ) 494QArray<int> OContactAccessBackend_XML::sorted( bool asc, int , int , int )
473{ 495{
474 QMap<QString, int> nameToUid; 496 QMap<QString, int> nameToUid;
475 QStringList names; 497 QStringList names;
476 QArray<int> m_currentQuery( m_contactList.count() ); 498 QArray<int> m_currentQuery( m_contactList.count() );
477 499
478 // First fill map and StringList with all Names 500 // First fill map and StringList with all Names
479 // Afterwards sort namelist and use map to fill array to return.. 501 // Afterwards sort namelist and use map to fill array to return..
480 QListIterator<OContact> it( m_contactList ); 502 QListIterator<OContact> it( m_contactList );
481 for( ; it.current(); ++it ){ 503 for( ; it.current(); ++it ){