ask to delete unconfigured satellites when leave tuner configuration
[enigma2.git] / lib / python / Components / NimManager.py
index ec7d46fe0f4d547c73bb3eb2133a2ec769d89f72..9662a10d2a374ed0715b955e4f473db3179b350b 100644 (file)
@@ -1,4 +1,6 @@
-from config import config, ConfigSubsection, ConfigSelection, ConfigFloat, ConfigSatlist, ConfigYesNo, ConfigInteger, ConfigSubList, ConfigNothing, ConfigSubDict, ConfigOnOff, ConfigDateTime
+from config import config, ConfigSubsection, ConfigSelection, ConfigFloat, \
+       ConfigSatlist, ConfigYesNo, ConfigInteger, ConfigSubList, ConfigNothing, \
+       ConfigSubDict, ConfigOnOff, ConfigDateTime
 
 from enigma import eDVBSatelliteEquipmentControl as secClass, \
        eDVBSatelliteLNBParameters as lnbParam, \
@@ -7,12 +9,11 @@ from enigma import eDVBSatelliteEquipmentControl as secClass, \
        eDVBSatelliteRotorParameters as rotorParam, \
        eDVBResourceManager, eDVBDB
 
-#from xml.sax import make_parser
-#from xml.sax.handler import ContentHandler
-
 from time import localtime, mktime
 from datetime import datetime
 
+from sets import Set
+
 def getConfigSatlist(orbpos, satlist):
        default_orbpos = None
        for x in satlist:
@@ -29,6 +30,13 @@ def tryOpen(filename):
        return procFile
 
 class SecConfigure:
+       def getConfiguredSats(self):
+               return self.configuredSatellites
+
+       def addSatellite(self, sec, orbpos):
+               sec.addSatellite(orbpos)
+               self.configuredSatellites.add(orbpos)
+
        def addLNBSimple(self, sec, slotid, diseqcmode, toneburstmode = diseqcParam.NO, diseqcpos = diseqcParam.SENDNO, orbpos = 0, longitude = 0, latitude = 0, loDirection = 0, laDirection = 0, turningSpeed = rotorParam.FAST, useInputPower=True, inputPowerDelta=50):
                #simple defaults
                sec.addLNB()
@@ -56,8 +64,7 @@ class SecConfigure:
                #print "set orbpos to:" + str(orbpos)
 
                if 0 <= diseqcmode < 3:
-                       sec.addSatellite(orbpos)
-                       self.satList.append(orbpos)
+                       self.addSatellite(sec, orbpos)
                elif (diseqcmode == 3): # diseqc 1.2
                        if self.satposdepends.has_key(slotid):
                                tunermask |= (1 << self.satposdepends[slotid])
@@ -71,11 +78,10 @@ class SecConfigure:
 
                        for x in self.NimManager.satList:
                                print "Add sat " + str(x[0])
-                               sec.addSatellite(int(x[0]))
+                               self.addSatellite(sec, int(x[0]))
                                sec.setVoltageMode(0)
                                sec.setToneMode(0)
                                sec.setRotorPosNum(0) # USALS
-                               self.satList.append(int(x[0]))
 
                sec.setLNBSlotMask(tunermask)
 
@@ -87,14 +93,11 @@ class SecConfigure:
                print "link tuner", nim1, "to tuner", nim2
                sec.setTunerLinked(nim1, nim2)
 
-       def getSatList(self):
-               return self.satList
-
        def update(self):
                sec = secClass.getInstance()
+               self.configuredSatellites = Set()
                sec.clear() ## this do unlinking NIMs too !!
                print "sec config cleared"
-               self.satList = []
 
                self.linked = { }
                self.satposdepends = { }
@@ -324,7 +327,7 @@ class SecConfigure:
 
                                # finally add the orbital positions
                                for y in lnbSat[x]:
-                                       sec.addSatellite(y)
+                                       self.addSatellite(sec, y)
                                        currSat = config.Nims[slotid].advanced.sat[y]
 
                                        if currSat.voltage.value == "polarization":
@@ -348,6 +351,7 @@ class SecConfigure:
 
        def __init__(self, nimmgr):
                self.NimManager = nimmgr
+               self.configuredSatellites = Set()
                self.update()
 
 class NIM(object):
@@ -411,100 +415,8 @@ class NIM(object):
        empty = property(lambda self: self.type is None)
 
 class NimManager:
-#      class parseSats(ContentHandler):
-#              def __init__(self, satList, satellites, transponders):
-#                      self.isPointsElement, self.isReboundsElement = 0, 0
-#                      self.satList = satList
-#                      self.satellites = satellites
-#                      self.transponders = transponders
-#      
-#              def startElement(self, name, attrs):
-#                      if (name == "sat"):
-#                              #print "found sat " + attrs.get('name',"") + " " + str(attrs.get('position',""))
-#                              tpos = int(attrs.get('position',""))
-#                              if tpos < 0:
-#                                      tpos = 3600 + tpos
-#                              tname = attrs.get('name',"").encode("UTF-8")
-#                              tflags = int(attrs.get('flags', '0'))
-#                              self.satellites[tpos] = tname
-#                              self.satList.append( (tpos, tname, tflags) )
-#                              self.parsedSat = int(tpos)
-#                      elif (name == "transponder"):
-#                              modulation = int(attrs.get('modulation',"1")) # QPSK default
-#                              system = int(attrs.get('system',"0")) # DVB-S default
-#                              freq = int(attrs.get('frequency',""))
-#                              sr = int(attrs.get('symbol_rate',""))
-#                              pol = int(attrs.get('polarization',""))
-#                              fec = int(attrs.get('fec_inner',"0")) # AUTO default
-#                              if self.parsedSat in self.transponders:
-#                                      pass
-#                              else:
-#                                      self.transponders[self.parsedSat] = [ ]
-#
-#                              self.transponders[self.parsedSat].append((0, freq, sr, pol, fec, system, modulation))
-
-#      class parseCables(ContentHandler):
-#              def __init__(self, cablesList, transponders):
-#                      self.isPointsElement, self.isReboundsElement = 0, 0
-#                      self.cablesList = cablesList
-#                      for x in self.cablesList:
-#                              self.cablesList.remove(x)
-#                      self.transponders = transponders
-#      
-#              def startElement(self, name, attrs):
-#                      if (name == "cable"):
-#                              #print "found sat " + attrs.get('name',"") + " " + str(attrs.get('position',""))
-#                              tname = attrs.get('name',"").encode("UTF-8")
-#                              tflags = int(attrs.get('flags', '0'))
-#                              self.cablesList.append((tname, tflags))
-#                              self.parsedCab = tname
-#                      elif (name == "transponder"):
-#                              freq = int(attrs.get('frequency',""))
-#                              while freq > 999999:
-#                                      freq /= 10
-#                              sr = int(attrs.get('symbol_rate',"0"))
-#                              mod = int(attrs.get('modulation',"3")) # QAM64 default
-#                              fec = int(attrs.get('fec_inner',"0")) # AUTO default
-#                              if self.parsedCab in self.transponders:
-#                                      pass
-#                              else:
-#                                      self.transponders[self.parsedCab] = [ ]
-#                              self.transponders[self.parsedCab].append((1, freq, sr, mod, fec))
-#
-#      class parseTerrestrials(ContentHandler):
-#              def __init__(self, terrestrialsList, transponders):
-#                      self.isPointsElement, self.isReboundsElement = 0, 0
-#                      self.terrestrialsList = terrestrialsList
-#                      self.transponders = transponders
-#      
-#              def startElement(self, name, attrs):
-#                      if (name == "terrestrial"):
-#                              #print "found sat " + attrs.get('name',"") + " " + str(attrs.get('position',""))
-#                              tname = attrs.get('name',"").encode("UTF-8")
-#                              tflags = int(attrs.get('flags', '0'))
-#                              self.terrestrialsList.append((tname, tflags))
-#                              self.parsedTer = str(tname)
-#                      elif (name == "transponder"):
-#                              # TODO finish this!
-#                              freq = int(attrs.get('centre_frequency',""))
-#                              bw = int(attrs.get('bandwidth',"3")) # AUTO
-#                              const = int(attrs.get('constellation',"1")) # AUTO
-#                              crh = int(attrs.get('code_rate_hp',"5")) # AUTO
-#                              if crh > 5: # our terrestrial.xml is buggy... 6 for AUTO
-#                                      crh = 5
-#                              crl = int(attrs.get('code_rate_lp',"5")) # AUTO
-#                              if crl > 5: # our terrestrial.xml is buggy... 6 for AUTO
-#                                      crl = 5
-#                              guard = int(attrs.get('guard_interval',"4")) # AUTO
-#                              transm = int(attrs.get('transmission_mode',"2")) # AUTO
-#                              hierarchy = int(attrs.get('hierarchy_information',"4")) # AUTO
-#                              inv = int(attrs.get('inversion',"2")) # AUTO
-#                              if self.parsedTer in self.transponders:
-#                                      pass
-#                              else:
-#                                      self.transponders[self.parsedTer] = [ ]
-#
-#                              self.transponders[self.parsedTer].append((2, freq, bw, const, crh, crl, guard, transm, hierarchy, inv))
+       def getConfiguredSats(self):
+               return self.sec.getConfiguredSats()
 
        def getTransponders(self, pos):
                if self.transponders.has_key(pos):
@@ -533,9 +445,6 @@ class NimManager:
        def getTerrestrialFlags(self, nim):
                return self.terrestrialsList[config.Nims[nim].terrestrial.index][1]
 
-       def getConfiguredSats(self):
-               return self.sec.getSatList()
-
        def getSatDescription(self, pos):
                return self.satellites[pos]
 
@@ -547,13 +456,8 @@ class NimManager:
                self.transponderscable = { }
                self.transpondersterrestrial = { }
                db = eDVBDB.getInstance()
-
-#              parser = make_parser()
                if self.hasNimType("DVB-S"):
                        print "Reading satellites.xml"
-#                      satHandler = self.parseSats(self.satList, self.satellites, self.transponders)
-#                      parser.setContentHandler(satHandler)
-#                      parser.parse('/etc/tuxbox/satellites.xml')
                        db.readSatellites(self.satList, self.satellites, self.transponders)
 #                      print "SATLIST", self.satList
 #                      print "SATS", self.satellites
@@ -561,18 +465,12 @@ class NimManager:
 
                if self.hasNimType("DVB-C"):
                        print "Reading cables.xml"
-#                      cabHandler = self.parseCables(self.cablesList, self.transponderscable)
-#                      parser.setContentHandler(cabHandler)
-#                      parser.parse('/etc/tuxbox/cables.xml')
                        db.readCables(self.cablesList, self.transponderscable)
 #                      print "CABLIST", self.cablesList
 #                      print "TRANSPONDERS", self.transponders
 
                if self.hasNimType("DVB-T"):
                        print "Reading terrestrial.xml"
-#                      terHandler = self.parseTerrestrials(self.terrestrialsList, self.transpondersterrestrial)
-#                      parser.setContentHandler(terHandler)
-#                      parser.parse('/etc/tuxbox/terrestrial.xml')
                        db.readTerrestrials(self.terrestrialsList, self.transpondersterrestrial)
 #                      print "TERLIST", self.terrestrialsList
 #                      print "TRANSPONDERS", self.transpondersterrestrial
@@ -597,6 +495,9 @@ class NimManager:
                #
                # Type will be either "DVB-S", "DVB-S2", "DVB-T", "DVB-C" or None.
 
+               # nim_slots is an array which has exactly one entry for each slot, even for empty ones.
+               self.nim_slots = [ ]
+
                nimfile = tryOpen("/proc/bus/nim_sockets")
 
                if nimfile is None:
@@ -621,9 +522,6 @@ class NimManager:
                                entries[current_slot]["name"] = _("N/A")
                nimfile.close()
                
-               # nim_slots is an array which has exactly one entry for each slot, even for empty ones.
-               self.nim_slots = [ ]
-
                for id, entry in entries.items():
                        if not (entry.has_key("name") and entry.has_key("type")):
                                entry["name"] =  _("N/A")
@@ -950,8 +848,8 @@ def InitNimManager(nimmgr):
                        possible_scan_types = [("bands", _("Frequency bands")), ("steps", _("Frequency steps"))]
                        if n:
                                possible_scan_types.append(("provider", _("Provider")))
+                               nim.cable.scan_provider = ConfigSelection(default = "0", choices = list)
                        nim.cable.scan_type = ConfigSelection(default = "bands", choices = possible_scan_types)
-                       nim.cable.scan_provider = ConfigSelection(default = "0", choices = list)
                        nim.cable.scan_band_EU_VHF_I = ConfigYesNo(default = True)
                        nim.cable.scan_band_EU_MID = ConfigYesNo(default = True)
                        nim.cable.scan_band_EU_VHF_III = ConfigYesNo(default = True)