fix no more working infobar show when a service is selected in the
[enigma2.git] / timer.py
index 5c664bbe097f6bd48ab67fa65e0d904d0d17ca65..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
+import calendar
+import datetime
 
 class TimerEntry:
        StateWaiting  = 0
@@ -29,6 +31,13 @@ class TimerEntry:
        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"
@@ -40,8 +49,8 @@ class TimerEntry:
                        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
@@ -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 "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
@@ -134,17 +142,6 @@ class Timer:
                for f in self.on_state_change:
                        f(entry)
 
-       def getNextRecordingTime(self):
-               llen = len(self.timer_list)
-               idx = 0
-               while idx < llen:
-                       timer = self.timer_list[idx]
-                       if timer.justplay:
-                               idx += 1
-                       else:
-                               return timer.begin
-               return -1
-
        def cleanup(self):
                self.processed_timers = [entry for entry in self.processed_timers if entry.disabled]