X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fpython%2FScreens%2FInfoBarGenerics.py;h=d1c6c84c9c694ee0077507ab5db69e7ae2b8c890;hp=3ef0880f921cb714cc4664c18861b435024f604c;hb=439941c4d23e8384ea334d599b42b338beb7ebd5;hpb=993ff2fb9432e8e0edf3a3cf341c5f343461ccf6 diff --git a/lib/python/Screens/InfoBarGenerics.py b/lib/python/Screens/InfoBarGenerics.py index 3ef0880..d1c6c84 100755 --- a/lib/python/Screens/InfoBarGenerics.py +++ b/lib/python/Screens/InfoBarGenerics.py @@ -36,10 +36,10 @@ 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 +from RecordTimer import RecordTimerEntry, RecordTimer, findSafeRecordPath # hack alert! from Menu import MainMenu, mdom @@ -47,10 +47,12 @@ from Menu import MainMenu, mdom class InfoBarDish: def __init__(self): self.dishDialog = self.session.instantiateDialog(Dish) + self.dishDialog.setAnimationMode(0) class InfoBarUnhandledKey: def __init__(self): self.unhandledKeyDialog = self.session.instantiateDialog(UnhandledKey) + self.unhandledKeyDialog.setAnimationMode(0) self.hideUnhandledKeySymbolTimer = eTimer() self.hideUnhandledKeySymbolTimer.callback.append(self.unhandledKeyDialog.hide) self.checkUnusedTimer = eTimer() @@ -233,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): @@ -687,6 +689,7 @@ class InfoBarRdsDecoder: """provides RDS and Rass support/display""" def __init__(self): self.rds_display = self.session.instantiateDialog(RdsInfoDisplay) + self.rds_display.setAnimationMode(0) self.rass_interactive = None self.__event_tracker = ServiceEventTracker(screen=self, eventmap= @@ -772,7 +775,7 @@ class InfoBarSeek: self["SeekActions"] = InfoBarSeekActionMap(self, actionmap, { - "playpauseService": self.playpauseService, + "playpauseService": (self.playpauseService, _("Pause/Continue")), "pauseService": (self.pauseService, _("pause")), "unPauseService": (self.unPauseService, _("continue")), @@ -1105,6 +1108,7 @@ class InfoBarPVRState: def __init__(self, screen=PVRState, force_show = False): self.onPlayStateChanged.append(self.__playStateChanged) self.pvrStateDialog = self.session.instantiateDialog(screen) + self.pvrStateDialog.setAnimationMode(0) self.onShow.append(self._mayShow) self.onHide.append(self.pvrStateDialog.hide) self.force_show = force_show @@ -1181,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" @@ -1200,7 +1205,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): @@ -1218,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 @@ -1304,6 +1317,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: @@ -1318,6 +1334,9 @@ class InfoBarExtensions: "extensions": (self.showExtensionSelection, _("view extensions...")), }, 1) # lower priority + for p in plugins.getPlugins(PluginDescriptor.WHERE_EXTENSIONSINGLE): + p(self) + def addExtension(self, extension, key = None, type = EXTENSION_SINGLE): self.list.append((type, extension, key)) @@ -1459,6 +1478,7 @@ class InfoBarPiP: self.session.pipshown = False else: self.session.pip = self.session.instantiateDialog(PictureInPicture) + self.session.pip.setAnimationMode(0) self.session.pip.show() newservice = self.session.nav.getCurrentlyPlayingServiceReference() if self.session.pip.playService(newservice): @@ -1501,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): @@ -1651,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() -# ikseong if not fileExists("/hdd", 0): print "not found /hdd" - 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 + os_system("ln -s /media/hdd /hdd") + + 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 @@ -1829,6 +1846,7 @@ class InfoBarSubserviceSelection: del self.selectedSubservice from Components.Sources.HbbtvApplication import HbbtvApplication +gHbbtvApplication = HbbtvApplication() class InfoBarRedButton: def __init__(self): if not (config.misc.rcused.value == 1): @@ -1836,7 +1854,7 @@ class InfoBarRedButton: { "activateRedButton": (self.activateRedButton, _("Red button...")), }) - self["HbbtvApplication"] = HbbtvApplication() + self["HbbtvApplication"] = gHbbtvApplication else: self["HbbtvApplication"] = Boolean(fixed=0) self["HbbtvApplication"].name = "" #is this a hack? @@ -1893,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) @@ -2226,6 +2244,7 @@ class InfoBarSubtitleSupport(object): def __init__(self): object.__init__(self) self.subtitle_window = self.session.instantiateDialog(SubtitleDisplay) + self.subtitle_window.setAnimationMode(0) self.__subtitles_enabled = False self.__event_tracker = ServiceEventTracker(screen=self, eventmap= @@ -2244,8 +2263,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: @@ -2266,7 +2284,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() @@ -2316,3 +2334,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)