store configmode in advanced sat mode
[enigma2.git] / lib / python / Screens / InfoBarGenerics.py
index f40feb3f82f72f155a2a5f11c9d764daca8b9ee9..ee51eb9feb2a8deaa61eb93f742a550e5d3e45a3 100644 (file)
@@ -95,11 +95,14 @@ class InfoBarShowHide:
 
        def lockShow(self):
                self.__locked = self.__locked + 1
-               self.show()
+               if self.execing:
+                       self.show()
+                       self.hideTimer.stop()
        
        def unlockShow(self):
                self.__locked = self.__locked - 1
-               self.startHideTimer()
+               if self.execing:
+                       self.startHideTimer()
 
 #      def startShow(self):
 #              self.instance.m_animation.startMoveAnimation(ePoint(0, 600), ePoint(0, 380), 100)
@@ -456,7 +459,7 @@ class InfoBarSeek:
        """handles actions like seeking, pause"""
        
        # ispause, isff, issm
-       SEEK_STATE_PLAY = (0, 0, 0, "")
+       SEEK_STATE_PLAY = (0, 0, 0, ">")
        SEEK_STATE_PAUSE = (1, 0, 0, "||")
        SEEK_STATE_FF_2X = (0, 2, 0, ">> 2x")
        SEEK_STATE_FF_4X = (0, 4, 0, ">> 4x")
@@ -520,14 +523,22 @@ class InfoBarSeek:
                del self.fwdKeyTimer
                del self.rwdKeyTimer
        
-       def isSeekable(self):
+       def getSeek(self):
                service = self.session.nav.getCurrentService()
                if service is None:
                        return False
-               if service.seek() is None:
+
+               seek = service.seek()
+
+               if seek is None or not seek.isCurrentlySeekable():
+                       return None
+               
+               return seek
+       
+       def isSeekable(self):
+               if self.getSeek() is None:
                        return False
-               else:
-                       return True
+               return True
 
        def __seekableStatusChanged(self):
                print "seekable status changed!"
@@ -548,7 +559,7 @@ class InfoBarSeek:
                if service is None:
                        return False
                
-               if service.seek() is None:
+               if not self.isSeekable():
                        if state not in [self.SEEK_STATE_PLAY, self.SEEK_STATE_PAUSE]:
                                state = self.SEEK_STATE_PLAY
                
@@ -594,9 +605,10 @@ class InfoBarSeek:
                if service is None:
                        return
                
-               seekable = service.seek()
+               seekable = self.getSeek()
                if seekable is None:
                        return
+               
                seekable.seekTo(90 * seektime)
 
        def seekFwd(self):
@@ -667,13 +679,9 @@ class InfoBarSeek:
        def fwdSeekTo(self, minutes):
                print "Seek", minutes, "minutes forward"
                if minutes != 0:
-                       service = self.session.nav.getCurrentService()
-                       if service is None:
-                               return
-                       seekable = service.seek()
-                       if seekable is None:
-                               return
-                       seekable.seekRelative(1, minutes * 60 * 90000)
+                       seekable = self.getSeek()
+                       if seekable is not None:
+                               seekable.seekRelative(1, minutes * 60 * 90000)
        
        def rwdTimerFire(self):
                print "rwdTimerFire"
@@ -701,6 +709,12 @@ class InfoBarSeek:
        
        def __evSOF(self):
                self.setSeekState(self.SEEK_STATE_PLAY)
+               self.doSeek(0)
+
+       def seekRelative(self, diff):
+               seekable = self.getSeek()
+               if seekable is not None:
+                       seekable.seekRelative(0, diff)
 
 from Screens.PVRState import PVRState
 
@@ -708,12 +722,17 @@ class InfoBarPVRState:
        def __init__(self):
                self.onPlayStateChanged.append(self.__playStateChanged)
                self.pvrStateDialog = self.session.instantiateDialog(PVRState)
-               self.onShow.append(self.pvrStateDialog.show)
+               self.onShow.append(self.__mayShow)
                self.onHide.append(self.pvrStateDialog.hide)
        
+       def __mayShow(self):
+               if self.seekstate != self.SEEK_STATE_PLAY:
+                       self.pvrStateDialog.show()
+
        def __playStateChanged(self, state):
                playstateString = state[3]
                self.pvrStateDialog["state"].setText(playstateString)
+               self.__mayShow()
 
 class InfoBarShowMovies:
 
@@ -767,7 +786,7 @@ class InfoBarTimeshift:
                        {
                                "timeshiftActivateEnd": self.activateTimeshiftEnd, # something like "pause key"
                                "timeshiftActivateEndAndPause": self.activateTimeshiftEndAndPause  # something like "backward key"
-                       })
+                       }, prio=-1) # priority over record
 
                self.timeshift_enabled = 0
                self.timeshift_state = 0
@@ -784,9 +803,6 @@ class InfoBarTimeshift:
                return service.timeshift()
 
        def startTimeshift(self):
-               # TODO: check for harddisk! (or do this in the interface? would make
-               # more sense... for example radio could be timeshifted in memory,
-               # and the decision can't be made here)
                print "enable timeshift"
                ts = self.getTimeshift()
                if ts is None:
@@ -809,7 +825,6 @@ class InfoBarTimeshift:
                        else:
                                print "timeshift failed"
 
-       # nyi
        def stopTimeshift(self):
                print "disable timeshift"
                ts = self.getTimeshift()
@@ -834,6 +849,7 @@ class InfoBarTimeshift:
                else:
                        self.setSeekState(self.SEEK_STATE_PLAY)
                        ts.activateTimeshift()
+                       self.seekRelative(0)
        
        # same as activateTimeshiftEnd, but pauses afterwards.
        def activateTimeshiftEndAndPause(self):