summaryrefslogtreecommitdiff
path: root/libopie
authoreilers <eilers>2003-01-02 14:27:12 (UTC)
committer eilers <eilers>2003-01-02 14:27:12 (UTC)
commit8a9fc13259d7c2797068752687a011f57f613251 (patch) (side-by-side diff)
tree26019057f2974c71881d9d7759732326cd0ede25 /libopie
parent12e9ed4ac80ac7fa042059b48d7447db0e59a86c (diff)
downloadopie-8a9fc13259d7c2797068752687a011f57f613251.zip
opie-8a9fc13259d7c2797068752687a011f57f613251.tar.gz
opie-8a9fc13259d7c2797068752687a011f57f613251.tar.bz2
Improved query by example: Search by date is possible.. First step
for a today plugin for birthdays..
Diffstat (limited to 'libopie') (more/less context) (show whitespace changes)
-rw-r--r--libopie/pim/ocontactaccess.h10
-rw-r--r--libopie/pim/ocontactaccessbackend_xml.h89
2 files changed, 89 insertions, 10 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
@@ -18,4 +18,8 @@
* History:
* $Log$
+ * Revision 1.6 2003/01/02 14:27:12 eilers
+ * Improved query by example: Search by date is possible.. First step
+ * for a today plugin for birthdays..
+ *
* Revision 1.5 2002/11/13 14:14:51 eilers
* Added sorted for Contacts..
@@ -89,5 +93,9 @@ class OContactAccess: public QObject, public OPimAccessTemplate<OContact>
RegExp = 0x0004,
ExactMatch = 0x0008,
- MatchOne = 0x0010 // Only one Entry must match
+ MatchOne = 0x0010, // Only one Entry must match
+ DateDiff = 0x0020, // Find all entries from today until given date
+ DateYear = 0x0040, // The year matches
+ DateMonth = 0x0080, // The month matches
+ DateDay = 0x0100, // The day matches
};
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
@@ -18,4 +18,8 @@
* History:
* $Log$
+ * Revision 1.10 2003/01/02 14:27:12 eilers
+ * Improved query by example: Search by date is possible.. First step
+ * for a today plugin for birthdays..
+ *
* Revision 1.9 2002/12/08 12:48:57 eilers
* Moved journal-enum from ocontact into i the xml-backend..
@@ -61,4 +65,5 @@
#include <qarray.h>
#include <qmap.h>
+#include <qdatetime.h>
#include <qpe/global.h>
@@ -226,9 +231,59 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
* if all fields matches.
*/
+ QDate* queryDate = 0l;
+ QDate* checkDate = 0l;
bool allcorrect = true;
- for ( int i = 0; i < Qtopia::rid; i++ ) {
+ for ( int i = 0; i < Qtopia::Groups; i++ ) {
+ // Birthday and anniversary are special nonstring fields and should
+ // be handled especially
+ switch ( i ){
+ case Qtopia::Birthday:
+ queryDate = new QDate( query.birthday() );
+ checkDate = new QDate( (*it).birthday() );
+ case Qtopia::Anniversary:
+ if ( queryDate == 0l ){
+ queryDate = new QDate( query.anniversary() );
+ checkDate = new QDate( (*it).anniversary() );
+ }
+
+ if ( queryDate->isValid() ){
+ if ( settings & OContactAccess::DateYear ){
+ if ( queryDate->year() != checkDate->year() )
+ allcorrect = false;
+ }
+ if ( settings & OContactAccess::DateMonth ){
+ if ( queryDate->month() != checkDate->month() )
+ allcorrect = false;
+ }
+ if ( settings & OContactAccess::DateDay ){
+ if ( queryDate->day() != checkDate->day() )
+ allcorrect = false;
+ }
+ if ( settings & OContactAccess::DateDiff ) {
+ QDate current = QDate::currentDate();
+ if ( current.daysTo( *queryDate ) > 0 ){
+ if ( !( ( *checkDate >= current ) &&
+ ( *checkDate <= *queryDate ) ) )
+ allcorrect = false;
+ }
+ }
+ }
+
+ delete queryDate;
+ queryDate = 0l;
+ delete checkDate;
+ checkDate = 0l;
+ break;
+ default:
/* Just compare fields which are not empty in the query object */
if ( !query.field(i).isEmpty() ){
- switch ( settings & ~OContactAccess::IgnoreCase ){
+ switch ( settings & ~( OContactAccess::IgnoreCase
+ | OContactAccess::DateDiff
+ | OContactAccess::DateYear
+ | OContactAccess::DateMonth
+ | OContactAccess::DateDay
+ | OContactAccess::MatchOne
+ ) ){
+
case OContactAccess::RegExp:{
QRegExp expr ( query.field(i),
@@ -261,4 +316,5 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
}
}
+ }
if ( allcorrect ){
m_currentQuery[arraycounter++] = (*it).uid();
@@ -292,16 +348,31 @@ class OContactAccessBackend_XML : public OContactAccessBackend {
{
return ( OContactAccess::WildCards
- & OContactAccess::IgnoreCase
- & OContactAccess::RegExp
- & OContactAccess::ExactMatch );
+ | OContactAccess::IgnoreCase
+ | OContactAccess::RegExp
+ | OContactAccess::ExactMatch
+ | OContactAccess::DateDiff
+ | OContactAccess::DateYear
+ | OContactAccess::DateMonth
+ | OContactAccess::DateDay
+ );
}
bool hasQuerySettings (uint querySettings) const
{
- /* OContactAccess::IgnoreCase may be added with one
- * of the other settings, but never used alone.
- * The other settings are just valid alone...
+ /* OContactAccess::IgnoreCase, DateDiff, DateYear, DateMonth, DateDay
+ * may be added with any of the other settings. IgnoreCase should never used alone.
+ * Wildcards, RegExp, ExactMatch should never used at the same time...
*/
- switch ( querySettings & ~OContactAccess::IgnoreCase ){
+
+ if ( querySettings == OContactAccess::IgnoreCase )
+ return false;
+
+ switch ( querySettings & ~( OContactAccess::IgnoreCase
+ | OContactAccess::DateDiff
+ | OContactAccess::DateYear
+ | OContactAccess::DateMonth
+ | OContactAccess::DateDay
+ )
+ ){
case OContactAccess::RegExp:
return ( true );