from Screens.Dish import Dish
from Screens.Standby import Standby
from Screens.EventView import EventView
+from Screens.MinuteInput import MinuteInput
from Components.Harddisk import harddiskmanager
from Tools import Notifications
+from Tools.Directories import *
#from enigma import eTimer, eDVBVolumecontrol, quitMainloop
from enigma import *
def keyNumberGlobal(self, number):
# print "You pressed number " + str(number)
- self.session.openWithCallback(self.numberEntered, NumberZap, number)
+ if number == 0:
+ self.session.nav.zapLast()
+ self.instance.show()
+ self.show()
+ else:
+ self.session.openWithCallback(self.numberEntered, NumberZap, number)
def numberEntered(self, retval):
# print self.servicelist
"unPauseService": (self.unPauseService, "continue"),
"seekFwd": (self.seekFwd, "skip forward"),
+ "seekFwdUp": (self.seekFwdUp, "skip forward"),
"seekBack": (self.seekBack, "skip backward"),
+ "seekBackUp": (self.seekBackUp, "skip backward"),
+
+ "up": (self.showMovies, "movie list"),
+ "down": (self.showMovies, "movie list")
})
self.seekstate = self.SEEK_STATE_PLAY
self.seekTimer.timeout.get().append(self.seekTimerFired)
self.skipinterval = 500 # 500ms skip interval
self.onClose.append(self.delSeekTimer)
+
+ self.fwdtimer = False
+ self.fwdKeyTimer = eTimer()
+ self.fwdKeyTimer.timeout.get().append(self.fwdTimerFire)
+
+ self.rwdtimer = False
+ self.rwdKeyTimer = eTimer()
+ self.rwdKeyTimer.timeout.get().append(self.rwdTimerFire)
+
+ def up(self):
+ pass
+
+ def down(self):
+ pass
def delSeekTimer(self):
del self.seekTimer
self.seekbase = seekable.getPlayPosition()[1] / 90
def pauseService(self):
- self.setSeekState(self.SEEK_STATE_PAUSE);
+ if (self.seekstate == self.SEEK_STATE_PAUSE):
+ self.unPauseService()
+ else:
+ self.setSeekState(self.SEEK_STATE_PAUSE);
def unPauseService(self):
self.setSeekState(self.SEEK_STATE_PLAY);
seekable.seekTo(90 * seektime)
def seekFwd(self):
- lookup = {
- self.SEEK_STATE_PLAY: self.SEEK_STATE_FF_2X,
- self.SEEK_STATE_PAUSE: self.SEEK_STATE_SM_EIGHTH,
- self.SEEK_STATE_FF_2X: self.SEEK_STATE_FF_4X,
- self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_8X,
- self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_32X,
- self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_64X,
- self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_128X,
- self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_128X,
- self.SEEK_STATE_BACK_4X: self.SEEK_STATE_PLAY,
- self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_4X,
- self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_32X,
- self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_64X,
- self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_HALF,
- self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_HALF,
- self.SEEK_STATE_SM_EIGHTH: self.SEEK_STATE_SM_QUARTER
- }
- self.setSeekState(lookup[self.seekstate]);
-
+ print "start fwd timer"
+ self.fwdtimer = True
+ self.fwdKeyTimer.start(500)
+
def seekBack(self):
- lookup = {
- self.SEEK_STATE_PLAY: self.SEEK_STATE_BACK_4X,
- self.SEEK_STATE_PAUSE: self.SEEK_STATE_PAUSE,
- self.SEEK_STATE_FF_2X: self.SEEK_STATE_PLAY,
- self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_2X,
- self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_4X,
- self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_8X,
- self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_32X,
- self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_64X,
- self.SEEK_STATE_BACK_4X: self.SEEK_STATE_BACK_32X,
- self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_64X,
- self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_128X,
- self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_128X,
- self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_QUARTER,
- self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_EIGHTH,
- self.SEEK_STATE_SM_EIGHTH: self.SEEK_STATE_PAUSE
- }
- self.setSeekState(lookup[self.seekstate]);
+ print "start rewind timer"
+ self.rwdtimer = True
+ self.rwdKeyTimer.start(500)
+
+ def seekFwdUp(self):
+ if self.fwdtimer:
+ self.fwdKeyTimer.stop()
+ self.fwdtimer = False
+ lookup = {
+ self.SEEK_STATE_PLAY: self.SEEK_STATE_FF_2X,
+ self.SEEK_STATE_PAUSE: self.SEEK_STATE_SM_EIGHTH,
+ self.SEEK_STATE_FF_2X: self.SEEK_STATE_FF_4X,
+ self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_8X,
+ self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_32X,
+ self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_64X,
+ self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_128X,
+ self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_128X,
+ self.SEEK_STATE_BACK_4X: self.SEEK_STATE_PLAY,
+ self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_4X,
+ self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_32X,
+ self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_64X,
+ self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_HALF,
+ self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_HALF,
+ self.SEEK_STATE_SM_EIGHTH: self.SEEK_STATE_SM_QUARTER
+ }
+ self.setSeekState(lookup[self.seekstate]);
+
+ def seekBackUp(self):
+ if self.rwdtimer:
+ self.rwdKeyTimer.stop()
+ self.rwdtimer = False
+
+ lookup = {
+ self.SEEK_STATE_PLAY: self.SEEK_STATE_BACK_4X,
+ self.SEEK_STATE_PAUSE: self.SEEK_STATE_PAUSE,
+ self.SEEK_STATE_FF_2X: self.SEEK_STATE_PLAY,
+ self.SEEK_STATE_FF_4X: self.SEEK_STATE_FF_2X,
+ self.SEEK_STATE_FF_8X: self.SEEK_STATE_FF_4X,
+ self.SEEK_STATE_FF_32X: self.SEEK_STATE_FF_8X,
+ self.SEEK_STATE_FF_64X: self.SEEK_STATE_FF_32X,
+ self.SEEK_STATE_FF_128X: self.SEEK_STATE_FF_64X,
+ self.SEEK_STATE_BACK_4X: self.SEEK_STATE_BACK_32X,
+ self.SEEK_STATE_BACK_32X: self.SEEK_STATE_BACK_64X,
+ self.SEEK_STATE_BACK_64X: self.SEEK_STATE_BACK_128X,
+ self.SEEK_STATE_BACK_128X: self.SEEK_STATE_BACK_128X,
+ self.SEEK_STATE_SM_HALF: self.SEEK_STATE_SM_QUARTER,
+ self.SEEK_STATE_SM_QUARTER: self.SEEK_STATE_SM_EIGHTH,
+ self.SEEK_STATE_SM_EIGHTH: self.SEEK_STATE_PAUSE
+ }
+ self.setSeekState(lookup[self.seekstate]);
+
+ def fwdTimerFire(self):
+ print "Display seek fwd"
+ self.fwdKeyTimer.stop()
+ self.fwdtimer = False
+ self.session.openWithCallback(self.fwdSeekTo, MinuteInput)
+
+ def fwdSeekTo(self, minutes):
+ print "Seek", minutes, "minutes forward"
+ if minutes != 0:
+ service = self.session.nav.getCurrentService()
+ if service is None:
+ return
+ seekable = service.seek()
+ if seekable is None:
+ return
+ seekable.seekRelative(1, minutes * 60 * 90000)
+
+ def rwdTimerFire(self):
+ self.rwdKeyTimer.stop()
+ self.rwdtimer = False
+ self.session.openWithCallback(self.rwdSeekTo, MinuteInput)
+
+ def rwdSeekTo(self, minutes):
+ self.fwdSeekTo(0 - minutes)
from RecordTimer import parseEvent
def instantRecord(self):
try:
- stat = os.stat("/hdd/movies")
+ stat = os.stat(resolveFilename(SCOPE_HDD))
except:
- self.session.open(MessageBox, "No HDD found!")
+ self.session.open(MessageBox, _("No HDD found or HDD not initialized!"), MessageBox.TYPE_ERROR)
return
if self.isInstantRecordRunning():
class InfoBarAdditionalInfo:
def __init__(self):
- self["DolbyActive"] = PixmapConditional()
- # TODO: get the info from c++ somehow
- self["DolbyActive"].setConnect(lambda: False)
-
- self["CryptActive"] = PixmapConditional()
- # TODO: get the info from c++ somehow
- self["CryptActive"].setConnect(lambda: False)
-
- self["FormatActive"] = PixmapConditional()
- # TODO: get the info from c++ somehow
- self["FormatActive"].setConnect(lambda: False)
+ self["DolbyActive"] = Pixmap()
+ self["CryptActive"] = Pixmap()
+ self["FormatActive"] = Pixmap()
self["ButtonRed"] = PixmapConditional(withTimer = False)
self["ButtonRed"].setConnect(lambda: harddiskmanager.HDDCount() > 0)
self["ButtonRedText"] = LabelConditional(text = _("Record"), withTimer = False)
self["ButtonRedText"].setConnect(lambda: harddiskmanager.HDDCount() > 0)
self.onShown.append(self["ButtonRedText"].update)
-
- self["ButtonGreen"] = PixmapConditional()
- self["ButtonGreen"].setConnect(lambda: self.session.nav.getCurrentService().subServices().getNumberOfSubservices() > 0)
- self["ButtonGreenText"] = LabelConditional(text = _("Subservices"))
- self["ButtonGreenText"].setConnect(lambda: self.session.nav.getCurrentService().subServices().getNumberOfSubservices() > 0)
- self["ButtonYellow"] = PixmapConditional()
+ self["ButtonGreen"] = Pixmap()
+ self["ButtonGreenText"] = Label(_("Subservices"))
+
+ self["ButtonYellow"] = PixmapConditional(withTimer = False)
self["ButtonYellow"].setConnect(lambda: False)
- self["ButtonBlue"] = PixmapConditional()
+ self["ButtonBlue"] = PixmapConditional(withTimer = False)
self["ButtonBlue"].setConnect(lambda: False)
+ self.session.nav.event.append(self.gotServiceEvent) # we like to get service events
+
+ def hideSubServiceIndication(self):
+ self["ButtonGreen"].hideWidget()
+ self["ButtonGreenText"].hide()
+
+ def showSubServiceIndication(self):
+ self["ButtonGreen"].showWidget()
+ self["ButtonGreenText"].show()
+
+ def checkFormat(self, service):
+ info = service.info()
+ if info is not None:
+ aspect = info.getInfo(iServiceInformation.sAspect)
+ if aspect in [ 3, 4, 7, 8, 0xB, 0xC, 0xF, 0x10 ]:
+ self["FormatActive"].showWidget()
+ else:
+ self["FormatActive"].hideWidget()
+
+ def checkSubservices(self, service):
+ if service.subServices().getNumberOfSubservices() > 0:
+ self.showSubServiceIndication()
+ else:
+ self.hideSubServiceIndication()
+
+ def checkDolby(self, service):
+ dolby = False
+ audio = service.audioTracks()
+ if audio is not None:
+ n = audio.getNumberOfTracks()
+ for x in range(n):
+ i = audio.getTrackInfo(x)
+ description = i.getDescription();
+ if description.find("AC3") != -1 or description.find("DTS") != -1:
+ dolby = True
+ break
+ if dolby:
+ self["DolbyActive"].showWidget()
+ else:
+ self["DolbyActive"].hideWidget()
+
+ def checkCrypted(self, service):
+ info = service.info()
+ if info is not None:
+ if info.getInfo(iServiceInformation.sIsCrypted) > 0:
+ self["CryptActive"].showWidget()
+ else:
+ self["CryptActive"].hideWidget()
+
+ def gotServiceEvent(self, ev):
+ service = self.session.nav.getCurrentService()
+ if ev == pNavigation.evUpdatedEventInfo:
+ self.checkSubservices(service)
+ self.checkFormat(service)
+ elif ev == pNavigation.evUpdatedInfo:
+ self.checkCrypted(service)
+ self.checkDolby(service)
+ elif ev == pNavigation.evStopService:
+ self.hideSubServiceIndication()
+ self["CryptActive"].hideWidget()
+ self["DolbyActive"].hideWidget()
+ self["FormatActive"].hideWidget()
+
class InfoBarNotifications:
def __init__(self):
self.onExecBegin.append(self.checkNotifications)