summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie/pim/ocontactaccess.h10
-rw-r--r--libopie/pim/ocontactaccessbackend_xml.h89
-rw-r--r--libopie2/opiepim/backend/ocontactaccessbackend_xml.h89
-rw-r--r--libopie2/opiepim/core/ocontactaccess.h10
4 files changed, 178 insertions, 20 deletions
diff --git a/libopie/pim/ocontactaccess.h b/libopie/pim/ocontactaccess.h
index 961968f..32b2dcb 100644
--- a/libopie/pim/ocontactaccess.h
+++ b/libopie/pim/ocontactaccess.h
@@ -17,6 +17,10 @@
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.6 2003/01/02 14:27:12 eilers
21 * Improved query by example: Search by date is possible.. First step
22 * for a today plugin for birthdays..
23 *
20 * Revision 1.5 2002/11/13 14:14:51 eilers 24 * Revision 1.5 2002/11/13 14:14:51 eilers
21 * Added sorted for Contacts.. 25 * Added sorted for Contacts..
22 * 26 *
@@ -88,7 +92,11 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact>
88 IgnoreCase = 0x0002, 92 IgnoreCase = 0x0002,
89 RegExp = 0x0004, 93 RegExp = 0x0004,
90 ExactMatch = 0x0008, 94 ExactMatch = 0x0008,
91 MatchOne = 0x0010 // Only one Entry must match 95 MatchOne = 0x0010, // Only one Entry must match
96 DateDiff = 0x0020, // Find all entries from today until given date
97 DateYear = 0x0040, // The year matches
98 DateMonth = 0x0080, // The month matches
99 DateDay = 0x0100, // The day matches
92 }; 100 };
93 101
94 102
diff --git a/libopie/pim/ocontactaccessbackend_xml.h b/libopie/pim/ocontactaccessbackend_xml.h
index c765ff5..c6e6cbc 100644
--- a/libopie/pim/ocontactaccessbackend_xml.h
+++ b/libopie/pim/ocontactaccessbackend_xml.h
@@ -17,6 +17,10 @@
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.10 2003/01/02 14:27:12 eilers
21 * Improved query by example: Search by date is possible.. First step
22 * for a today plugin for birthdays..
23 *
20 * Revision 1.9 2002/12/08 12:48:57 eilers 24 * Revision 1.9 2002/12/08 12:48:57 eilers
21 * Moved journal-enum from ocontact into i the xml-backend.. 25 * Moved journal-enum from ocontact into i the xml-backend..
22 * 26 *
@@ -60,6 +64,7 @@
60#include <qregexp.h> 64#include <qregexp.h>
61#include <qarray.h> 65#include <qarray.h>
62#include <qmap.h> 66#include <qmap.h>
67#include <qdatetime.h>
63 68
64#include <qpe/global.h> 69#include <qpe/global.h>
65 70
@@ -225,11 +230,61 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
225 /* Search all fields and compare them with query object. Store them into list 230 /* Search all fields and compare them with query object. Store them into list
226 * if all fields matches. 231 * if all fields matches.
227 */ 232 */
233 QDate* queryDate = 0l;
234 QDate* checkDate = 0l;
228 bool allcorrect = true; 235 bool allcorrect = true;
229 for ( int i = 0; i < Qtopia::rid; i++ ) { 236 for ( int i = 0; i < Qtopia::Groups; i++ ) {
237 // Birthday and anniversary are special nonstring fields and should
238 // be handled especially
239 switch ( i ){
240 case Qtopia::Birthday:
241 queryDate = new QDate( query.birthday() );
242 checkDate = new QDate( (*it).birthday() );
243 case Qtopia::Anniversary:
244 if ( queryDate == 0l ){
245 queryDate = new QDate( query.anniversary() );
246 checkDate = new QDate( (*it).anniversary() );
247 }
248
249 if ( queryDate->isValid() ){
250 if ( settings & OContactAccess::DateYear ){
251 if ( queryDate->year() != checkDate->year() )
252 allcorrect = false;
253 }
254 if ( settings & OContactAccess::DateMonth ){
255 if ( queryDate->month() != checkDate->month() )
256 allcorrect = false;
257 }
258 if ( settings & OContactAccess::DateDay ){
259 if ( queryDate->day() != checkDate->day() )
260 allcorrect = false;
261 }
262 if ( settings & OContactAccess::DateDiff ) {
263 QDate current = QDate::currentDate();
264 if ( current.daysTo( *queryDate ) > 0 ){
265 if ( !( ( *checkDate >= current ) &&
266 ( *checkDate <= *queryDate ) ) )
267 allcorrect = false;
268 }
269 }
270 }
271
272 delete queryDate;
273 queryDate = 0l;
274 delete checkDate;
275 checkDate = 0l;
276 break;
277 default:
230 /* Just compare fields which are not empty in the query object */ 278 /* Just compare fields which are not empty in the query object */
231 if ( !query.field(i).isEmpty() ){ 279 if ( !query.field(i).isEmpty() ){
232 switch ( settings & ~OContactAccess::IgnoreCase ){ 280 switch ( settings & ~( OContactAccess::IgnoreCase
281 | OContactAccess::DateDiff
282 | OContactAccess::DateYear
283 | OContactAccess::DateMonth
284 | OContactAccess::DateDay
285 | OContactAccess::MatchOne
286 ) ){
287
233 case OContactAccess::RegExp:{ 288 case OContactAccess::RegExp:{
234 QRegExp expr ( query.field(i), 289 QRegExp expr ( query.field(i),
235 !(settings & OContactAccess::IgnoreCase), 290 !(settings & OContactAccess::IgnoreCase),
@@ -260,6 +315,7 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
260 } 315 }
261 } 316 }
262 } 317 }
318 }
263 if ( allcorrect ){ 319 if ( allcorrect ){
264 m_currentQuery[arraycounter++] = (*it).uid(); 320 m_currentQuery[arraycounter++] = (*it).uid();
265 } 321 }
@@ -291,18 +347,33 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
291 const uint querySettings() 347 const uint querySettings()
292 { 348 {
293 return ( OContactAccess::WildCards 349 return ( OContactAccess::WildCards
294 & OContactAccess::IgnoreCase 350 | OContactAccess::IgnoreCase
295 & OContactAccess::RegExp 351 | OContactAccess::RegExp
296 & OContactAccess::ExactMatch ); 352 | OContactAccess::ExactMatch
353 | OContactAccess::DateDiff
354 | OContactAccess::DateYear
355 | OContactAccess::DateMonth
356 | OContactAccess::DateDay
357 );
297 } 358 }
298 359
299 bool hasQuerySettings (uint querySettings) const 360 bool hasQuerySettings (uint querySettings) const
300 { 361 {
301 /* OContactAccess::IgnoreCase may be added with one 362 /* OContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay
302 * of the other settings, but never used alone. 363 * may be added with any of the other settings. IgnoreCase should never used alone.
303 * The other settings are just valid alone... 364 * Wildcards, RegExp, ExactMatch should never used at the same time...
304 */ 365 */
305 switch ( querySettings & ~OContactAccess::IgnoreCase ){ 366
367 if ( querySettings == OContactAccess::IgnoreCase )
368 return false;
369
370 switch ( querySettings & ~( OContactAccess::IgnoreCase
371 | OContactAccess::DateDiff
372 | OContactAccess::DateYear
373 | OContactAccess::DateMonth
374 | OContactAccess::DateDay
375 )
376 ){
306 case OContactAccess::RegExp: 377 case OContactAccess::RegExp:
307 return ( true ); 378 return ( true );
308 case OContactAccess::WildCards: 379 case OContactAccess::WildCards:
diff --git a/libopie2/opiepim/backend/ocontactaccessbackend_xml.h b/libopie2/opiepim/backend/ocontactaccessbackend_xml.h
index c765ff5..c6e6cbc 100644
--- a/libopie2/opiepim/backend/ocontactaccessbackend_xml.h
+++ b/libopie2/opiepim/backend/ocontactaccessbackend_xml.h
@@ -17,6 +17,10 @@
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.10 2003/01/02 14:27:12 eilers
21 * Improved query by example: Search by date is possible.. First step
22 * for a today plugin for birthdays..
23 *
20 * Revision 1.9 2002/12/08 12:48:57 eilers 24 * Revision 1.9 2002/12/08 12:48:57 eilers
21 * Moved journal-enum from ocontact into i the xml-backend.. 25 * Moved journal-enum from ocontact into i the xml-backend..
22 * 26 *
@@ -60,6 +64,7 @@
60#include <qregexp.h> 64#include <qregexp.h>
61#include <qarray.h> 65#include <qarray.h>
62#include <qmap.h> 66#include <qmap.h>
67#include <qdatetime.h>
63 68
64#include <qpe/global.h> 69#include <qpe/global.h>
65 70
@@ -225,11 +230,61 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
225 /* Search all fields and compare them with query object. Store them into list 230 /* Search all fields and compare them with query object. Store them into list
226 * if all fields matches. 231 * if all fields matches.
227 */ 232 */
233 QDate* queryDate = 0l;
234 QDate* checkDate = 0l;
228 bool allcorrect = true; 235 bool allcorrect = true;
229 for ( int i = 0; i < Qtopia::rid; i++ ) { 236 for ( int i = 0; i < Qtopia::Groups; i++ ) {
237 // Birthday and anniversary are special nonstring fields and should
238 // be handled especially
239 switch ( i ){
240 case Qtopia::Birthday:
241 queryDate = new QDate( query.birthday() );
242 checkDate = new QDate( (*it).birthday() );
243 case Qtopia::Anniversary:
244 if ( queryDate == 0l ){
245 queryDate = new QDate( query.anniversary() );
246 checkDate = new QDate( (*it).anniversary() );
247 }
248
249 if ( queryDate->isValid() ){
250 if ( settings & OContactAccess::DateYear ){
251 if ( queryDate->year() != checkDate->year() )
252 allcorrect = false;
253 }
254 if ( settings & OContactAccess::DateMonth ){
255 if ( queryDate->month() != checkDate->month() )
256 allcorrect = false;
257 }
258 if ( settings & OContactAccess::DateDay ){
259 if ( queryDate->day() != checkDate->day() )
260 allcorrect = false;
261 }
262 if ( settings & OContactAccess::DateDiff ) {
263 QDate current = QDate::currentDate();
264 if ( current.daysTo( *queryDate ) > 0 ){
265 if ( !( ( *checkDate >= current ) &&
266 ( *checkDate <= *queryDate ) ) )
267 allcorrect = false;
268 }
269 }
270 }
271
272 delete queryDate;
273 queryDate = 0l;
274 delete checkDate;
275 checkDate = 0l;
276 break;
277 default:
230 /* Just compare fields which are not empty in the query object */ 278 /* Just compare fields which are not empty in the query object */
231 if ( !query.field(i).isEmpty() ){ 279 if ( !query.field(i).isEmpty() ){
232 switch ( settings & ~OContactAccess::IgnoreCase ){ 280 switch ( settings & ~( OContactAccess::IgnoreCase
281 | OContactAccess::DateDiff
282 | OContactAccess::DateYear
283 | OContactAccess::DateMonth
284 | OContactAccess::DateDay
285 | OContactAccess::MatchOne
286 ) ){
287
233 case OContactAccess::RegExp:{ 288 case OContactAccess::RegExp:{
234 QRegExp expr ( query.field(i), 289 QRegExp expr ( query.field(i),
235 !(settings & OContactAccess::IgnoreCase), 290 !(settings & OContactAccess::IgnoreCase),
@@ -260,6 +315,7 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
260 } 315 }
261 } 316 }
262 } 317 }
318 }
263 if ( allcorrect ){ 319 if ( allcorrect ){
264 m_currentQuery[arraycounter++] = (*it).uid(); 320 m_currentQuery[arraycounter++] = (*it).uid();
265 } 321 }
@@ -291,18 +347,33 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
291 const uint querySettings() 347 const uint querySettings()
292 { 348 {
293 return ( OContactAccess::WildCards 349 return ( OContactAccess::WildCards
294 & OContactAccess::IgnoreCase 350 | OContactAccess::IgnoreCase
295 & OContactAccess::RegExp 351 | OContactAccess::RegExp
296 & OContactAccess::ExactMatch ); 352 | OContactAccess::ExactMatch
353 | OContactAccess::DateDiff
354 | OContactAccess::DateYear
355 | OContactAccess::DateMonth
356 | OContactAccess::DateDay
357 );
297 } 358 }
298 359
299 bool hasQuerySettings (uint querySettings) const 360 bool hasQuerySettings (uint querySettings) const
300 { 361 {
301 /* OContactAccess::IgnoreCase may be added with one 362 /* OContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay
302 * of the other settings, but never used alone. 363 * may be added with any of the other settings. IgnoreCase should never used alone.
303 * The other settings are just valid alone... 364 * Wildcards, RegExp, ExactMatch should never used at the same time...
304 */ 365 */
305 switch ( querySettings & ~OContactAccess::IgnoreCase ){ 366
367 if ( querySettings == OContactAccess::IgnoreCase )
368 return false;
369
370 switch ( querySettings & ~( OContactAccess::IgnoreCase
371 | OContactAccess::DateDiff
372 | OContactAccess::DateYear
373 | OContactAccess::DateMonth
374 | OContactAccess::DateDay
375 )
376 ){
306 case OContactAccess::RegExp: 377 case OContactAccess::RegExp:
307 return ( true ); 378 return ( true );
308 case OContactAccess::WildCards: 379 case OContactAccess::WildCards:
diff --git a/libopie2/opiepim/core/ocontactaccess.h b/libopie2/opiepim/core/ocontactaccess.h
index 961968f..32b2dcb 100644
--- a/libopie2/opiepim/core/ocontactaccess.h
+++ b/libopie2/opiepim/core/ocontactaccess.h
@@ -17,6 +17,10 @@
17 * ===================================================================== 17 * =====================================================================
18 * History: 18 * History:
19 * $Log$ 19 * $Log$
20 * Revision 1.6 2003/01/02 14:27:12 eilers
21 * Improved query by example: Search by date is possible.. First step
22 * for a today plugin for birthdays..
23 *
20 * Revision 1.5 2002/11/13 14:14:51 eilers 24 * Revision 1.5 2002/11/13 14:14:51 eilers
21 * Added sorted for Contacts.. 25 * Added sorted for Contacts..
22 * 26 *
@@ -88,7 +92,11 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact>
88 IgnoreCase = 0x0002, 92 IgnoreCase = 0x0002,
89 RegExp = 0x0004, 93 RegExp = 0x0004,
90 ExactMatch = 0x0008, 94 ExactMatch = 0x0008,
91 MatchOne = 0x0010 // Only one Entry must match 95 MatchOne = 0x0010, // Only one Entry must match
96 DateDiff = 0x0020, // Find all entries from today until given date
97 DateYear = 0x0040, // The year matches
98 DateMonth = 0x0080, // The month matches
99 DateDay = 0x0100, // The day matches
92 }; 100 };
93 101
94 102