[PATCH] fix sorting of birthdays and anniversaries on today screen

Paul Eggleton <[email protected]> Sun, 31 Dec 2006 01:10:52 +1300
Newsgroups gmane.comp.handhelds.opie.devel
Message-ID <[email protected]>
Hi there,

The attached patch implements the missing sort types that enable correct 
sorting of upcoming birthdays and anniversaries on the today screen. 

This fixes bug #1760 (http://opie-bugs.oszine.de/view.php?id=1760).

Cheers,
Paul

_______________________________________________

http://opie.handhelds.org/cgi-bin/moin.cgi/DeveloperWikiIndex

Opie-devel mailing list
[email protected]
https://handhelds.org/mailman/listinfo/opie-devel
today_contactdate_sort.patch (text/x-diff, 3 KB)
Index: opimcontactsortvector.cpp
===================================================================
RCS file: /cvs/opie/libopie2/opiepim/private/opimcontactsortvector.cpp,v
retrieving revision 1.2
diff -d -u -r1.2 opimcontactsortvector.cpp
--- opimcontactsortvector.cpp	15 Mar 2005 18:20:46 -0000	1.2
+++ opimcontactsortvector.cpp	30 Dec 2006 12:02:16 -0000
@@ -64,6 +64,9 @@
         ret = testString( left.middleName(), right.middleName() );
         soMiddleName = true;
         break;
+    case OPimContactAccess::SortLastName:
+        ret = testString( left.lastName(), right.lastName() );
+        break;
     case OPimContactAccess::SortSuffix:
         ret = testString( left.suffix(), right.suffix() );
         soSuffix = true;
@@ -93,6 +96,17 @@
         ret = testString( left.gender(), right.gender() );
         soGender = true;
         break;
+    case OPimContactAccess::SortBirthdayWithoutYear:
+        // This doesn't actually just sort by the date without year,
+        // it actually works out the days until the next occurrence,
+        // which is more useful since it will work correctly when
+        // crossing year boundaries. - Paul Eggleton Dec 2006
+        ret = testDaysUntilNextDate( left.birthday(), right.birthday() );
+        break;
+    case OPimContactAccess::SortAnniversaryWithoutYear:
+        // (as above)
+        ret = testDaysUntilNextDate( left.anniversary(), right.anniversary() );
+        break;
     }
 
     /* twist to honor ascending/descending setting as QVector only sorts ascending*/
Index: opimsortvector.h
===================================================================
RCS file: /cvs/opie/libopie2/opiepim/private/opimsortvector.h,v
retrieving revision 1.2
diff -d -u -r1.2 opimsortvector.h
--- opimsortvector.h	16 Jan 2005 19:54:30 -0000	1.2
+++ opimsortvector.h	30 Dec 2006 12:02:17 -0000
@@ -56,6 +56,8 @@
     int testTime( const QTime&, const QTime& )const;
     int testDateTime( const QDateTime& left,
 		      const QDateTime& right )const;
+    int testDaysUntilNextDate( const QDate& left,
+          const QDate& right )const;
 protected:
     bool sortAscending()const;
     int  sortOrder()const;
@@ -166,6 +168,28 @@
 
 }
 
+template<class T>
+inline int OPimSortVector<T>::testDaysUntilNextDate( const QDate& left,
+                                        const QDate& right )const {
+	int ret = 0;
+	if ( !left .isValid() ) ret++;
+	if ( !right.isValid() ) ret--;
+
+	if ( left.isValid() && right.isValid() ){
+		int currentYear = QDate::currentDate().year();
+		QDate nextLeft( currentYear, left.month(), left.day() );
+		if ( QDate::currentDate().daysTo(nextLeft) < 0 )
+			nextLeft.setYMD( currentYear+1, left.month(), left.day() );
+		QDate nextRight( currentYear, right.month(), right.day() );
+		if ( QDate::currentDate().daysTo(nextRight) < 0 )
+			nextRight.setYMD( currentYear+1, right.month(), right.day() );
+
+		ret += QDate::currentDate().daysTo(nextLeft) < QDate::currentDate().daysTo(nextRight) ? -1 : 1;
+	}
+
+	return ret;
+}
+
 }
 }