timer fixes and improvements by adenin
authorghost <andreas.monzner@multimedia-labs.de>
Mon, 19 Jan 2009 10:15:37 +0000 (11:15 +0100)
committerghost <andreas.monzner@multimedia-labs.de>
Mon, 19 Jan 2009 10:15:37 +0000 (11:15 +0100)
RecordTimer.py
lib/python/Plugins/Extensions/GraphMultiEPG/GraphMultiEpg.py
lib/python/Screens/EpgSelection.py
lib/python/Screens/EventView.py
lib/python/Screens/InfoBarGenerics.py
lib/python/Screens/TimerEdit.py

index dcfdd578158fffc0007776922305a91471bf3a72..6b306d4e6f0e3fab2ee84fa6b12c4676d0f306b1 100644 (file)
@@ -118,6 +118,7 @@ class RecordTimerEntry(timer.TimerEntry, object):
                self.dirname = dirname
                self.dirnameHadToFallback = False
                self.autoincrease = False
+               self.autoincreasetime = 3600 * 24 # 1 day
                self.tags = tags or []
 
                self.log_entries = []
@@ -268,6 +269,11 @@ class RecordTimerEntry(timer.TimerEntry, object):
 
                                return True
                elif next_state == self.StateEnded:
+                       old_end = self.end
+                       if self.setAutoincreaseEnd():
+                               self.log(12, "autoincrase recording %d minute(s)" % int((self.end - old_end)/60))
+                               self.state -= 1
+                               return True
                        self.log(12, "stop recording")
                        if not self.justplay:
                                NavigationInstance.instance.stopRecordService(self.record_service)
@@ -283,6 +289,29 @@ class RecordTimerEntry(timer.TimerEntry, object):
                                                Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished record timer wants to shut down\nyour Dreambox. Shutdown now?"), timeout = 20)
                        return True
 
+       def setAutoincreaseEnd(self, entry = None):
+               if not self.autoincrease:
+                       return False
+               if entry is None:
+                       new_end =  int(time.time()) + self.autoincreasetime
+               else:
+                       new_end = entry.begin -30
+
+               dummyentry = RecordTimerEntry(self.service_ref, self.begin, new_end, self.name, self.description, self.eit, disabled=True, justplay = self.justplay, afterEvent = self.afterEvent, dirname = self.dirname, tags = self.tags)
+               dummyentry.disabled = self.disabled
+               timersanitycheck = TimerSanityCheck(NavigationInstance.instance.RecordTimer.timer_list, dummyentry)
+               if not timersanitycheck.check():
+                       simulTimerList = timersanitycheck.getSimulTimerList()
+                       new_end = simulTimerList[1].begin
+                       del simulTimerList
+                       new_end -= 30                           # 30 Sekunden Prepare-Zeit lassen
+               del dummyentry
+               if new_end <= time.time():
+                       return False
+               self.end = new_end
+               return True
+       
+       
        def sendStandbyNotification(self, answer):
                if answer:
                        Notifications.AddNotification(Screens.Standby.Standby)
@@ -656,6 +685,7 @@ class RecordTimer(timer.Timer):
 
                # abort timer.
                # this sets the end time to current time, so timer will be stopped.
+               entry.autoincrease = False
                entry.abort()
                
                if entry.state != entry.StateEnded:
@@ -667,15 +697,8 @@ class RecordTimer(timer.Timer):
                # autoincrease instanttimer if possible
                if not entry.dontSave:
                        for x in self.timer_list:
-                               if x.dontSave and x.autoincrease:
-                                       x.end = x.begin + (3600 * 24 * 356 * 1)
+                               if x.setAutoincreaseEnd():
                                        self.timeChanged(x)
-                                       timersanitycheck = TimerSanityCheck(self.timer_list,x)
-                                       if not timersanitycheck.check():
-                                               tsc_list = timersanitycheck.getSimulTimerList()
-                                               if len(tsc_list) > 1:
-                                                       x.end = tsc_list[1].begin - 30
-                                                       self.timeChanged(x)
                # now the timer should be in the processed_timers list. remove it from there.
                self.processed_timers.remove(entry)
                self.saveTimer()
index b2e07e105ca32d8f129795cee76d164a4f8cacb0..b22c4b8092fe556dece9541853848f6be2d16fb4 100644 (file)
@@ -86,10 +86,10 @@ class EPGList(HTMLComponent, GUIComponent):
                return (event_list and len(event_list) and True) or False
 
        def setEpoch(self, epoch):
-               if self.cur_event is not None and self.cur_service is not None:
-                       self.offs = 0
-                       self.time_epoch = epoch
-                       self.fillMultiEPG(None) # refill
+#              if self.cur_event is not None and self.cur_service is not None:
+               self.offs = 0
+               self.time_epoch = epoch
+               self.fillMultiEPG(None) # refill
 
        def getEventFromId(self, service, eventid):
                event = None
@@ -98,16 +98,17 @@ class EPGList(HTMLComponent, GUIComponent):
                return event
 
        def moveToService(self,serviceref):
-               for x in range(len(self.list)):
-                       if self.list[x][0] == serviceref.toString():
-                               self.instance.moveSelectionTo(x)
-                               break
+               if serviceref is not None:
+                       for x in range(len(self.list)):
+                               if self.list[x][0] == serviceref.toString():
+                                       self.instance.moveSelectionTo(x)
+                                       break
        
        def getIndexFromService(self, serviceref):
-               for x in range(len(self.list)):
-                       if self.list[x][0] == serviceref.toString():
-                               return x
-               return 0
+               if serviceref is not None:
+                       for x in range(len(self.list)):
+                               if self.list[x][0] == serviceref.toString():
+                                       return x
                
        def setCurrentIndex(self, index):
                if self.instance is not None:
@@ -598,11 +599,11 @@ class GraphMultiEPG(Screen):
                        entry = answer[1]
                        simulTimerList = self.session.nav.RecordTimer.record(entry)
                        if simulTimerList is not None:
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.record(entry)
-                               else:
+                               for x in simulTimerList:
+                                       if x.setAutoincreaseEnd(entry):
+                                               self.session.nav.RecordTimer.timeChanged(x)
+                               simulTimerList = self.session.nav.RecordTimer.record(entry)
+                               if simulTimerList is not None:
                                        self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
                        self["key_green"].setText(_("Remove timer"))
                        self.key_green_choice = self.REMOVE_TIMER
@@ -662,6 +663,7 @@ class GraphMultiEPG(Screen):
                        self.key_green_choice = self.ADD_TIMER
        
        def moveTimeLines(self, force=False):
+               self.updateTimelineTimer.start((60-(int(time())%60))*1000)      #keep syncronised
                l = self["list"]
                event_rect = l.getEventRect()
                time_epoch = l.getTimeEpoch()
@@ -669,6 +671,7 @@ class GraphMultiEPG(Screen):
                if event_rect is None or time_epoch is None or time_base is None:
                        return
                time_steps = time_epoch > 180 and 60 or 30
+               
                num_lines = time_epoch/time_steps
                incWidth=event_rect.width()/num_lines
                pos=event_rect.left()
@@ -696,8 +699,7 @@ class GraphMultiEPG(Screen):
                now=time()
                timeline_now = self["timeline_now"]
                if now >= time_base and now < (time_base + time_epoch * 60):
-                       bla = (event_rect.width() * 1000) / time_epoch
-                       xpos = ((now/60) - (time_base/60)) * bla / 1000
+                       xpos = int((((now - time_base) * event_rect.width()) / (time_epoch * 60))-(timeline_now.instance.size().width()/2))
                        old_pos = timeline_now.position
                        new_pos = (xpos+event_rect.left(), old_pos[1])
                        if old_pos != new_pos:
@@ -705,3 +707,6 @@ class GraphMultiEPG(Screen):
                        timeline_now.visible = True
                else:
                        timeline_now.visible = False
+               # here no l.l.invalidate() is needed when the zPosition in the skin is correct!
+
+
index 526576e146c6a337638d31b7390e024ce50d3ac3..e7388fc296812aef5d1b21b9c585085a5730a66b 100644 (file)
@@ -219,11 +219,11 @@ class EPGSelection(Screen):
                        entry = answer[1]
                        simulTimerList = self.session.nav.RecordTimer.record(entry)
                        if simulTimerList is not None:
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.record(entry)
-                               else:
+                               for x in simulTimerList:
+                                       if x.setAutoincreaseEnd(entry):
+                                               self.session.nav.RecordTimer.timeChanged(x)
+                               simulTimerList = self.session.nav.RecordTimer.record(entry)
+                               if simulTimerList is not None:
                                        self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
                        self["key_green"].setText(_("Remove timer"))
                        self.key_green_choice = self.REMOVE_TIMER
index 5d3786fb7a79cfe1837ce35855c92a22938d35ce..6aed1e113d88b3fbbe8b2984b8ed662b1429705c 100644 (file)
@@ -92,11 +92,11 @@ class EventViewBase:
                        entry = answer[1]
                        simulTimerList = self.session.nav.RecordTimer.record(entry)
                        if simulTimerList is not None:
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.record(entry)
-                               else:
+                               for x in simulTimerList:
+                                       if x.setAutoincreaseEnd(entry):
+                                               self.session.nav.RecordTimer.timeChanged(x)
+                               simulTimerList = self.session.nav.RecordTimer.record(entry)
+                               if simulTimerList is not None:
                                        self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
                        self["key_green"].setText(_("Remove timer"))
                        self.key_green_choice = self.REMOVE_TIMER
index 79747a613f05d148f81c6c07e7f34ad0d11fda79..050e350b96e7d5c366e61d82101665d054d2a63a 100644 (file)
@@ -1428,7 +1428,7 @@ class InfoBarInstantRecord:
                        pass
 
                begin = int(time())
-               end = begin + 3600 * 24 * 365 * 1 # 1 year
+               end = begin + 3600      # dummy
                name = "instant record"
                description = ""
                eventid = None
@@ -1450,18 +1450,9 @@ class InfoBarInstantRecord:
                recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = config.movielist.last_videodir.value)
                recording.dontSave = True
                recording.autoincrease = True
-
-               simulTimerList = self.session.nav.RecordTimer.record(recording)
-               if simulTimerList is not None:
-                       print "timer conflict detected!"
-                       if (len(simulTimerList) > 1):
-                               print "tsc_list > 1"
-                               recording.end = simulTimerList[1].begin - 30
-                               self.session.nav.RecordTimer.record(recording)
-                               print "new endtime applied"
-                       else:
-                               print "conflict with only one timer? ! ?"
-               self.recording.append(recording)
+               if recording.setAutoincreaseEnd():
+                       self.session.nav.RecordTimer.record(recording)
+                       self.recording.append(recording)
 
        def isInstantRecordRunning(self):
                print "self.recording:", self.recording
index 8cda8ca45bd7653083b28c5fa2cf39ae736f897c..58cece6c10c70a5f998706277e8a379c03fb6e96 100644 (file)
@@ -258,20 +258,25 @@ class TimerEditList(Screen):
                        print "Edited timer"
                        entry = answer[1]
                        timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, entry)
+                       success = False
                        if not timersanitycheck.check():
                                simulTimerList = timersanitycheck.getSimulTimerList()
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.timeChanged(entry)
-                               else:
-                                       print "Sanity check failed"
-                                       self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList())
+                               if simulTimerList is not None:
+                                       for x in simulTimerList:
+                                               if x.setAutoincreaseEnd(entry):
+                                                       self.session.nav.RecordTimer.timeChanged(x)
+                                       if not timersanitycheck.check():
+                                               simulTimerList = timersanitycheck.getSimulTimerList()
+                                               if simulTimerList is not None:
+                                                       self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList())
+                                       else:
+                                               success = True
                        else:
+                               succsess = True
+                       if success:
                                print "Sanity check passed"
-#                              if not timersanitycheck.doubleCheck():
                                self.session.nav.RecordTimer.timeChanged(entry)
-                                       
+                       
                        self.fillTimerList()
                        self.updateState()
                else:
@@ -283,11 +288,11 @@ class TimerEditList(Screen):
                        entry = answer[1]
                        simulTimerList = self.session.nav.RecordTimer.record(entry)
                        if simulTimerList is not None:
-                               if (len(simulTimerList) == 2) and (simulTimerList[1].dontSave) and (simulTimerList[1].autoincrease):
-                                       simulTimerList[1].end = entry.begin - 30
-                                       self.session.nav.RecordTimer.timeChanged(simulTimerList[1])
-                                       self.session.nav.RecordTimer.record(entry)
-                               else:
+                               for x in simulTimerList:
+                                       if x.setAutoincreaseEnd(entry):
+                                               self.session.nav.RecordTimer.timeChanged(x)
+                               simulTimerList = self.session.nav.RecordTimer.record(entry)
+                               if simulTimerList is not None:
                                        self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
                        self.fillTimerList()
                        self.updateState()