fix zapping alternatives bluescreen
[enigma2.git] / lib / python / Plugins / Extensions / ZappingAlternatives / plugin.py
index 2a7f588d985da85da463d4911eec446cfad06f6e..814f174ae30aa34b3013355a17d535fe9714bc20 100644 (file)
@@ -57,8 +57,8 @@ class AlternativeZapping(Screen):
                        <widget name="green" position="140,0" size="140,40" backgroundColor="green" halign="center" valign="center" font="Regular;21" />
                        <widget name="yellow" position="280,0" size="140,40" backgroundColor="yellow" halign="center" valign="center" font="Regular;21" />
                        <widget name="blue" position="420,0" size="140,40" backgroundColor="blue" halign="center" valign="center" font="Regular;21" />
-                       <widget name="serviceslist" position="0,40" size="280,360" />
-                       <widget name="alternativeslist" position="280,40" size="280,360" selectionDisabled="1" />
+                       <widget name="serviceslist" position="0,40" size="280,360" scrollbarMode="showOnDemand" />
+                       <widget name="alternativeslist" position="280,40" size="280,360" selectionDisabled="1" scrollbarMode="showOnDemand" />
                </screen>"""
        def __init__(self, session):
                self.skin = AlternativeZapping.skin
@@ -216,13 +216,14 @@ class AlternativeZapping(Screen):
        def greenKey(self):
                self.session.openWithCallback(self.finishedChannelSelection, SimpleChannelSelection, _("Select reference service"))
 
-       def finishedChannelSelection(self, args):
-               serviceString = str(ServiceReference(args))
-               if not self.alternatives.has_key(serviceString):
-                       self.alternatives[serviceString] = []
-               self.updateServices()
-               self.selectService(serviceString)
-               self.updateAlternatives()
+       def finishedChannelSelection(self, *args):
+               if len(args):
+                       serviceString = str(ServiceReference(args[0]))
+                       if not self.alternatives.has_key(serviceString):
+                               self.alternatives[serviceString] = []
+                       self.updateServices()
+                       self.selectService(serviceString)
+                       self.updateAlternatives()
                
        def yellowKey(self):
                if len(self.serviceslist) > 0:
@@ -232,7 +233,7 @@ class AlternativeZapping(Screen):
                pass
 
 
-oldPlayService = NavigationInstance.instance.playService
+oldPlayService = None
 
 from Components.PerServiceDisplay import PerServiceDisplay
 
@@ -274,29 +275,32 @@ class ServiceChanged(PerServiceDisplay):
 
                                        #print "Alternatives: No playable alternative found!"
 
-servicechanged = ServiceChanged(NavigationInstance.instance)
+servicechanged = None
 
-def playService(self, ref):
+def playService(self, ref, **kwargs):
        #print "--------------------Alternatives: trying to play service", str(ServiceReference(ref))
-       servicechanged.lastPlayAction = str(ServiceReference(ref))
+       if ref is not None:
+               servicechanged.lastPlayAction = str(ServiceReference(ref))
        servicechanged.nextPlayTry = 0
-       result = oldPlayService(ref)
-
-       
+       result = oldPlayService(ref, **kwargs)
        return result
 
-def autostart(reason):
+def sessionstart(reason, session, **kwargs):
        if reason == 0:
                try:
                        loadAlternatives()
-               except:
+               except: # FIXME, THIS IS ILLEGAL CODE AND WILL BE PROSECUTED!
                        pass
-               NavigationInstance.instance.playService = type(NavigationInstance.instance.playService)(playService, NavigationInstance, Navigation)
                
+               # attach to this sessions navigation instance.
+               global oldPlayService, servicechanged
+               oldPlayService = session.nav.playService
+               session.nav.playService = type(session.nav.playService)(playService, NavigationInstance, Navigation)
+               servicechanged = ServiceChanged(session.nav)
 
-def AlternativeZappingSetup(session):
+def AlternativeZappingSetup(session, **kwargs):
        session.open(AlternativeZapping)
 
-def Plugins():
-       return [PluginDescriptor(where = PluginDescriptor.WHERE_AUTOSTART, fnc = autostart),
+def Plugins(**kwargs):
+       return [PluginDescriptor(where = PluginDescriptor.WHERE_SESSIONSTART, fnc = sessionstart),
                        PluginDescriptor(name="Alternative services setup" , description="Defines alternatives for services.", where = PluginDescriptor.WHERE_PLUGINMENU, fnc=AlternativeZappingSetup)]