-from ChannelSelection import ChannelSelection, BouquetSelector
+from ChannelSelection import ChannelSelection, BouquetSelector, SilentBouquetSelector
from Components.ActionMap import ActionMap, HelpableActionMap
from Components.ActionMap import NumberActionMap
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
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()
cnt = 0
else:
cnt = len(bouquets)
+ if config.usage.multiepg_ask_bouquet.value:
+ self.openMultiServiceEPGAskBouquet(bouquets, cnt, withCallback)
+ else:
+ self.openMultiServiceEPGSilent(bouquets, cnt, withCallback)
+
+ def openMultiServiceEPGAskBouquet(self, bouquets, cnt, withCallback):
if cnt > 1: # show bouquet list
if withCallback:
self.bouquetSel = self.session.openWithCallback(self.closed, BouquetSelector, bouquets, self.openBouquetEPG, enableWrapAround=True)
elif cnt == 1:
self.openBouquetEPG(bouquets[0][1], withCallback)
+ def openMultiServiceEPGSilent(self, bouquets, cnt, withCallback):
+ root = self.servicelist.getRoot()
+ rootstr = root.toCompareString()
+ current = 0
+ for bouquet in bouquets:
+ if bouquet[1].toCompareString() == rootstr:
+ break
+ current += 1
+ if current >= cnt:
+ current = 0
+ if cnt > 1: # create bouquet list for bouq+/-
+ self.bouquetSel = SilentBouquetSelector(bouquets, True, self.servicelist.getBouquetNumOffset(root))
+ if cnt >= 1:
+ self.openBouquetEPG(root, withCallback)
+
def changeServiceCB(self, direction, epg):
if self.serviceSel:
if direction > 0:
"""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=
self["SeekActions"] = InfoBarSeekActionMap(self, actionmap,
{
- "playpauseService": self.playpauseService,
+ "playpauseService": (self.playpauseService, _("Pause/Continue")),
"pauseService": (self.pauseService, _("pause")),
"unPauseService": (self.unPauseService, _("continue")),
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
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):
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:
"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))
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):
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:
else:
del self.selectedSubservice
+from Components.Sources.HbbtvApplication import HbbtvApplication
+gHbbtvApplication = HbbtvApplication()
+class InfoBarRedButton:
+ def __init__(self):
+ if not (config.misc.rcused.value == 1):
+ self["RedButtonActions"] = HelpableActionMap(self, "InfobarRedButtonActions",
+ {
+ "activateRedButton": (self.activateRedButton, _("Red button...")),
+ })
+ self["HbbtvApplication"] = gHbbtvApplication
+ else:
+ self["HbbtvApplication"] = Boolean(fixed=0)
+ self["HbbtvApplication"].name = "" #is this a hack?
+
+ self.onHBBTVActivation = [ ]
+ self.onRedButtonActivation = [ ]
+ self.onReadyForAIT = [ ]
+ self.__et = ServiceEventTracker(screen=self, eventmap=
+ {
+ iPlayableService.evHBBTVInfo: self.detectedHbbtvApplication,
+ iPlayableService.evUpdatedInfo: self.updateInfomation
+ })
+
+ def updateAIT(self, orgId=0):
+ for x in self.onReadyForAIT:
+ try:
+ x(orgId)
+ except Exception, ErrMsg:
+ print ErrMsg
+ #self.onReadyForAIT.remove(x)
+
+ def updateInfomation(self):
+ try:
+ self["HbbtvApplication"].setApplicationName("")
+ self.updateAIT()
+ except Exception, ErrMsg:
+ pass
+
+ def detectedHbbtvApplication(self):
+ service = self.session.nav.getCurrentService()
+ info = service and service.info()
+ try:
+ for x in info.getInfoObject(iServiceInformation.sHBBTVUrl):
+ print x
+ if x[0] in (-1, 1):
+ self.updateAIT(x[3])
+ self["HbbtvApplication"].setApplicationName(x[1])
+ break
+ except Exception, ErrMsg:
+ pass
+
+ def activateRedButton(self):
+ service = self.session.nav.getCurrentService()
+ info = service and service.info()
+ if info and info.getInfoString(iServiceInformation.sHBBTVUrl) != "":
+ for x in self.onHBBTVActivation:
+ x()
+ elif False: # TODO: other red button services
+ for x in self.onRedButtonActivation:
+ x()
+
class InfoBarAdditionalInfo:
def __init__(self):
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)
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=
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:
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()
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)