[SystemInfo] Add PVRSupport.
[vuplus_dvbapp] / lib / python / Screens / InfoBarGenerics.py
index 2bf91fd..d1c6c84 100755 (executable)
@@ -39,7 +39,7 @@ from time import time, localtime, strftime
 from os import stat as os_stat, system as os_system
 from bisect import insort
 
-from RecordTimer import RecordTimerEntry, RecordTimer
+from RecordTimer import RecordTimerEntry, RecordTimer, findSafeRecordPath
 
 # hack alert!
 from Menu import MainMenu, mdom
@@ -235,7 +235,7 @@ class InfoBarNumberZap:
                        else:
                                self.servicelist.recallPrevService()
                else:
-                       if self.has_key("TimeshiftActions") and not self.timeshift_enabled:
+                       if not (self.has_key("TimeshiftActions") and self.timeshift_enabled):
                                self.session.openWithCallback(self.numberEntered, NumberZap, number)
 
        def numberEntered(self, retval):
@@ -1185,11 +1185,12 @@ class InfoBarShowMovies:
 
 class InfoBarTimeshift:
        def __init__(self):
-               self["TimeshiftActions"] = HelpableActionMap(self, "InfobarTimeshiftActions",
-                       {
-                               "timeshiftStart": (self.startTimeshift, _("start timeshift")),  # the "yellow key"
-                               "timeshiftStop": (self.stopTimeshift, _("stop timeshift"))      # currently undefined :), probably 'TV'
-                       }, prio=1)
+               if SystemInfo["PVRSupport"]:
+                       self["TimeshiftActions"] = HelpableActionMap(self, "InfobarTimeshiftActions",
+                               {
+                                       "timeshiftStart": (self.startTimeshift, _("start timeshift")),  # the "yellow key"
+                                       "timeshiftStop": (self.stopTimeshift, _("stop timeshift"))      # currently undefined :), probably 'TV'
+                               }, prio=1)
                self["TimeshiftActivateActions"] = ActionMap(["InfobarTimeshiftActivateActions"],
                        {
                                "timeshiftActivateEnd": self.activateTimeshiftEnd, # something like "rewind key"
@@ -1223,6 +1224,13 @@ class InfoBarTimeshift:
                if self.timeshift_enabled:
                        print "hu, timeshift already enabled?"
                else:
+                       from Components import Harddisk
+                       if Harddisk.getMountPath(config.usage.timeshift_path.value) != '/' and \
+                               SystemInfo.get("DisableUsbRecord", True) and \
+                               Harddisk.isUsbStorage(config.usage.timeshift_path.value):
+                               self.session.open(MessageBox, _("Timeshift not possible on a USB storage."), MessageBox.TYPE_ERROR)
+                               return 0
+
                        if not ts.startTimeshift():
                                self.timeshift_enabled = 1
 
@@ -1513,10 +1521,11 @@ class InfoBarInstantRecord:
        """Instant Record - handles the instantRecord action in order to
        start/stop instant records"""
        def __init__(self):
-               self["InstantRecordActions"] = HelpableActionMap(self, "InfobarInstantRecord",
-                       {
-                               "instantRecord": (self.instantRecord, _("Instant Record...")),
-                       })
+               if SystemInfo["PVRSupport"]:
+                       self["InstantRecordActions"] = HelpableActionMap(self, "InfobarInstantRecord",
+                               {
+                                       "instantRecord": (self.instantRecord, _("Instant Record...")),
+                               })
                self.recording = []
 
        def stopCurrentRecording(self, entry = -1):
@@ -1663,18 +1672,14 @@ class InfoBarInstantRecord:
                        self.session.nav.RecordTimer.timeChanged(entry)
 
        def instantRecord(self):
-               dir = preferredInstantRecordPath()
-               if not dir or not fileExists(dir, 'w'):
-                       dir = defaultMoviePath()
-
                if not fileExists("/hdd", 0):
                        print "not found /hdd"
                        os_system("ln -s /media/hdd /hdd")
-#
-               try:
-                       stat = os_stat(dir)
-               except:
-                       # XXX: this message is a little odd as we might be recording to a remote device
+
+               recPath = preferredInstantRecordPath()
+               if not findSafeRecordPath(recPath) and not findSafeRecordPath(defaultMoviePath()):
+                       if not recPath:
+                               recPath = ""
                        self.session.open(MessageBox, _("No HDD found or HDD not initialized!"), MessageBox.TYPE_ERROR)
                        return
 
@@ -1906,8 +1911,8 @@ class InfoBarAdditionalInfo:
 
                self["RecordingPossible"] = Boolean(fixed=harddiskmanager.HDDCount() > 0 and config.misc.rcused.value == 1)
                self["TimeshiftPossible"] = self["RecordingPossible"]
-               self["ShowTimeshiftOnYellow"] = Boolean(fixed=(not config.misc.rcused.value == 0))
-               self["ShowAudioOnYellow"] = Boolean(fixed=config.misc.rcused.value == 0)
+               self["ShowTimeshiftOnYellow"] = Boolean(fixed=(config.misc.rcused.value == 1))
+               self["ShowAudioOnYellow"] = Boolean(fixed=config.misc.rcused.value != 1)
                self["ShowRecordOnRed"] = Boolean(fixed=config.misc.rcused.value == 1)
                self["ExtensionsAvailable"] = Boolean(fixed=1)
 
@@ -2333,9 +2338,10 @@ class InfoBarServiceErrorPopupSupport:
 class InfoBarHDMI:
        def __init__(self):
                self.hdmiInServiceRef = eServiceReference('8192:0:1:0:0:0:0:0:0:0:')
+
                if SystemInfo.get("HdmiInSupport", False):
                        self.addExtension((self.getShowHdmiInName, self.HDMIIn, lambda: True), None)
-                       self.addExtension((self.getShowHdmiInPIPName, self.HDMIInPIP, self.pipShown), None)
+                       self.addExtension((self.getShowHdmiInPIPName, self.HDMIInPIP, self.showHDMIPIPMenu), None)
 
        def getShowHdmiInName(self):
                curref = self.session.nav.getCurrentlyPlayingServiceReference()
@@ -2347,13 +2353,23 @@ class InfoBarHDMI:
                return name
 
        def getShowHdmiInPIPName(self):
-               curref = self.session.pip.getCurrentService()
+               return _("Enable HDMI-IN on PIP")
+
+       def showHDMIPIPMenu(self):
+               _pipAvailable = SystemInfo.get("NumVideoDecoders", 1) > 1
+
+               hdmiin_enabled = False
+               curref = self.session.nav.getCurrentlyPlayingServiceReference()
                if curref and curref.type == 8192:
-                       name = _("Disable HDMI-IN on PIP")
-               else:
-                       name = _("Enable HDMI-IN on PIP")
+                       hdmiin_enabled = True
 
-               return name
+               hdmiin_pip_shown = False
+               if self.session.pipshown:
+                       pipref=self.session.pip.getCurrentService()
+                       if pipref and pipref.type == 8192:
+                               hdmiin_pip_shown = True
+
+               return _pipAvailable and not hdmiin_enabled and not hdmiin_pip_shown
 
        def getCurrentServiceRef(self):
                slist = self.servicelist
@@ -2368,8 +2384,17 @@ class InfoBarHDMI:
                        self.session.nav.playService(self.hdmiInServiceRef)
 
        def HDMIInPIP(self):
-               curref = self.session.pip.getCurrentService()
-               if curref and curref.type == 8192:
-                       self.session.pip.playService(self.getCurrentServiceRef())
+               if self.session.pipshown:
+                       del self.session.pip
+
+               self.session.pip = self.session.instantiateDialog(PictureInPicture)
+               self.session.pip.setAnimationMode(0)
+               self.session.pip.show()
+               newservice = self.hdmiInServiceRef
+               if self.session.pip.playService(newservice):
+                       self.session.pipshown = True
+                       self.session.pip.servicePath = self.servicelist.getCurrentServicePath()
                else:
-                       self.session.pip.playService(self.hdmiInServiceRef)
\ No newline at end of file
+                       self.session.pipshown = False
+                       del self.session.pip
+                       self.session.openWithCallback(self.close, MessageBox, _("Could not open Picture in Picture"), MessageBox.TYPE_ERROR)