Hello,

This bug is pretty old. But the patch attached by Kacper is trying to
patch more than just the recurring dates. Actually it doesn't apply
cleanly to current release.

So I am sending here a patch that fixes just this - the recurring
dates error. In fact - without this patch gdeskcal is almost
*unusable* because recurring dates simply don't work! The birthdays
of may family, and wedding reminder is all wrong.

It is a stripped down version of Kacper's patch.

Please, would you be kind enough to apply the attached patch and make
an updated release of gdeskcal in debian?

-- 
# Janek Kozicki
diff -urdp gdeskcal-0.57.1/code/planner/cal/Date.py gdeskcal-0.57.2-kw/code/planner/cal/Date.py
--- gdeskcal-0.57.1/code/planner/cal/Date.py	2006-11-19 14:03:37.000000000 +0100
+++ gdeskcal-0.57.2-kw/code/planner/cal/Date.py	2006-08-26 19:17:20.000000000 +0200
@@ -1,5 +1,5 @@
 import time
-import calendar
+from calendar import monthrange,timegm
 from datetime import datetime,timedelta
 
 
@@ -56,9 +56,9 @@ class Date:
     #
     def __utc_to_localtime(self):
 
-        secs = calendar.timegm(self._to_time())
+        secs = timegm(self._to_time())
         localtime = time.localtime(secs)
-        localsecs = calendar.timegm(localtime)
+        localsecs = timegm(localtime)
         diff = int(localsecs - secs)
 
         self.add_time(0, 0, 0, 0, 0, diff)
@@ -105,27 +105,32 @@ class Date:
     # Adds a given amount of time to the given date. Amounts may be negative.
     #
     def add_time(self, dyear, dmonth, dday, dhour = 0, dmin = 0, dsec = 0):
+        
+        # print "Running add_time(%s, Y:%d, M:%d, D:%d, H:%d, M:%d, S:%d)" % (self, dyear, dmonth, dday, dhour, dmin, dsec)
 
+        self.__year = self.__year + dyear
+        if self.__month + dmonth > 12:
+           self.__year = self.__year + 1
+           dmonth = dmonth - 12
+        self.__month = self.__month + dmonth
+
+        (firstday, numdays) = monthrange(self.__year, self.__month) 
+        if self.__day > numdays:
+          self.__day = numdays
+        
         old_time = self._to_time()
         dt_current_time = datetime.fromtimestamp(time.mktime(old_time))
-        delta = timedelta(dday, 0, 0, 0, 0, 0, dmonth * 4 + dyear * 52 )
-
+        delta = timedelta(dday, dsec, 0, 0, dmin, dhour, 0)
         dt_current_time = dt_current_time + delta
-
         t = dt_current_time.timetuple()
 
         self.__year =  t[0]
         self.__month = t[1]
         self.__day =   t[2]
         self.__hours = t[3]
         self.__mins =  t[4]
         self.__secs =  t[5]
 
-        # add any hours, minutes or seconds separately. Why? -KW
-        if (dhour or dmin or dsec): self.__add_daytime(dhour, dmin, dsec)
-
-
-
     def __add_daytime(self, dhour, dmin, dsec):
 
         ch, cm, cs = self.get_daytime()

Reply via email to