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
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):
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
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:
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"
- 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
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)
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)