when no service is currently playing, serviceinfo is displayed without killing enigma2
[enigma2.git] / lib / python / Screens / ServiceInfo.py
index 10f7b28..6b0a2e0 100644 (file)
@@ -5,7 +5,7 @@ from Components.ActionMap import ActionMap
 from Components.Label import Label
 from Components.MenuList import MenuList
 from ServiceReference import ServiceReference
-from enigma import eListboxPythonMultiContent, eListbox, gFont
+from enigma import eListboxPythonMultiContent, eListbox, gFont, iServiceInformation
 
 RT_HALIGN_LEFT = 0
 
@@ -39,33 +39,62 @@ class ServiceInfoList(HTMLComponent, GUIComponent):
 class ServiceInfo(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
-
+               
                self["actions"] = ActionMap(["OkCancelActions"],
                {
                        "ok": self.close,
                        "cancel": self.close
                }, -1)
-       
-               Labels = ( ("Name",  "ServiceReference(self.session.nav.getCurrentlyPlayingServiceReference()).getServiceName()"),
-                                  ("Provider", ),
-                                  ("VideoPID",""),
-                                  ("AudioPID",""),
-                                  ("PCRPID",""),
-                                  ("PMTPID",""),
-                                  ("TXTPID",""),
-                                  ("Videoformat",""),
-                                  ("TSID",""),
-                                  ("ONID",""),
-                                  ("SID",""),
-                                  ("Namespace",""))
+               
+               service = session.nav.getCurrentService()
+               if service is not None:
+                       self.info = service.info()
+               else:
+                       self.info = None
+
+               if self.session.nav.getCurrentlyPlayingServiceReference() is not None:
+                       name = ServiceReference(self.session.nav.getCurrentlyPlayingServiceReference()).getServiceName()
+               else:
+                       name = "N/A"
+               Labels = ( ("Name",  name),
+                                  ("Provider", self.getValue(iServiceInformation.sProvider)),
+                                  ("VideoPID", self.getValue(iServiceInformation.sVideoPID)),
+                                  ("AudioPID", self.getValue(iServiceInformation.sAudioPID)),
+                                  ("PCRPID", self.getValue(iServiceInformation.sPCRPID)),
+                                  ("PMTPID", self.getValue(iServiceInformation.sPMTPID)),
+                                  ("TXTPID", self.getValue(iServiceInformation.sTXTPID)),
+                                  ("Videoformat", self.getValue(iServiceInformation.sAspect)),
+                                  ("TSID", self.getValue(iServiceInformation.sTSID)),
+                                  ("ONID", self.getValue(iServiceInformation.sONID)),
+                                  ("SID", self.getValue(iServiceInformation.sSID)),
+                                  ("Namespace", self.getValue(iServiceInformation.sNamespace)))
        
                tlist = [ ]
 
                for item in Labels:
-                       try:
-                               value = str(eval(item[1]))
-                       except:
-                               value = "N/A"
+                       value = item[1]
                        tlist.append(ServiceInfoListEntry(item[0]+":", value))          
 
                self["infolist"] = ServiceInfoList(tlist)
+
+       def getValue(self, what):
+               if self.info is None:
+                       return ""
+               
+               v = self.info.getInfo(what)
+               if v == -2:
+                       v = self.info.getInfoString(what)
+               elif v != -1:
+                       if what in [iServiceInformation.sVideoPID, 
+                                       iServiceInformation.sAudioPID, iServiceInformation.sPCRPID, iServiceInformation.sPMTPID, 
+                                       iServiceInformation.sTXTPID, iServiceInformation.sTSID, iServiceInformation.sONID,
+                                       iServiceInformation.sSID]:
+                               v = "0x%04x (%dd)" % (v, v)
+                       elif what in [iServiceInformation.sNamespace]:
+                               v = "0x%08x" % (v)
+                       else:
+                               v = str(v)
+               else:
+                       v = "N/A"
+
+               return v