add support for cyclic garbage collection to eTimer and eSocketNotifier
[vuplus_dvbapp] / lib / python / Screens / SubservicesQuickzap.py
index 14b7b3c..448b4b4 100644 (file)
@@ -4,15 +4,15 @@ 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, InfoBarServiceName, InfoBarInstantRecord, InfoBarTimeshift, InfoBarSeek, InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport, InfoBarAudioSelection
 
-class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport, Screen):
+from enigma import eTimer
+
+class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, InfoBarTimeshiftState, InfoBarExtensions, InfoBarSubtitleSupport, InfoBarAudioSelection, Screen):
        def __init__(self, session, subservices):
                Screen.__init__(self, session)
-               for x in [InfoBarShowHide, InfoBarMenu, InfoBarServiceName, InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, InfoBarTimeshiftState, InfoBarSubtitleSupport]:
+               for x in [InfoBarShowHide, InfoBarMenu, InfoBarServiceName, InfoBarInstantRecord, InfoBarSeek, InfoBarTimeshift, InfoBarTimeshiftState, InfoBarSubtitleSupport, InfoBarExtensions, InfoBarAudioSelection]:
                        x.__init__(self)
-               InfoBarExtensions.__init__(self, useServicePath = False)
-
 
                self.restoreService = self.session.nav.getCurrentlyPlayingServiceReference()
                
@@ -21,9 +21,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,
@@ -42,10 +44,11 @@ class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, Info
                                "8": self.keyNumberGlobal,
                                "9": self.keyNumberGlobal,
                                "0": self.keyNumberGlobal
-                       }, -1)
+                       }, 0)
+
+       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()
@@ -53,38 +56,45 @@ 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))
+               if self.n is not None:
+                       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)
@@ -114,4 +124,4 @@ class SubservicesQuickzap(InfoBarShowHide, InfoBarMenu, InfoBarServiceName, Info
                        self.session.nav.playService(newservice)
                        self.currentlyPlayingSubservice = number
                        self.currentSubserviceNumberLabel.setText(str(number))
-                       self.doShow()
\ No newline at end of file
+                       self.doShow()