better fix for previous commit
[enigma2.git] / timer.py
index 3511694839ae635a773812e1235776c326b9fcce..0ca4888d7548a48b66f3ad2febcf1edbf7957ca9 100644 (file)
--- a/timer.py
+++ b/timer.py
@@ -2,6 +2,8 @@ from bisect import insort
 from time import strftime, time, localtime, gmtime, mktime
 from calendar import timegm
 from enigma import eTimer
 from time import strftime, time, localtime, gmtime, mktime
 from calendar import timegm
 from enigma import eTimer
+import calendar
+import datetime
 
 class TimerEntry:
        StateWaiting  = 0
 
 class TimerEntry:
        StateWaiting  = 0
@@ -29,6 +31,13 @@ class TimerEntry:
        def isRunning(self):
                return self.state == self.StateRunning
                
        def isRunning(self):
                return self.state == self.StateRunning
                
+       def addOneDay(self, timedatestruct):
+               oldHour = timedatestruct.tm_hour
+               newdate =  (datetime.datetime(timedatestruct.tm_year, timedatestruct.tm_mon, timedatestruct.tm_mday, timedatestruct.tm_hour, timedatestruct.tm_min, timedatestruct.tm_sec) + datetime.timedelta(days=1)).timetuple()
+               if localtime(mktime(newdate)).tm_hour != oldHour:
+                       return (datetime.datetime(timedatestruct.tm_year, timedatestruct.tm_mon, timedatestruct.tm_mday, timedatestruct.tm_hour, timedatestruct.tm_min, timedatestruct.tm_sec) + datetime.timedelta(days=2)).timetuple()                        
+               return newdate
+               
        # update self.begin and self.end according to the self.repeated-flags
        def processRepeated(self, findRunningEvent = True):
                print "ProcessRepeated"
        # update self.begin and self.end according to the self.repeated-flags
        def processRepeated(self, findRunningEvent = True):
                print "ProcessRepeated"
@@ -40,8 +49,8 @@ class TimerEntry:
                        localend = localtime(self.end)
                        localnow = localtime(now)
 
                        localend = localtime(self.end)
                        localnow = localtime(now)
 
-                       print strftime("%c", localbegin)
-                       print strftime("%c", localend)
+                       print "localbegin:", strftime("%c", localbegin)
+                       print "localend:", strftime("%c", localend)
 
                        day = []
                        flags = self.repeated
 
                        day = []
                        flags = self.repeated
@@ -56,12 +65,11 @@ class TimerEntry:
                        print strftime("%c", localnow)
 
                        while ((day[localbegin.tm_wday] != 0) or ((day[localbegin.tm_wday] == 0) and ((findRunningEvent and localend < localnow) or ((not findRunningEvent) and localbegin < localnow)))):
                        print strftime("%c", localnow)
 
                        while ((day[localbegin.tm_wday] != 0) or ((day[localbegin.tm_wday] == 0) and ((findRunningEvent and localend < localnow) or ((not findRunningEvent) and localbegin < localnow)))):
-                               print "localbegin:", strftime("%c", localbegin)
-                               print "localend:", strftime("%c", localend)
-                               #add one day to the struct_time, we have to convert using gmt functions, because the daylight saving flag might change after we add our 86400 seconds
-                               localbegin = gmtime(timegm(localbegin) + 86400)
-                               localend = gmtime(timegm(localend) + 86400)
-
+                               localbegin = self.addOneDay(localbegin)
+                               localend = self.addOneDay(localend)
+                               print "localbegin after addOneDay:", strftime("%c", localbegin)
+                               print "localend after addOneDay:", strftime("%c", localend)
+                               
                        #we now have a struct_time representation of begin and end in localtime, but we have to calculate back to (gmt) seconds since epoch
                        self.begin = int(mktime(localbegin))
                        self.end = int(mktime(localend)) + 1
                        #we now have a struct_time representation of begin and end in localtime, but we have to calculate back to (gmt) seconds since epoch
                        self.begin = int(mktime(localbegin))
                        self.end = int(mktime(localend)) + 1