better fix for previous commit
[enigma2.git] / timer.py
index 5720cf9d5be638229286655bac1ddce23af7a840..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,8 +31,15 @@ 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
        # update self.begin and self.end according to the self.repeated-flags
-       def processRepeated(self):
+       def processRepeated(self, findRunningEvent = True):
                print "ProcessRepeated"
                if (self.repeated != 0):
                        now = int(time()) + 1
                print "ProcessRepeated"
                if (self.repeated != 0):
                        now = int(time()) + 1
@@ -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
@@ -54,13 +63,13 @@ class TimerEntry:
                                flags = flags >> 1
 
                        print strftime("%c", localnow)
                                flags = flags >> 1
 
                        print strftime("%c", localnow)
-                       while ((day[localbegin.tm_wday] != 0) or ((day[localbegin.tm_wday] == 0) and localend < localnow)):
-                               print strftime("%c", localbegin)
-                               print 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)
 
 
+                       while ((day[localbegin.tm_wday] != 0) or ((day[localbegin.tm_wday] == 0) and ((findRunningEvent and localend < localnow) or ((not findRunningEvent) and localbegin < localnow)))):
+                               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
@@ -128,16 +137,11 @@ class Timer:
                
                self.calcNextActivation()
                self.on_state_change = [ ]
                
                self.calcNextActivation()
                self.on_state_change = [ ]
-       
+
        def stateChanged(self, entry):
                for f in self.on_state_change:
                        f(entry)
        def stateChanged(self, entry):
                for f in self.on_state_change:
                        f(entry)
-                       
-       def getNextRecordingTime(self):
-               if len(self.timer_list) > 0:
-                       return self.timer_list[0].begin
-               return -1
-                       
+
        def cleanup(self):
                self.processed_timers = [entry for entry in self.processed_timers if entry.disabled]
        
        def cleanup(self):
                self.processed_timers = [entry for entry in self.processed_timers if entry.disabled]