from Screens.Screen import Screen from Components.ActionMap import NumberActionMap from Components.Label import Label from Screens.ChoiceBox import ChoiceBox from Screens.MessageBox import MessageBox from InfoBarGenerics import InfoBarShowHide, InfoBarMenu, InfoBarServiceName, InfoBarInstantRecord, InfoBarTimeshift, InfoBarSeek, InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport from enigma import eTimer class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport, Screen): def __init__(self, session, subservices): Screen.__init__(self, session) for x in [InfoBarShowHide, InfoBarMenu, InfoBarServiceName, InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, InfoBarTimeshiftState, InfoBarSubtitleSupport, InfoBarExtensions]: x.__init__(self) self.restoreService = self.session.nav.getCurrentlyPlayingServiceReference() self["CurrentSubserviceNumber"] = Label("") self.currentSubserviceNumberLabel = self["CurrentSubserviceNumber"] self.updateSubservices() self.currentlyPlayingSubservice = 0 self.timer = eTimer() self.timer.timeout.get().append(self.playSubservice) self.onLayoutFinish.append(self.onLayoutFinished) self["actions"] = NumberActionMap( [ "InfobarSubserviceQuickzapActions", "NumberActions", "DirectionActions", "ColorActions" ], { "up": self.showSelection, "down": self.showSelection, "right": self.nextSubservice, "left": self.previousSubservice, "green": self.showSelection, "exit": self.quitQuestion, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal }, -1) def onLayoutFinished(self): self.timer.start(0,True) def updateSubservices(self): self.service = self.session.nav.getCurrentService() self.subservices = self.service and self.service.subServices() self.n = self.subservices and self.subservices.getNumberOfSubservices() def nextSubservice(self): self.updateSubservices() if self.n: if self.currentlyPlayingSubservice >= self.n - 1: self.playSubservice(0) else: self.playSubservice(self.currentlyPlayingSubservice + 1) def previousSubservice(self): self.updateSubservices() if self.n: if self.currentlyPlayingSubservice > self.n: self.currentlyPlayingSubservice = self.n if self.currentlyPlayingSubservice == 0: self.playSubservice(self.n - 1) else: self.playSubservice(self.currentlyPlayingSubservice - 1) def getSubserviceIndex(self, service): self.updateSubservices() for x in range(self.n): if service == self.subservices.getSubservice(x): return self.n def keyNumberGlobal(self, number): print number, "pressed" self.updateSubservices() if number == 0: self.playSubservice(self.lastservice) elif number <= self.n - 1: self.playSubservice(number) def showSelection(self): self.updateSubservices() tlist = [] for x in range(self.n): i = self.subservices.getSubservice(x) tlist.append((i.getName(), x)) keys = [ "", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * self.n self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice..."), list = tlist, selection = self.currentlyPlayingSubservice, keys = keys) def subserviceSelected(self, service): print "playing subservice number", service if service is not None: self.playSubservice(service[1]) def keyOK(self): pass def quitQuestion(self): self.session.openWithCallback(self.quit, MessageBox, _("Really exit the subservices quickzap?")) def quit(self, answer): if answer: self.session.nav.playService(self.restoreService) self.close() def playSubservice(self, number = 0): newservice = self.subservices.getSubservice(number) if newservice.valid(): del self.subservices del self.service self.lastservice = self.currentlyPlayingSubservice self.session.nav.playService(newservice) self.currentlyPlayingSubservice = number self.currentSubserviceNumberLabel.setText(str(number)) self.doShow()