link correct url for web interface sample
[enigma2.git] / lib / python / Screens / TimerEntry.py
index 7e2e55c8b016c6cbb5566bb49bdf4a0a50930cde..85f41fb2bfb43815c363e407b45c66ab61299009 100644 (file)
@@ -9,8 +9,9 @@ from Components.Button import Button
 from Components.NimManager import nimmanager
 from Components.Label import Label
 from Components.Pixmap import Pixmap
-from Screens.SubserviceSelection import SubserviceSelection
 from Screens.MessageBox import MessageBox
+from Screens.ChoiceBox import ChoiceBox
+from RecordTimer import AFTEREVENT
 from enigma import eEPGCache
 import time
 import datetime
@@ -59,6 +60,8 @@ class TimerEntry(Screen):
                        else:
                                justplay = 1
                                
+                       afterevent = { AFTEREVENT.NONE: 0, AFTEREVENT.DEEPSTANDBY: 1, AFTEREVENT.STANDBY: 2}[self.timer.afterEvent]
+
                        # calculate default values
                        day = []
                        weekday = 0
@@ -93,6 +96,7 @@ class TimerEntry(Screen):
                                day[weekday] = 0
                        
                        config.timerentry.justplay = configElement_nonSave("config.timerentry.justplay", configSelection, justplay, (("zap", _("zap")), ("record", _("record"))))
+                       config.timerentry.afterevent = configElement_nonSave("config.timerentry.afterevent", configSelection, afterevent, (("nothing", _("do nothing")), ("deepstandby", _("go to deep standby"))))
                        config.timerentry.type = configElement_nonSave("config.timerentry.type", configSelection, type, (_("once"), _("repeated")))
                        config.timerentry.name = configElement_nonSave("config.timerentry.name", configText, self.timer.name, (configText.extendableSize, self.keyRightCallback))
                        config.timerentry.description = configElement_nonSave("config.timerentry.description", configText, self.timer.description, (configText.extendableSize, self.keyRightCallback))
@@ -130,7 +134,7 @@ class TimerEntry(Screen):
                                config.timerentry.enddate.change()
                                try:
                                        self["config"].invalidate(config.timerentry.enddate)
-                               except:
+                               except: # FIXME: what could go wrong here?
                                        pass
                if (configElement.getConfigPath() == "config.timerentry.enddate"):
                        if (config.timerentry.enddate.value < config.timerentry.startdate.value):
@@ -138,7 +142,7 @@ class TimerEntry(Screen):
                                config.timerentry.startdate.change()
                                try:
                                        self["config"].invalidate(config.timerentry.startdate)
-                               except:
+                               except: # FIXME: what could go wrong here?
                                        pass
 
        def createSetup(self, widget):
@@ -187,6 +191,9 @@ class TimerEntry(Screen):
                        if currentConfigSelectionElement(config.timerentry.justplay) != "zap":
                                self.list.append(getConfigListEntry(_("EndTime"), config.timerentry.endtime))
 
+               if currentConfigSelectionElement(config.timerentry.justplay) != "zap":
+                       self.list.append(getConfigListEntry(_("After event"), config.timerentry.afterevent))
+
                self.channelEntry = getConfigListEntry(_("Channel"), config.timerentry.service)
                self.list.append(self.channelEntry)
 
@@ -231,15 +238,11 @@ class TimerEntry(Screen):
                else:
                        self.keyGo()
 
-       def finishedChannelSelection(self, args):
-               oldref = self.timer.service_ref
-               try:
-                       self.timer.service_ref = ServiceReference(args)
+       def finishedChannelSelection(self, *args):
+               if len(args):
+                       self.timer.service_ref = ServiceReference(args[0])
                        config.timerentry.service.vals = (str(self.timer.service_ref.getServiceName()),)
                        self["config"].invalidate(config.timerentry.service)
-               except:
-                       print "you pressed cancel"
-                       self.timer.service_ref = oldref
 
        def keyNumberGlobal(self, number):
                print "You pressed number " + str(number)
@@ -251,15 +254,32 @@ class TimerEntry(Screen):
                dt = datetime.datetime(d.tm_year, d.tm_mon, d.tm_mday, mytime[0], mytime[1])
                return int(mktime(dt.timetuple()))
 
+       def getBeginEnd(self):
+               enddate = config.timerentry.enddate.value
+               endtime = config.timerentry.endtime.value
+               
+               startdate = config.timerentry.startdate.value
+               starttime = config.timerentry.starttime.value
+               
+               begin = self.getTimestamp(startdate, starttime)
+               end = self.getTimestamp(enddate, endtime)
+               
+               # because of the dateChecks, startdate can't be < enddate.
+               # however, the endtime can be less than the starttime.
+               # in this case, add 1 day.
+               if end < begin:
+                       end += 86400
+               return begin, end
+
        def keyGo(self):
                self.timer.name = config.timerentry.name.value
                self.timer.description = config.timerentry.description.value
                self.timer.justplay = (currentConfigSelectionElement(config.timerentry.justplay) == "zap")
                self.timer.resetRepeated()
+               self.timer.afterEvent = { 0: AFTEREVENT.NONE, 1: AFTEREVENT.DEEPSTANDBY, 2: AFTEREVENT.STANDBY}[config.timerentry.afterevent.value]
                
                if (config.timerentry.type.value == 0): # once
-                       self.timer.begin = self.getTimestamp(config.timerentry.startdate.value, config.timerentry.starttime.value)
-                       self.timer.end = self.getTimestamp(config.timerentry.enddate.value, config.timerentry.endtime.value)
+                       self.timer.begin, self.timer.end = self.getBeginEnd()
                if (config.timerentry.type.value == 1): # repeated
                        if (config.timerentry.repeated.value == 0): # daily
                                for x in range(0,7):
@@ -278,18 +298,32 @@ class TimerEntry(Screen):
 
                        self.timer.begin = self.getTimestamp(time.time(), config.timerentry.starttime.value)
                        self.timer.end = self.getTimestamp(time.time(), config.timerentry.endtime.value)
+                       
+                       # when a timer end is set before the start, add 1 day
+                       if self.timer.end < self.timer.begin:
+                               self.timer.end += 86400
 
                if self.timer.eit is not None:
                        event = eEPGCache.getInstance().lookupEventId(self.timer.service_ref.ref, self.timer.eit)
                        if event is not None:
-                               if event.getNumOfLinkageServices() > 0:
-                                       self.session.openWithCallback(self.subserviceSelected, SubserviceSelection, event, self.timer.service_ref.ref)
+                               n = event.getNumOfLinkageServices()
+                               if n > 0:
+                                       tlist = []
+                                       ref = self.session.nav.getCurrentlyPlayingServiceReference()
+                                       parent = self.timer.service_ref.ref
+                                       selection = 0
+                                       for x in range(n):
+                                               i = event.getLinkageService(parent, x)
+                                               if i.toString() == ref.toString():
+                                                       selection = x
+                                               tlist.append((i.getName(), i))
+                                       self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice to record..."), list = tlist, selection = selection)
                                        return
                self.close((True, self.timer))
 
        def subserviceSelected(self, service):
                if not service is None:
-                       self.timer.service_ref = ServiceReference(service)
+                       self.timer.service_ref = ServiceReference(service[1])
                self.close((True, self.timer))
 
        def keyCancel(self):