X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fpython%2FScreens%2FInfoBarGenerics.py;h=bc66f1f6b476f747251fa133f6941eb0ccb4bedd;hb=5e0c1dbc3610b703f59fa798748b1676c0f356cc;hp=5a556c0a6eb6560acbf90590ac84ef756d37dcd6;hpb=4a4c8a59a49a5d0371485ca60a8176ad7b6cfb24;p=vuplus_dvbapp diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py old mode 100755 new mode 100644 index 5a556c0..bc66f1f --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -39,11 +39,14 @@ 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 +def isStandardInfoBar(self): + return self.__class__.__name__ == "InfoBar" + class InfoBarDish: def __init__(self): self.dishDialog = self.session.instantiateDialog(Dish) @@ -235,7 +238,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): @@ -852,7 +855,7 @@ class InfoBarSeek: return seek def isSeekable(self): - if self.getSeek() is None: + if self.getSeek() is None or (isStandardInfoBar(self) and not self.timeshift_enabled): return False return True @@ -1185,11 +1188,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" @@ -1204,7 +1208,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): @@ -1222,6 +1227,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 @@ -1308,6 +1320,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: @@ -1509,10 +1524,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): @@ -1659,18 +1675,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 @@ -1902,8 +1914,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) @@ -2325,3 +2337,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)