add "show transponder" info to service context menu in channellist
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 22 Dec 2006 15:50:51 +0000 (15:50 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Fri, 22 Dec 2006 15:50:51 +0000 (15:50 +0000)
Navigation.py
lib/python/Screens/ChannelSelection.py
lib/python/Screens/ScanSetup.py
lib/python/Screens/ServiceInfo.py
lib/service/servicedvb.cpp

index c2d2752..ece8922 100644 (file)
@@ -1,4 +1,4 @@
-from enigma import eServiceCenter, eServiceReference, pNavigation
+from enigma import eServiceCenter, eServiceReference, pNavigation, getBestPlayableServiceReference
 from Components.ParentalControl import parentalControl
 from Tools.BoundFunction import boundFunction
 import RecordTimer
index 9cbb422..db2789d 100644 (file)
@@ -15,6 +15,7 @@ from Components.Input import Input
 from Components.ParentalControl import parentalControl
 from Screens.InputBox import InputBox, PinInput
 from Screens.MessageBox import MessageBox
+from Screens.ServiceInfo import ServiceInfo
 from ServiceReference import ServiceReference
 from Tools.BoundFunction import boundFunction
 from re import *
@@ -81,6 +82,8 @@ class ChannelContextMenu(Screen):
                inBouquet = csel.getMutableList() is not None
                haveBouquets = config.usage.multibouquet.value
 
+               if not (len(current_sel_path) or current_sel_flags & eServiceReference.isDirectory):
+                       menu.append((_("show transponder info"), self.showServiceInformations))
                if csel.bouquet_mark_edit == OFF and not csel.movemode:
                        if not inBouquetRootList:
                                isPlayable = not (current_sel_flags & (eServiceReference.isMarker|eServiceReference.isDirectory))
@@ -146,7 +149,10 @@ class ChannelContextMenu(Screen):
 
        def cancelClick(self):
                self.close(False)
-               
+
+       def showServiceInformations(self):
+               self.session.open( ServiceInfo, self.csel.getCurrentSelection() )
+
        def showBouquetInputBox(self):
                self.session.openWithCallback(self.bouquetInputCallback, InputBox, title=_("Please enter a name for the new bouquet"), text="bouquetname", maxSize=False, type=Input.TEXT)
 
index 81985a8..f9c25c7 100644 (file)
@@ -188,10 +188,10 @@ class ScanSetup(ConfigListScreen, Screen):
                        self.list.append(self.typeOfScanEntry)
 
                if nimmanager.getNimType(self.scan_nims.index) == nimmanager.nimType["DVB-S"]:
-
                        if self.scan_type.value == "single_transponder":
-#                              self.systemEntry = getConfigListEntry(_('Transpondertype'), self.scan_sat.system)
-#                              self.list.append(self.systemEntry)
+                               if nimmanager.getNimName(self.scan_nims.index).find("DVB-S2") != -1:
+                                       self.systemEntry = getConfigListEntry(_('Transpondertype'), self.scan_sat.system)
+                                       self.list.append(self.systemEntry)
                                self.list.append(getConfigListEntry(_('Satellite'), self.scan_satselection[self.scan_nims.index]))
                                self.list.append(getConfigListEntry(_('Frequency'), self.scan_sat.frequency))
                                self.list.append(getConfigListEntry(_('Inversion'), self.scan_sat.inversion))
index 639b970..3899968 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, iServiceInformation
+from enigma import eListboxPythonMultiContent, eListbox, gFont, iServiceInformation, eServiceCenter
 
 RT_HALIGN_LEFT = 0
 
@@ -51,8 +51,11 @@ class ServiceInfoList(HTMLComponent, GUIComponent):
                self.instance.setContent(self.l)
                self.instance.setItemHeight(25)
 
+TYPE_SERVICE_INFO = 1
+TYPE_TRANSPONDER_INFO = 2
+
 class ServiceInfo(Screen):
-       def __init__(self, session):
+       def __init__(self, session, serviceref=None):
                Screen.__init__(self, session)
                
                self["actions"] = ActionMap(["OkCancelActions", "ColorActions"],
@@ -64,60 +67,96 @@ class ServiceInfo(Screen):
                        "yellow": self.transponder,
                        "blue": self.tuner
                }, -1)
-               
-               service = session.nav.getCurrentService()
-               if service is not None:
-                       self.info = service.info()
-                       self.feinfo = service.frontendInfo()
-                       print self.info.getInfoObject(iServiceInformation.sCAIDs);
-               else:
-                       self.info = None
-                       self.feinfo = None
 
+               if serviceref:
+                       self.type = TYPE_TRANSPONDER_INFO
+                       self["red"] = Label()
+                       self["green"] = Label()
+                       self["yellow"] = Label()
+                       self["blue"] = Label()
+                       info = eServiceCenter.getInstance().info(serviceref)
+                       self.transponder_info = info.getInfoObject(serviceref, iServiceInformation.sTransponderData)
+               else:
+                       self.type = TYPE_SERVICE_INFO
+                       self["red"] = Label(_("Serviceinfo"))
+                       self["green"] = Label(_("PIDs"))
+                       self["yellow"] = Label(_("Transponder"))
+                       self["blue"] = Label(_("Tuner status"))
+                       service = session.nav.getCurrentService()
+                       if service is not None:
+                               self.info = service.info()
+                               self.feinfo = service.frontendInfo()
+                               print self.info.getInfoObject(iServiceInformation.sCAIDs);
+                       else:
+                               self.info = None
+                               self.feinfo = None
 
-               self["red"] = Label(_("Serviceinfo"))
-               self["green"] = Label(_("PIDs"))
-               self["yellow"] = Label(_("Transponder"))
-               self["blue"] = Label(_("Tuner status"))
-       
                tlist = [ ]
 
                self["infolist"] = ServiceInfoList(tlist)
                self.onShown.append(self.information)
 
        def information(self):
-               if self.session.nav.getCurrentlyPlayingServiceReference() is not None:
-                       name = ServiceReference(self.session.nav.getCurrentlyPlayingServiceReference()).getServiceName()
+               if self.type == TYPE_SERVICE_INFO:
+                       if self.session.nav.getCurrentlyPlayingServiceReference() is not None:
+                               name = ServiceReference(self.session.nav.getCurrentlyPlayingServiceReference()).getServiceName()
+                       else:
+                               name = "N/A"
+                       Labels = ( ("Name",  name, TYPE_TEXT),
+                                          ("Provider", self.getServiceInfoValue(iServiceInformation.sProvider), TYPE_TEXT),
+                                          ("Videoformat", self.getServiceInfoValue(iServiceInformation.sAspect), TYPE_TEXT),
+                                          ("Namespace", self.getServiceInfoValue(iServiceInformation.sNamespace), TYPE_VALUE_HEX, 8))
+                       self.fillList(Labels)
                else:
-                       name = "N/A"
-               Labels = ( ("Name",  name, TYPE_TEXT),
-                                  ("Provider", self.getServiceInfoValue(iServiceInformation.sProvider), TYPE_TEXT),
-                                  ("Videoformat", self.getServiceInfoValue(iServiceInformation.sAspect), TYPE_TEXT),
-                                  ("Namespace", self.getServiceInfoValue(iServiceInformation.sNamespace), TYPE_VALUE_HEX, 8))
-               self.fillList(Labels)
-       
+                       if self.transponder_info:
+                               conv = { "type"                         : _("Transponder Type:"),
+                                                "frequency"            : _("Frequency:"),
+                                                "symbolrate"           : _("Symbolrate:"),
+                                                "orbital position" : _("Orbital Position:"),
+                                                "inversion"            : _("Inversion:"),
+                                                "fec inner"            : _("FEC:"),
+                                                "modulation"           : _("Modulation:"),
+                                                "polarization"         : _("Polarization:"),
+                                                "roll off"                     : _("Rolloff:"),
+                                                "system"                       : _("System:"),
+                                                "bandwidth"            : _("Bandwidth:"),
+                                                "code rate lp"         : _("Coderate LP:"),
+                                                "code rate hp"         : _("Coderate HP:"),
+                                                "constellation"        : _("Constellation:"),
+                                                "transmission mode": _("Transmission Mode:"),
+                                                "guard interval"       : _("Guard Interval:"),
+                                                "hierarchy"            : _("Hierarchy Information:") }
+                               Labels = [ ]
+                               for i in self.transponder_info.keys():
+                                       Labels.append( (conv[i], self.transponder_info[i], TYPE_TEXT) )
+                               self.fillList(Labels)
+
        def pids(self):
-               Labels = ( ("VideoPID", self.getServiceInfoValue(iServiceInformation.sVideoPID), TYPE_VALUE_HEX_DEC, 4),
-                                  ("AudioPID", self.getServiceInfoValue(iServiceInformation.sAudioPID), TYPE_VALUE_HEX_DEC, 4),
-                                  ("PCRPID", self.getServiceInfoValue(iServiceInformation.sPCRPID), TYPE_VALUE_HEX_DEC, 4),
-                                  ("PMTPID", self.getServiceInfoValue(iServiceInformation.sPMTPID), TYPE_VALUE_HEX_DEC, 4),
-                                  ("TXTPID", self.getServiceInfoValue(iServiceInformation.sTXTPID), TYPE_VALUE_HEX_DEC, 4),
-                                  ("TSID", self.getServiceInfoValue(iServiceInformation.sTSID), TYPE_VALUE_HEX_DEC, 4),
-                                  ("ONID", self.getServiceInfoValue(iServiceInformation.sONID), TYPE_VALUE_HEX_DEC, 4),
-                                  ("SID", self.getServiceInfoValue(iServiceInformation.sSID), TYPE_VALUE_HEX_DEC, 4))
-               self.fillList(Labels)
+               if self.type == TYPE_SERVICE_INFO:
+                       Labels = ( ("VideoPID", self.getServiceInfoValue(iServiceInformation.sVideoPID), TYPE_VALUE_HEX_DEC, 4),
+                                          ("AudioPID", self.getServiceInfoValue(iServiceInformation.sAudioPID), TYPE_VALUE_HEX_DEC, 4),
+                                          ("PCRPID", self.getServiceInfoValue(iServiceInformation.sPCRPID), TYPE_VALUE_HEX_DEC, 4),
+                                          ("PMTPID", self.getServiceInfoValue(iServiceInformation.sPMTPID), TYPE_VALUE_HEX_DEC, 4),
+                                          ("TXTPID", self.getServiceInfoValue(iServiceInformation.sTXTPID), TYPE_VALUE_HEX_DEC, 4),
+                                          ("TSID", self.getServiceInfoValue(iServiceInformation.sTSID), TYPE_VALUE_HEX_DEC, 4),
+                                          ("ONID", self.getServiceInfoValue(iServiceInformation.sONID), TYPE_VALUE_HEX_DEC, 4),
+                                          ("SID", self.getServiceInfoValue(iServiceInformation.sSID), TYPE_VALUE_HEX_DEC, 4))
+                       self.fillList(Labels)
        
        def showFrontendData(self, real):
-               frontendData = self.feinfo and self.feinfo.getFrontendData(real)
-               Labels = self.getFEData(frontendData)
-               self.fillList(Labels)
+               if self.type == TYPE_SERVICE_INFO:
+                       frontendData = self.feinfo and self.feinfo.getFrontendData(real)
+                       Labels = self.getFEData(frontendData)
+                       self.fillList(Labels)
        
        def transponder(self):
-               self.showFrontendData(True)
+               if self.type == TYPE_SERVICE_INFO:
+                       self.showFrontendData(True)
                
        def tuner(self):
-               self.showFrontendData(False)
-               
+               if self.type == TYPE_SERVICE_INFO:
+                       self.showFrontendData(False)
+
        def getFEData(self, frontendData):
                if frontendData is None:
                        return []
index 774e3f6..ea014a1 100644 (file)
@@ -125,7 +125,7 @@ extern void PutToDict(ePyObject &dict, const char*key, const char *value);
 void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &feparm)
 {
        const char *tmp=0;
-       PutToDict(dict, "type", "satellite");
+       PutToDict(dict, "type", "Satellite");
        PutToDict(dict, "frequency", feparm.frequency);
        PutToDict(dict, "symbolrate", feparm.symbol_rate);
        PutToDict(dict, "orbital position", feparm.orbital_position);
@@ -192,7 +192,7 @@ void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &fe
 
 void PutTerrestrialDataToDict(ePyObject &dict, eDVBFrontendParametersTerrestrial &feparm)
 {
-       PutToDict(dict, "type", "terrestrial");
+       PutToDict(dict, "type", "Terrestrial");
        PutToDict(dict, "frequency", feparm.frequency);
        const char *tmp=0;
        switch (feparm.bandwidth)
@@ -276,7 +276,7 @@ void PutTerrestrialDataToDict(ePyObject &dict, eDVBFrontendParametersTerrestrial
 void PutCableDataToDict(ePyObject &dict, eDVBFrontendParametersCable &feparm)
 {
        const char *tmp=0;
-       PutToDict(dict, "type", "cable");
+       PutToDict(dict, "type", "Cable");
        PutToDict(dict, "frequency", feparm.frequency);
        PutToDict(dict, "symbolrate", feparm.symbol_rate);
        switch (feparm.modulation)