Merge commit 'dm/experimental' into vuplus_experimental
[vuplus_dvbapp] / lib / python / Screens / SleepTimerEdit.py
old mode 100644 (file)
new mode 100755 (executable)
index 2416dd0..e5c9260
@@ -5,7 +5,10 @@ from Components.Input import Input
 from Components.Label import Label
 from Components.Pixmap import Pixmap
 from Components.config import config, ConfigInteger
+from Components.SystemInfo import SystemInfo
+from enigma import eEPGCache
 from SleepTimer import SleepTimer
+from time import time
 
 config.SleepTimer.defaulttime = ConfigInteger(default = 30)
 
@@ -37,8 +40,7 @@ class SleepTimerEdit(Screen):
                self.status = True
                self.updateColors()
                
-               
-               self["pretext"] = Label(_("Shutdown Dreambox after"))
+               self["pretext"] = Label(_("Shutdown STB after"))
                self["aftertext"] = Label(_("minutes"))
                
                self["actions"] = NumberActionMap(["SleepTimerEditorActions", "TextEntryActions", "KeyboardInputActions"], 
@@ -65,7 +67,8 @@ class SleepTimerEdit(Screen):
                        "deleteBackward": self.deleteBackward,
                        "disableTimer": self.disableTimer,
                        "toggleAction": self.toggleAction,
-                       "toggleAsk": self.toggleAsk
+                       "toggleAsk": self.toggleAsk,
+                       "useServiceTime": self.useServiceTime
                }, -1)
 
        def updateColors(self):
@@ -75,7 +78,11 @@ class SleepTimerEdit(Screen):
                        self["red_text"].setText(_("Action:") + " " + _("Disable timer"))
                
                if config.SleepTimer.action.value == "shutdown":
-                       self["green_text"].setText(_("Sleep timer action:") + " " + _("Deep Standby"))
+                       if SystemInfo["DeepstandbySupport"]:
+                               shutdownString = _("Deep Standby")
+                       else:
+                               shutdownString = _("Shutdown")
+                       self["green_text"].setText(_("Sleep timer action:") + " " + shutdownString)
                elif config.SleepTimer.action.value == "standby":
                        self["green_text"].setText(_("Sleep timer action:") + " " + _("Standby"))
                
@@ -83,7 +90,7 @@ class SleepTimerEdit(Screen):
                        self["yellow_text"].setText(_("Ask before shutdown:") + " " + _("yes"))
                else:
                        self["yellow_text"].setText(_("Ask before shutdown:") + " " + _("no"))
-               self["blue_text"].setText(_("Settings"))
+               self["blue_text"].setText(_("Use time of currently running service"))
 
        def cancel(self):
                config.SleepTimer.ask.cancel()
@@ -92,16 +99,29 @@ class SleepTimerEdit(Screen):
 
        def select(self):
                if self.status:
-                       time = int(self["input"].getText())
-                       config.SleepTimer.defaulttime.setValue(time)
-                       self.session.nav.SleepTimer.setSleepTime(time)
-                       self.session.openWithCallback(self.close, MessageBox, _("The sleep timer has been activated."), MessageBox.TYPE_INFO)
+#      ikseong
+                       if self["input"].getText()=='':
+                               self.session.nav.SleepTimer.clear()
+                               self.session.openWithCallback(self.close, MessageBox, _("The sleep timer is invalid."), MessageBox.TYPE_INFO)
+                       else:                           
+                               time = int(self["input"].getText())
+                               config.SleepTimer.defaulttime.setValue(time)
+                               config.SleepTimer.defaulttime.save()
+                               config.SleepTimer.action.save()
+                               self.session.nav.SleepTimer.setSleepTime(time)
+                               self.session.openWithCallback(self.close, MessageBox, _("The sleep timer has been activated."), MessageBox.TYPE_INFO)
                else:
                        self.session.nav.SleepTimer.clear()
                        self.session.openWithCallback(self.close, MessageBox, _("The sleep timer has been disabled."), MessageBox.TYPE_INFO)
 
        def keyNumberGlobal(self, number):
-               self["input"].number(number)
+#      ikseong
+               if self["input"].getText() == '' :
+                       inputtime=0
+               else:
+                       inputtime= int(self["input"].getText())*10 +number
+               if inputtime < 10000 :
+                       self["input"].number(number)
 
        def selectLeft(self):
                self["input"].left()
@@ -111,16 +131,16 @@ class SleepTimerEdit(Screen):
 
        def selectHome(self):
                self["input"].home()
-       
+
        def selectEnd(self):
                self["input"].end()
-       
+
        def deleteForward(self):
                self["input"].delete()
-       
+
        def deleteBackward(self):
                self["input"].deleteBackward()
-       
+
        def disableTimer(self):
                self.status = not self.status
                self.updateColors()
@@ -135,3 +155,31 @@ class SleepTimerEdit(Screen):
        def toggleAsk(self):
                config.SleepTimer.ask.value = not config.SleepTimer.ask.value
                self.updateColors()
+               
+       def useServiceTime(self):
+               remaining = None
+               ref = self.session.nav.getCurrentlyPlayingServiceReference()
+               if ref:
+                       path = ref.getPath()
+                       if path: # Movie
+                               service = self.session.nav.getCurrentService()
+                               seek = service and service.seek()
+                               if seek:
+                                       length = seek.getLength()
+                                       position = seek.getPlayPosition()
+                                       if length and position:
+                                               remaining = length[1] - position[1]
+                                               if remaining > 0:
+                                                       remaining = remaining / 90000
+                       else: # DVB
+                               epg = eEPGCache.getInstance()
+                               event = epg.lookupEventTime(ref, -1, 0)
+                               if event:
+                                       now = int(time())
+                                       start = event.getBeginTime()
+                                       duration = event.getDuration()
+                                       end = start + duration
+                                       remaining = end - now
+               if remaining:
+                       config.SleepTimer.defaulttime.value = (remaining / 60) + 2
+                       self["input"].setText(str((remaining / 60) + 2))