X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/6bdfaadd65fe35ba568799b0e42c54e5a95e27ed..a6f7c725e21a4b6ed064e92b453331837d12f267:/lib/python/Screens/SubservicesQuickzap.py diff --git a/lib/python/Screens/SubservicesQuickzap.py b/lib/python/Screens/SubservicesQuickzap.py index 5d3d9779..3bcc3c46 100644 --- a/lib/python/Screens/SubservicesQuickzap.py +++ b/lib/python/Screens/SubservicesQuickzap.py @@ -4,12 +4,22 @@ 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 InfoBarGenerics import InfoBarShowHide, InfoBarMenu, InfoBarInstantRecord, InfoBarTimeshift, InfoBarSeek, InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport, InfoBarAudioSelection +from Components.ServiceEventTracker import InfoBarBase + +from enigma import eTimer + +class SubservicesQuickzap(InfoBarBase, InfoBarShowHide, InfoBarMenu, \ + InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, \ + InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport, \ + InfoBarAudioSelection, Screen): -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]: + for x in InfoBarBase, InfoBarShowHide, InfoBarMenu, \ + InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, \ + InfoBarTimeshiftState, InfoBarSubtitleSupport, \ + InfoBarExtensions, InfoBarAudioSelection: x.__init__(self) self.restoreService = self.session.nav.getCurrentlyPlayingServiceReference() @@ -19,9 +29,11 @@ class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, Info self.updateSubservices() self.currentlyPlayingSubservice = 0 - - self.onLayoutFinish.append(self.playSubservice) - + + self.timer = eTimer() + self.timer.callback.append(self.playSubservice) + self.onLayoutFinish.append(self.onLayoutFinished) + self["actions"] = NumberActionMap( [ "InfobarSubserviceQuickzapActions", "NumberActions", "DirectionActions", "ColorActions" ], { "up": self.showSelection, @@ -40,10 +52,16 @@ class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, Info "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumberGlobal - }, -1) - - + }, 0) + self.onClose.append(self.__onClose) + + def __onClose(self): + self.session.nav.playService(self.restoreService, False) + + 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() @@ -51,40 +69,50 @@ class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, Info def nextSubservice(self): self.updateSubservices() - if self.currentlyPlayingSubservice == self.n - 1: - self.playSubservice(0) - else: - self.playSubservice(self.currentlyPlayingSubservice + 1) + 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.currentlyPlayingSubservice == 0: - self.playSubservice(self.n - 1) - else: - self.playSubservice(self.currentlyPlayingSubservice - 1) - + 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() + if self.n is None: + return -1 for x in range(self.n): if service == self.subservices.getSubservice(x): - return self.n + return x def keyNumberGlobal(self, number): print number, "pressed" self.updateSubservices() if number == 0: self.playSubservice(self.lastservice) - elif number <= self.n - 1: + elif self.n is not None and 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)) + n = self.n or 0 + if n: + idx = 0 + while idx < n: + i = self.subservices.getSubservice(idx) + tlist.append((i.getName(), idx)) + idx += 1 - keys = [ "", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * self.n + keys = [ "", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * n self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice..."), list = tlist, selection = self.currentlyPlayingSubservice, keys = keys) def subserviceSelected(self, service): @@ -100,7 +128,6 @@ class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, Info def quit(self, answer): if answer: - self.session.nav.playService(self.restoreService) self.close() def playSubservice(self, number = 0): @@ -109,7 +136,7 @@ class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, Info del self.subservices del self.service self.lastservice = self.currentlyPlayingSubservice - self.session.nav.playService(newservice) + self.session.nav.playService(newservice, False) self.currentlyPlayingSubservice = number self.currentSubserviceNumberLabel.setText(str(number)) - self.doShow() \ No newline at end of file + self.doShow()