support for arbitrary number of skinfiles
[enigma2.git] / timer.py
index 9fa0ab2a865dd26d9a012af554ed0fedfa760534..a98481c0a3f957bcf0cff965f2a8de1e785feb2c 100644 (file)
--- a/timer.py
+++ b/timer.py
@@ -16,6 +16,8 @@ class TimerEntry:
                self.resetRepeated()
                self.backoff = 0
                
                self.resetRepeated()
                self.backoff = 0
                
+               self.disabled = False
+               
        def resetRepeated(self):
                self.repeated = int(0)
 
        def resetRepeated(self):
                self.repeated = int(0)
 
@@ -110,6 +112,14 @@ class Timer:
        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 addTimerEntry(self, entry, noRecalc=0):
                entry.processRepeated()
        
        def addTimerEntry(self, entry, noRecalc=0):
                entry.processRepeated()
@@ -117,7 +127,7 @@ class Timer:
                # when the timer has not yet started, and is already passed,
                # don't go trough waiting/running/end-states, but sort it
                # right into the processedTimers.
                # when the timer has not yet started, and is already passed,
                # don't go trough waiting/running/end-states, but sort it
                # right into the processedTimers.
-               if entry.shouldSkip() or entry.state == TimerEntry.StateEnded:
+               if entry.shouldSkip() or entry.state == TimerEntry.StateEnded or (entry.state == TimerEntry.StateWaiting and entry.disabled):
                        print "already passed, skipping"
                        bisect.insort(self.processed_timers, entry)
                        entry.state = TimerEntry.StateEnded
                        print "already passed, skipping"
                        bisect.insort(self.processed_timers, entry)
                        entry.state = TimerEntry.StateEnded
@@ -158,7 +168,10 @@ class Timer:
        
        def timeChanged(self, timer):
                timer.timeChanged()
        
        def timeChanged(self, timer):
                timer.timeChanged()
-               self.timer_list.remove(timer)
+               if timer.state == TimerEntry.StateEnded:
+                       self.processed_timers.remove(timer)
+               else:
+                       self.timer_list.remove(timer)
 
                self.addTimerEntry(timer)
        
 
                self.addTimerEntry(timer)
        
@@ -168,8 +181,7 @@ class Timer:
                # when activating a timer which has already passed,
                # simply abort the timer. don't run trough all the stages.
                if w.shouldSkip():
                # when activating a timer which has already passed,
                # simply abort the timer. don't run trough all the stages.
                if w.shouldSkip():
-                       w.abort()
-                       bisect.insort(self.processed_timers, w)
+                       w.state = TimerEntry.StateEnded
                else:
                        # when active returns true, this means "accepted".
                        # otherwise, the current state is kept.
                else:
                        # when active returns true, this means "accepted".
                        # otherwise, the current state is kept.