yet another small fix
[enigma2.git] / lib / python / Screens / InfoBarGenerics.py
index f1744fed053708b9da96e18d31ad39a4ec5f7bae..3320d23d8e1982c43a8bbbe60e28e776cac96cdc 100644 (file)
@@ -5,17 +5,15 @@ from Components.ActionMap import NumberActionMap
 from Components.BlinkingPixmap import BlinkingPixmapConditional
 from Components.Harddisk import harddiskmanager
 from Components.Input import Input
 from Components.BlinkingPixmap import BlinkingPixmapConditional
 from Components.Harddisk import harddiskmanager
 from Components.Input import Input
-from Components.Label import *
-from Components.Pixmap import Pixmap, PixmapConditional
+from Components.Label import Label
+from Components.Pixmap import Pixmap
 from Components.PluginComponent import plugins
 from Components.PluginComponent import plugins
-from Components.ProgressBar import *
 from Components.ServiceEventTracker import ServiceEventTracker
 from Components.Sources.CurrentService import CurrentService
 from Components.Sources.EventInfo import EventInfo
 from Components.Sources.FrontendStatus import FrontendStatus
 from Components.Sources.Boolean import Boolean
 from Components.Sources.Clock import Clock
 from Components.ServiceEventTracker import ServiceEventTracker
 from Components.Sources.CurrentService import CurrentService
 from Components.Sources.EventInfo import EventInfo
 from Components.Sources.FrontendStatus import FrontendStatus
 from Components.Sources.Boolean import Boolean
 from Components.Sources.Clock import Clock
-from Components.TimerList import TimerEntryComponent
 from Components.config import config, ConfigBoolean, ConfigClock
 from EpgSelection import EPGSelection
 from Plugins.Plugin import PluginDescriptor
 from Components.config import config, ConfigBoolean, ConfigClock
 from EpgSelection import EPGSelection
 from Plugins.Plugin import PluginDescriptor
@@ -200,7 +198,10 @@ class InfoBarNumberZap:
        def keyNumberGlobal(self, number):
 #              print "You pressed number " + str(number)
                if number == 0:
        def keyNumberGlobal(self, number):
 #              print "You pressed number " + str(number)
                if number == 0:
-                       self.servicelist.recallPrevService()
+                       if isinstance(self, InfoBarPiP) and self.pipHandles0Action():
+                               self.pipDoHandle0Action()
+                       else:
+                               self.servicelist.recallPrevService()
                else:
                        self.session.openWithCallback(self.numberEntered, NumberZap, number)
 
                else:
                        self.session.openWithCallback(self.numberEntered, NumberZap, number)
 
@@ -406,6 +407,7 @@ class InfoBarEPG:
                self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions", 
                        {
                                "showEventInfo": (self.openEventView, _("show EPG...")),
                self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions", 
                        {
                                "showEventInfo": (self.openEventView, _("show EPG...")),
+                               "showSingleServiceEPG": (self.openSingleServiceEPG, _("show single service EPG...")),
                                "showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible,
                        })
 
                                "showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible,
                        })
 
@@ -611,12 +613,16 @@ class InfoBarSeek:
        SEEK_STATE_FF_2X = (0, 2, 0, ">> 2x")
        SEEK_STATE_FF_4X = (0, 4, 0, ">> 4x")
        SEEK_STATE_FF_8X = (0, 8, 0, ">> 8x")
        SEEK_STATE_FF_2X = (0, 2, 0, ">> 2x")
        SEEK_STATE_FF_4X = (0, 4, 0, ">> 4x")
        SEEK_STATE_FF_8X = (0, 8, 0, ">> 8x")
+       SEEK_STATE_FF_16X = (0, 16, 0, ">> 16x")
        SEEK_STATE_FF_32X = (0, 32, 0, ">> 32x")
        SEEK_STATE_FF_32X = (0, 32, 0, ">> 32x")
+       SEEK_STATE_FF_48X = (0, 48, 0, ">> 48x")
        SEEK_STATE_FF_64X = (0, 64, 0, ">> 64x")
        SEEK_STATE_FF_128X = (0, 128, 0, ">> 128x")
 
        SEEK_STATE_FF_64X = (0, 64, 0, ">> 64x")
        SEEK_STATE_FF_128X = (0, 128, 0, ">> 128x")
 
+       SEEK_STATE_BACK_8X = (0, -8, 0, "<< 8x")
        SEEK_STATE_BACK_16X = (0, -16, 0, "<< 16x")
        SEEK_STATE_BACK_32X = (0, -32, 0, "<< 32x")
        SEEK_STATE_BACK_16X = (0, -16, 0, "<< 16x")
        SEEK_STATE_BACK_32X = (0, -32, 0, "<< 32x")
+       SEEK_STATE_BACK_48X = (0, -48, 0, "<< 48x")
        SEEK_STATE_BACK_64X = (0, -64, 0, "<< 64x")
        SEEK_STATE_BACK_128X = (0, -128, 0, "<< 128x")
 
        SEEK_STATE_BACK_64X = (0, -64, 0, "<< 64x")
        SEEK_STATE_BACK_128X = (0, -128, 0, "<< 128x")
 
@@ -646,7 +652,8 @@ class InfoBarSeek:
                                if action[:5] == "seek:":
                                        time = int(action[5:])
                                        self.screen.seekRelative(time * 90000)
                                if action[:5] == "seek:":
                                        time = int(action[5:])
                                        self.screen.seekRelative(time * 90000)
-                                       self.screen.showAfterSeek()
+                                       if config.usage.show_infobar_on_skip.value:
+                                               self.screen.showAfterSeek()
                                        return 1
                                else:
                                        return HelpableActionMap.action(self, contexts, action)
                                        return 1
                                else:
                                        return HelpableActionMap.action(self, contexts, action)
@@ -670,6 +677,8 @@ class InfoBarSeek:
                self["SeekActions"].setEnabled(False)
 
                self.seekstate = self.SEEK_STATE_PLAY
                self["SeekActions"].setEnabled(False)
 
                self.seekstate = self.SEEK_STATE_PLAY
+               
+               self.seek_flag = True
 
                self.onPlayStateChanged = [ ]
 
 
                self.onPlayStateChanged = [ ]
 
@@ -790,13 +799,17 @@ class InfoBarSeek:
                                self.SEEK_STATE_PAUSE: self.SEEK_STATE_SM_EIGHTH,
                                self.SEEK_STATE_FF_2X: self.SEEK_STATE_FF_4X,
                                self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_8X,
                                self.SEEK_STATE_PAUSE: self.SEEK_STATE_SM_EIGHTH,
                                self.SEEK_STATE_FF_2X: self.SEEK_STATE_FF_4X,
                                self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_8X,
-                               self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_32X,
-                               self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_64X,
+                               self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_16X,
+                               self.SEEK_STATE_FF_16X: self.SEEK_STATE_FF_32X,
+                               self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_48X,
+                               self.SEEK_STATE_FF_48X: self.SEEK_STATE_FF_64X,
                                self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_128X,
                                self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_128X,
                                self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_128X,
                                self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_128X,
-                               self.SEEK_STATE_BACK_16X: self.SEEK_STATE_PLAY,
+                               self.SEEK_STATE_BACK_8X: self.SEEK_STATE_PLAY,
+                               self.SEEK_STATE_BACK_16X: self.SEEK_STATE_BACK_8X,
                                self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_16X,
                                self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_16X,
-                               self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_32X,
+                               self.SEEK_STATE_BACK_48X: self.SEEK_STATE_BACK_32X,
+                               self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_48X,
                                self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_64X,
                                self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_HALF,
                                self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_HALF,
                                self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_64X,
                                self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_HALF,
                                self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_HALF,
@@ -807,22 +820,26 @@ class InfoBarSeek:
 
        def seekBack(self):
                lookup = {
 
        def seekBack(self):
                lookup = {
-                               self.SEEK_STATE_PLAY: self.SEEK_STATE_BACK_16X,
+                               self.SEEK_STATE_PLAY: self.SEEK_STATE_BACK_8X,
                                self.SEEK_STATE_PAUSE: self.SEEK_STATE_PAUSE,
                                self.SEEK_STATE_FF_2X: self.SEEK_STATE_PLAY,
                                self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_2X,
                                self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_4X,
                                self.SEEK_STATE_PAUSE: self.SEEK_STATE_PAUSE,
                                self.SEEK_STATE_FF_2X: self.SEEK_STATE_PLAY,
                                self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_2X,
                                self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_4X,
-                               self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_8X,
-                               self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_32X,
+                               self.SEEK_STATE_FF_16X: self.SEEK_STATE_FF_8X,
+                               self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_16X,
+                               self.SEEK_STATE_FF_48X: self.SEEK_STATE_FF_32X,
+                               self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_48X,
                                self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_64X,
                                self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_64X,
+                               self.SEEK_STATE_BACK_8X: self.SEEK_STATE_BACK_16X,
                                self.SEEK_STATE_BACK_16X: self.SEEK_STATE_BACK_32X,
                                self.SEEK_STATE_BACK_16X: self.SEEK_STATE_BACK_32X,
-                               self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_64X,
+                               self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_48X,
+                               self.SEEK_STATE_BACK_48X: self.SEEK_STATE_BACK_64X,
                                self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_128X,
                                self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_128X,
                                self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_QUARTER,
                                self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_EIGHTH,
                                self.SEEK_STATE_SM_EIGHTH: self.SEEK_STATE_PAUSE,
                                self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_128X,
                                self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_128X,
                                self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_QUARTER,
                                self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_EIGHTH,
                                self.SEEK_STATE_SM_EIGHTH: self.SEEK_STATE_PAUSE,
-                               self.SEEK_STATE_EOF: self.SEEK_STATE_BACK_16X,
+                               self.SEEK_STATE_EOF: self.SEEK_STATE_BACK_8X,
                        }
                self.setSeekState(lookup[self.seekstate])
 
                        }
                self.setSeekState(lookup[self.seekstate])
 
@@ -832,6 +849,7 @@ class InfoBarSeek:
                                seekable.seekRelative(-1, 3)
 
        def seekFwdDef(self):
                                seekable.seekRelative(-1, 3)
 
        def seekFwdDef(self):
+               self.seek_flag = False
                seconds = config.usage.self_defined_seek.value
                print "Seek", seconds, "seconds self defined forward"
                seekable = self.getSeek()
                seconds = config.usage.self_defined_seek.value
                print "Seek", seconds, "seconds self defined forward"
                seekable = self.getSeek()
@@ -839,6 +857,7 @@ class InfoBarSeek:
                        seekable.seekRelative(1, seconds * 90000)
                
        def seekBackDef(self):
                        seekable.seekRelative(1, seconds * 90000)
                
        def seekBackDef(self):
+               self.seek_flag = False
                seconds = config.usage.self_defined_seek.value
                print "Seek", seconds, "seconds self defined backward"
                seekable = self.getSeek()
                seconds = config.usage.self_defined_seek.value
                print "Seek", seconds, "seconds self defined backward"
                seekable = self.getSeek()
@@ -865,7 +884,7 @@ class InfoBarSeek:
        def checkSkipShowHideLock(self):
                wantlock = self.seekstate != self.SEEK_STATE_PLAY
 
        def checkSkipShowHideLock(self):
                wantlock = self.seekstate != self.SEEK_STATE_PLAY
 
-               if config.usage.show_infobar_on_zap.value:
+               if config.usage.show_infobar_on_skip.value:
                        if self.lockedBecauseOfSkipping and not wantlock:
                                self.unlockShow()
                                self.lockedBecauseOfSkipping = False
                        if self.lockedBecauseOfSkipping and not wantlock:
                                self.unlockShow()
                                self.lockedBecauseOfSkipping = False
@@ -893,11 +912,14 @@ class InfoBarSeek:
                self.doSeek(0)
 
        def seekRelative(self, diff):
                self.doSeek(0)
 
        def seekRelative(self, diff):
-               seekable = self.getSeek()
-               if seekable is not None:
-                       print "seekRelative: res:", seekable.seekRelative(1, diff)
+               if self.seek_flag == True:
+                       seekable = self.getSeek()
+                       if seekable is not None:
+                               print "seekRelative: res:", seekable.seekRelative(1, diff)
+                       else:
+                               print "seek failed!"
                else:
                else:
-                       print "seek failed!"
+                       self.seek_flag = True
 
        def seekRelativeToEnd(self, diff):
                assert diff <= 0, "diff is expected to be negative!"
 
        def seekRelativeToEnd(self, diff):
                assert diff <= 0, "diff is expected to be negative!"
@@ -1197,7 +1219,7 @@ class InfoBarPlugins:
                return list
 
        def runPlugin(self, plugin):
                return list
 
        def runPlugin(self, plugin):
-               plugin(session = self.session)
+               plugin(session = self.session, servicelist = self.servicelist)
 
 # depends on InfoBarExtensions
 class InfoBarSleepTimer:
 
 # depends on InfoBarExtensions
 class InfoBarSleepTimer:
@@ -1228,6 +1250,9 @@ class InfoBarPiP:
        def pipShown(self):
                return self.session.pipshown
 
        def pipShown(self):
                return self.session.pipshown
 
+       def pipHandles0Action(self):
+               return self.pipShown() and config.usage.pip_zero_button.value != "standard"
+
        def getShowHideName(self):
                if self.session.pipshown:
                        return _("Disable Picture in Picture")
        def getShowHideName(self):
                if self.session.pipshown:
                        return _("Disable Picture in Picture")
@@ -1272,6 +1297,16 @@ class InfoBarPiP:
        def movePiP(self):
                self.session.open(PiPSetup, pip = self.session.pip)
 
        def movePiP(self):
                self.session.open(PiPSetup, pip = self.session.pip)
 
+       def pipDoHandle0Action(self):
+               use = config.usage.pip_zero_button.value
+               if "swap" == use:
+                       self.swapPiP()
+               elif "swapstop" == use:
+                       self.swapPiP()
+                       self.showPiP()
+               elif "stop" == use:
+                       self.showPiP()
+
 from RecordTimer import parseEvent
 
 class InfoBarInstantRecord:
 from RecordTimer import parseEvent
 
 class InfoBarInstantRecord:
@@ -1352,7 +1387,7 @@ class InfoBarInstantRecord:
                        if not x in self.session.nav.RecordTimer.timer_list:
                                self.recording.remove(x)
                        elif x.dontSave and x.isRunning():
                        if not x in self.session.nav.RecordTimer.timer_list:
                                self.recording.remove(x)
                        elif x.dontSave and x.isRunning():
-                               list.append(TimerEntryComponent(x, False))
+                               list.append((x, False))
 
                if answer[1] == "changeduration":
                        if len(self.recording) == 1:
 
                if answer[1] == "changeduration":
                        if len(self.recording) == 1:
@@ -1446,7 +1481,6 @@ class InfoBarAudioSelection:
                n = audio and audio.getNumberOfTracks() or 0
                keys = [ "red", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n
                tlist = []
                n = audio and audio.getNumberOfTracks() or 0
                keys = [ "red", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n
                tlist = []
-               print "tlist:", tlist
                if n > 0:
                        self.audioChannel = service.audioChannel()
 
                if n > 0:
                        self.audioChannel = service.audioChannel()
 
@@ -1465,8 +1499,8 @@ class InfoBarAudioSelection:
 
                                tlist.append((description, x))
 
 
                                tlist.append((description, x))
 
-                       selectedAudio = tlist[0][1]
-                       tlist.sort(lambda x,y : cmp(x[0], y[0]))
+                       selectedAudio = audio.getCurrentTrack()
+                       tlist.sort(key=lambda x: x[0])
 
                        selection = 2
                        for x in tlist:
 
                        selection = 2
                        for x in tlist: