Fix HDMI-IN extension menu.
[vuplus_dvbapp] / lib / python / Screens / InfoBarGenerics.py
index c36eb9c..ea75301 100755 (executable)
@@ -36,7 +36,7 @@ from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInform
        iPlayableService, eServiceReference, eEPGCache, eActionMap
 
 from time import time, localtime, strftime
-from os import stat as os_stat
+from os import stat as os_stat, system as os_system
 from bisect import insort
 
 from RecordTimer import RecordTimerEntry, RecordTimer
@@ -1204,7 +1204,8 @@ class InfoBarTimeshift:
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
                        {
                                iPlayableService.evStart: self.__serviceStarted,
-                               iPlayableService.evSeekableStatusChanged: self.__seekableStatusChanged
+                               iPlayableService.evSeekableStatusChanged: self.__seekableStatusChanged,
+                               iPlayableService.evUser+3: self.__lowDiskspaceMessage
                        })
 
        def getTimeshift(self):
@@ -1308,6 +1309,9 @@ class InfoBarTimeshift:
                self.timeshift_enabled = False
                self.__seekableStatusChanged()
 
+       def __lowDiskspaceMessage(self):
+               Notifications.AddPopup(text = _("Write error. Not enough space for writing.\n"), type = MessageBox.TYPE_ERROR, timeout = 0, id = "DiskFullMessage")
+
 from Screens.PiPSetup import PiPSetup
 
 class InfoBarExtensions:
@@ -1665,7 +1669,7 @@ class InfoBarInstantRecord:
 
                if not fileExists("/hdd", 0):
                        print "not found /hdd"
-                       system("ln -s /media/hdd /hdd")
+                       os_system("ln -s /media/hdd /hdd")
 #
                try:
                        stat = os_stat(dir)
@@ -2254,8 +2258,7 @@ class InfoBarSubtitleSupport(object):
                        self.__selected_subtitle = None
 
        def __updatedInfo(self):
-               if not self.cached_subtitle_checked:
-                       self.cached_subtitle_checked = True
+               if not self.__selected_subtitle:
                        subtitle = self.getCurrentServiceSubtitle()
                        self.setSelectedSubtitle(subtitle and subtitle.getCachedSubtitle())
                        if self.__selected_subtitle:
@@ -2276,7 +2279,7 @@ class InfoBarSubtitleSupport(object):
                else:
                        if subtitle:
                                subtitle.disableSubtitles(self.subtitle_window.instance)
-                       self.__selected_subtitle = False
+                       self.__selected_subtitle = None
                        self.__subtitles_enabled = False
                        self.subtitle_window.hide()
 
@@ -2326,3 +2329,67 @@ class InfoBarServiceErrorPopupSupport:
                        Notifications.AddPopup(text = error, type = MessageBox.TYPE_ERROR, timeout = 5, id = "ZapError")
                else:
                        Notifications.RemovePopup(id = "ZapError")
+
+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.showHDMIPIPMenu), None)
+
+       def getShowHdmiInName(self):
+               curref = self.session.nav.getCurrentlyPlayingServiceReference()
+               if curref and curref.type == 8192:
+                       name = _("Disable HDMI-IN on Main Screen")
+               else:
+                       name = _("Enable HDMI-IN on Main Screen")
+
+               return name
+
+       def getShowHdmiInPIPName(self):
+               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:
+                       hdmiin_enabled = True
+
+               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
+               currentServiceSref = slist.servicelist.getCurrent()
+               return currentServiceSref
+
+       def HDMIIn(self):
+               curref = self.session.nav.getCurrentlyPlayingServiceReference()
+               if curref and curref.type == 8192:
+                       self.session.nav.playService(self.getCurrentServiceRef())
+               else:
+                       self.session.nav.playService(self.hdmiInServiceRef)
+
+       def HDMIInPIP(self):
+               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.pipshown = False
+                       del self.session.pip
+                       self.session.openWithCallback(self.close, MessageBox, _("Could not open Picture in Picture"), MessageBox.TYPE_ERROR)