parse satellites/cables/terrestrial.xml in c++ now.. its round about three
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 24 Oct 2007 20:54:16 +0000 (20:54 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 24 Oct 2007 20:54:16 +0000 (20:54 +0000)
times faster .. this speedup e2 start a little bit

12 files changed:
configure.ac
lib/Makefile.am
lib/dvb/db.cpp
lib/dvb/db.h
lib/python/Components/NimManager.py
lib/python/Components/config.py
lib/xml/Makefile.am [new file with mode: 0644]
lib/xml/libxmlexport.cc [new file with mode: 0644]
lib/xml/libxmlexport.h [new file with mode: 0644]
lib/xml/xmlccwrap.cc [new file with mode: 0644]
lib/xml/xmlccwrap.h [new file with mode: 0644]
main/Makefile.am

index fb9860c..0df9eb1 100644 (file)
@@ -97,6 +97,7 @@ lib/python/Plugins/Extensions/GraphMultiEPG/Makefile
 lib/python/Tools/Makefile
 lib/service/Makefile
 lib/components/Makefile
 lib/python/Tools/Makefile
 lib/service/Makefile
 lib/components/Makefile
+lib/xml/Makefile
 po/Makefile
 main/Makefile
 tools/Makefile
 po/Makefile
 main/Makefile
 tools/Makefile
index de051ec..ea15f4d 100644 (file)
@@ -1 +1 @@
-SUBDIRS = actions base components dvb dvb_ci gdi service driver nav gui python
+SUBDIRS = actions base components dvb dvb_ci gdi service driver nav gui python xml
index f3d4482..25d6cb6 100644 (file)
@@ -5,6 +5,7 @@
 #include <lib/dvb/epgcache.h>
 #include <lib/base/eerror.h>
 #include <lib/base/estring.h>
 #include <lib/dvb/epgcache.h>
 #include <lib/base/eerror.h>
 #include <lib/base/estring.h>
+#include <lib/xml/xmlccwrap.h>
 #include <dvbsi++/service_description_section.h>
 #include <dvbsi++/descriptor_tag.h>
 #include <dvbsi++/service_descriptor.h>
 #include <dvbsi++/service_description_section.h>
 #include <dvbsi++/descriptor_tag.h>
 #include <dvbsi++/service_descriptor.h>
@@ -719,12 +720,398 @@ void eDVBDB::reloadBouquets()
 
 eDVBDB *eDVBDB::instance;
 
 
 eDVBDB *eDVBDB::instance;
 
+using namespace xmlcc;
+
 eDVBDB::eDVBDB()
 {
        instance = this;
        reloadServicelist();
 }
 
 eDVBDB::eDVBDB()
 {
        instance = this;
        reloadServicelist();
 }
 
+PyObject *eDVBDB::readSatellites(ePyObject sat_list, ePyObject sat_dict, ePyObject tp_dict)
+{
+       if (!PyDict_Check(tp_dict)) {
+               PyErr_SetString(PyExc_StandardError,
+                       "type error");
+                       eDebug("arg 2 is not a python dict");
+               return NULL;
+       }
+       else if (!PyDict_Check(sat_dict))
+       {
+               PyErr_SetString(PyExc_StandardError,
+                       "type error");
+                       eDebug("arg 1 is not a python dict");
+               return NULL;
+       }
+       else if (!PyList_Check(sat_list))
+       {
+               PyErr_SetString(PyExc_StandardError,
+                       "type error");
+                       eDebug("arg 0 is not a python list");
+               return NULL;
+       }
+       XMLTree tree;
+       tree.setFilename("/etc/tuxbox/satellites.xml");
+       tree.read();
+       Element *root = tree.getRoot();
+       if (!root)
+       {
+               eDebug("couldn't open /etc/tuxbox/satellites.xml!!");
+               Py_INCREF(Py_False);
+               return Py_False;
+       }
+       int tmp, *dest,
+               modulation, system, freq, sr, pol, fec;
+       char *end_ptr;
+       const Attribute *at;
+       std::string name;
+       const ElementList &root_elements = root->getElementList();
+       for (ElementConstIterator it(root_elements.begin()); it != root_elements.end(); ++it)
+       {
+//             eDebug("element: %s", (*it)->name().c_str());
+               const Element *el = *it;
+               const ElementList &sat_elements = el->getElementList();
+               const AttributeList &sat_attributes = el->getAttributeList();
+               ePyObject sat_name;
+               ePyObject sat_pos;
+               ePyObject sat_flags;
+               for (AttributeConstIterator it(sat_attributes.begin()); it != sat_attributes.end(); ++it)
+               {
+//                     eDebug("\tattr: %s", at->name().c_str());
+                       at = *it;
+                       name = at->name();
+                       if (name == "name")
+                               sat_name = PyString_FromString(at->value().c_str());
+                       else if (name == "flags")
+                       {
+                               tmp = strtol(at->value().c_str(), &end_ptr, 10);
+                               if (!*end_ptr)
+                                       sat_flags = PyInt_FromLong(tmp);
+                       }
+                       else if (name == "position")
+                       {
+                               tmp = strtol(at->value().c_str(), &end_ptr, 10);
+                               if (!*end_ptr)
+                               {
+                                       if (tmp < 0)
+                                               tmp = 3600 + tmp;
+                                       sat_pos = PyInt_FromLong(tmp);
+                               }
+                       }
+               }
+               if (sat_pos && sat_name)
+               {
+                       ePyObject tplist = PyList_New(0);
+                       ePyObject tuple = PyTuple_New(3);
+                       if (!sat_flags)
+                               sat_flags = PyInt_FromLong(0);
+                       PyTuple_SET_ITEM(tuple, 0, sat_pos);
+                       PyTuple_SET_ITEM(tuple, 1, sat_name);
+                       PyTuple_SET_ITEM(tuple, 2, sat_flags);
+                       PyList_Append(sat_list, tuple);
+                       Py_DECREF(tuple);
+                       PyDict_SetItem(sat_dict, sat_pos, sat_name);
+                       PyDict_SetItem(tp_dict, sat_pos, tplist);
+                       for (ElementConstIterator it(sat_elements.begin()); it != sat_elements.end(); ++it)
+                       {
+//                             eDebug("\telement: %s", (*it)->name().c_str());
+                               const AttributeList &tp_attributes = (*it)->getAttributeList();
+                               AttributeConstIterator end = tp_attributes.end();
+                               modulation = 1; // QPSK default
+                               system = 0; // DVB-S default
+                               freq = 0;
+                               sr = 0;
+                               pol = -1;
+                               fec = 0; // AUTO default
+                               for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it)
+                               {
+//                                     eDebug("\t\tattr: %s", at->name().c_str());
+                                       at = *it;
+                                       name = at->name();
+                                       if (name == "modulation") dest = &modulation;
+                                       else if (name == "system") dest = &system;
+                                       else if (name == "frequency") dest = &freq;
+                                       else if (name == "symbol_rate") dest = &sr;
+                                       else if (name == "polarization") dest = &pol;
+                                       else if (name == "fec_inner") dest = &fec;
+                                       if (dest)
+                                       {
+                                               tmp = strtol(at->value().c_str(), &end_ptr, 10);
+                                               if (!*end_ptr)
+                                                       *dest = tmp;
+                                       }
+                               }
+                               if (freq && sr && pol != -1)
+                               {
+                                       tuple = PyTuple_New(7);
+                                       PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(0));
+                                       PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(freq));
+                                       PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(sr));
+                                       PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong(pol));
+                                       PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong(fec));
+                                       PyTuple_SET_ITEM(tuple, 5, PyInt_FromLong(system));
+                                       PyTuple_SET_ITEM(tuple, 6, PyInt_FromLong(modulation));
+                                       PyList_Append(tplist, tuple);
+                                       Py_DECREF(tuple);
+                               }
+                       }
+                       Py_DECREF(tplist);
+               }
+               else
+               {
+                       if (sat_pos)
+                               Py_DECREF(sat_pos);
+                       if (sat_name)
+                               Py_DECREF(sat_name);
+               }
+       }
+       Py_INCREF(Py_True);
+       return Py_True;
+}
+
+PyObject *eDVBDB::readCables(ePyObject cab_list, ePyObject tp_dict)
+{
+       if (!PyDict_Check(tp_dict)) {
+               PyErr_SetString(PyExc_StandardError,
+                       "type error");
+                       eDebug("arg 1 is not a python dict");
+               return NULL;
+       }
+       else if (!PyList_Check(cab_list))
+       {
+               PyErr_SetString(PyExc_StandardError,
+                       "type error");
+                       eDebug("arg 0 is not a python list");
+               return NULL;
+       }
+       XMLTree tree;
+       tree.setFilename("/etc/tuxbox/cables.xml");
+       tree.read();
+       Element *root = tree.getRoot();
+       if (!root)
+       {
+               eDebug("couldn't open /etc/tuxbox/cables.xml!!");
+               Py_INCREF(Py_False);
+               return Py_False;
+       }
+       const Attribute *at;
+       int tmp, *dest,
+               modulation, fec, freq, sr;
+       std::string name;
+       char *end_ptr;
+       const ElementList &root_elements = root->getElementList();
+       for (ElementConstIterator it(root_elements.begin()); it != root_elements.end(); ++it)
+       {
+//             eDebug("element: %s", el->name().c_str());
+               const Element *el = *it;
+               const ElementList &cab_elements = el->getElementList();
+               const AttributeList &cab_attributes = el->getAttributeList();
+               ePyObject cab_name;
+               ePyObject cab_flags;
+               for (AttributeConstIterator it(cab_attributes.begin()); it != cab_attributes.end(); ++it)
+               {
+//                     eDebug("\tattr: %s", at->name().c_str());
+                       at = *it;
+                       name = at->name();
+                       if (name == "name")
+                               cab_name = PyString_FromString(at->value().c_str());
+                       else if (name == "flags")
+                       {
+                               tmp = strtol(at->value().c_str(), &end_ptr, 10);
+                               if (!*end_ptr)
+                                       cab_flags = PyInt_FromLong(tmp);
+                       }
+               }
+               if (cab_name)
+               {
+                       ePyObject tplist = PyList_New(0);
+                       ePyObject tuple = PyTuple_New(2);
+                       if (!cab_flags)
+                               cab_flags = PyInt_FromLong(0);
+                       PyTuple_SET_ITEM(tuple, 0, cab_name);
+                       PyTuple_SET_ITEM(tuple, 1, cab_flags);
+                       PyList_Append(cab_list, tuple);
+                       Py_DECREF(tuple);
+                       PyDict_SetItem(tp_dict, cab_name, tplist);
+                       for (ElementConstIterator it(cab_elements.begin()); it != cab_elements.end(); ++it)
+                       {
+//                             eDebug("\telement: %s", (*it)->name().c_str());
+                               const AttributeList &tp_attributes = (*it)->getAttributeList();
+                               AttributeConstIterator end = tp_attributes.end();
+                               modulation = 3; // QAM64 default
+                               fec = 0; // AUTO default
+                               freq = 0;
+                               sr = 0;
+                               for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it)
+                               {
+//                                     eDebug("\t\tattr: %s", at->name().c_str());
+                                       at = *it;
+                                       dest = 0;
+                                       name = at->name();
+                                       if (name == "modulation") dest = &modulation;
+                                       else if (name == "frequency") dest = &freq;
+                                       else if (name == "symbol_rate") dest = &sr;
+                                       else if (name == "fec_inner") dest = &fec;
+                                       if (dest)
+                                       {
+                                               tmp = strtol(at->value().c_str(), &end_ptr, 10);
+                                               if (!*end_ptr)
+                                                       *dest = tmp;
+                                       }
+                               }
+                               if (freq && sr)
+                               {
+                                       while (freq > 999999)
+                                               freq /= 10;
+                                       tuple = PyTuple_New(5);
+                                       PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(1));
+                                       PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(freq));
+                                       PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(sr));
+                                       PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong(modulation));
+                                       PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong(fec));
+                                       PyList_Append(tplist, tuple);
+                                       Py_DECREF(tuple);
+                               }
+                       }
+                       Py_DECREF(tplist);
+               }
+               else if (cab_flags)
+                       Py_DECREF(cab_flags);
+       }
+       Py_INCREF(Py_True);
+       return Py_True;
+}
+
+PyObject *eDVBDB::readTerrestrials(ePyObject ter_list, ePyObject tp_dict)
+{
+       if (!PyDict_Check(tp_dict)) {
+               PyErr_SetString(PyExc_StandardError,
+                       "type error");
+                       eDebug("arg 1 is not a python dict");
+               return NULL;
+       }
+       else if (!PyList_Check(ter_list))
+       {
+               PyErr_SetString(PyExc_StandardError,
+                       "type error");
+                       eDebug("arg 0 is not a python list");
+               return NULL;
+       }
+       XMLTree tree;
+       tree.setFilename("/etc/tuxbox/terrestrial.xml");
+       tree.read();
+       Element *root = tree.getRoot();
+       if (!root)
+       {
+               eDebug("couldn't open /etc/tuxbox/terrestrial.xml!!");
+               Py_INCREF(Py_False);
+               return Py_False;
+       }
+       const Attribute *at;
+       std::string name;
+       int tmp, *dest,
+               freq, bw, constellation, crh = 5, crl = 5, guard = 4, transm, hierarchy, inv = 2;
+       char *end_ptr;
+       const ElementList &root_elements = root->getElementList();
+       for (ElementConstIterator it(root_elements.begin()); it != root_elements.end(); ++it)
+       {
+//             eDebug("element: %s", el->name().c_str());
+               const Element *el = *it;
+               const ElementList &ter_elements = el->getElementList();
+               const AttributeList &ter_attributes = el->getAttributeList();
+               ePyObject ter_name;
+               ePyObject ter_flags;
+               for (AttributeConstIterator it(ter_attributes.begin()); it != ter_attributes.end(); ++it)
+               {
+//                     eDebug("\tattr: %s", at->name().c_str());
+                       at = *it;
+                       name = at->name();
+                       if (name == "name")
+                               ter_name = PyString_FromString(at->value().c_str());
+                       else if (name == "flags")
+                       {
+                               tmp = strtol(at->value().c_str(), &end_ptr, 10);
+                               if (!*end_ptr)
+                                       ter_flags = PyInt_FromLong(tmp);
+                       }
+               }
+               if (ter_name)
+               {
+                       ePyObject tplist = PyList_New(0);
+                       ePyObject tuple = PyTuple_New(2);
+                       if (!ter_flags)
+                               ter_flags = PyInt_FromLong(0);
+                       PyTuple_SET_ITEM(tuple, 0, ter_name);
+                       PyTuple_SET_ITEM(tuple, 1, ter_flags);
+                       PyList_Append(ter_list, tuple);
+                       Py_DECREF(tuple);
+                       PyDict_SetItem(tp_dict, ter_name, tplist);
+                       for (ElementConstIterator it(ter_elements.begin()); it != ter_elements.end(); ++it)
+                       {
+//                             eDebug("\telement: %s", (*it)->name().c_str());
+                               const AttributeList &tp_attributes = (*it)->getAttributeList();
+                               AttributeConstIterator end = tp_attributes.end();
+                               freq = 0;
+                               bw = 3; // AUTO
+                               constellation = 1; // AUTO
+                               crh = 5; // AUTO
+                               crl = 5; // AUTO
+                               guard = 4; // AUTO
+                               transm = 2; // AUTO
+                               hierarchy = 4; // AUTO
+                               inv = 2; // AUTO
+                               for (AttributeConstIterator it(tp_attributes.begin()); it != end; ++it)
+                               {
+//                                     eDebug("\t\tattr: %s", at->name().c_str());
+                                       at = *it;
+                                       dest = 0;
+                                       name = at->name();
+                                       if (name == "centre_frequency") dest = &freq;
+                                       else if (name == "bandwidth") dest = &bw;
+                                       else if (name == "constellation") dest = &constellation;
+                                       else if (name == "code_rate_hp") dest = &crh;
+                                       else if (name == "code_rate_lp") dest = &crl;
+                                       else if (name == "guard_interval") dest = &guard;
+                                       else if (name == "transmission_mode") dest = &transm;
+                                       else if (name == "hierarchy_information") dest = &hierarchy;
+                                       else if (name == "inversion") dest = &inv;
+                                       if (dest)
+                                       {
+                                               tmp = strtol(at->value().c_str(), &end_ptr, 10);
+                                               if (!*end_ptr)
+                                                       *dest = tmp;
+                                       }
+                               }
+                               if (freq)
+                               {
+                                       if (crh > 5) // our terrestrial.xml is buggy... 6 for AUTO
+                                               crh = 5;
+                                       if (crl > 5) // our terrestrial.xml is buggy... 6 for AUTO
+                                               crl = 5;
+                                       tuple = PyTuple_New(10);
+                                       PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong(2));
+                                       PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong(freq));
+                                       PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong(bw));
+                                       PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong(constellation));
+                                       PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong(crh));
+                                       PyTuple_SET_ITEM(tuple, 5, PyInt_FromLong(crl));
+                                       PyTuple_SET_ITEM(tuple, 6, PyInt_FromLong(guard));
+                                       PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong(transm));
+                                       PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong(hierarchy));
+                                       PyTuple_SET_ITEM(tuple, 9, PyInt_FromLong(inv));
+                                       PyList_Append(tplist, tuple);
+                                       Py_DECREF(tuple);
+                               }
+                       }
+                       Py_DECREF(tplist);
+               }
+               else if (ter_flags)
+                       Py_DECREF(ter_flags);
+       }
+       Py_INCREF(Py_True);
+       return Py_True;
+}
+
 eDVBDB::~eDVBDB()
 {
        instance=NULL;
 eDVBDB::~eDVBDB()
 {
        instance=NULL;
index 34ecfc1..44393af 100644 (file)
@@ -38,6 +38,9 @@ public:
        RESULT removeService(const eServiceReference &service);
        RESULT addFlag(const eServiceReference &service, unsigned int flagmask);
        RESULT removeFlag(const eServiceReference &service, unsigned int flagmask);
        RESULT removeService(const eServiceReference &service);
        RESULT addFlag(const eServiceReference &service, unsigned int flagmask);
        RESULT removeFlag(const eServiceReference &service, unsigned int flagmask);
+       PyObject *readSatellites(SWIG_PYOBJECT(ePyObject) sat_list, SWIG_PYOBJECT(ePyObject) sat_dict, SWIG_PYOBJECT(ePyObject) tp_dict);
+       PyObject *readTerrestrials(SWIG_PYOBJECT(ePyObject) ter_list, SWIG_PYOBJECT(ePyObject) tp_dict);
+       PyObject *readCables(SWIG_PYOBJECT(ePyObject) cab_list, SWIG_PYOBJECT(ePyObject) tp_dict);
 #ifndef SWIG
        RESULT removeFlags(unsigned int flagmask, eDVBChannelID chid, unsigned int orb_pos);
        RESULT removeServices(eDVBChannelID chid, unsigned int orb_pos);
 #ifndef SWIG
        RESULT removeFlags(unsigned int flagmask, eDVBChannelID chid, unsigned int orb_pos);
        RESULT removeServices(eDVBChannelID chid, unsigned int orb_pos);
index 30e633a..5920166 100644 (file)
@@ -5,10 +5,10 @@ from enigma import eDVBSatelliteEquipmentControl as secClass, \
        eDVBSatelliteDiseqcParameters as diseqcParam, \
        eDVBSatelliteSwitchParameters as switchParam, \
        eDVBSatelliteRotorParameters as rotorParam, \
        eDVBSatelliteDiseqcParameters as diseqcParam, \
        eDVBSatelliteSwitchParameters as switchParam, \
        eDVBSatelliteRotorParameters as rotorParam, \
-       eDVBResourceManager
+       eDVBResourceManager, eDVBDB
 
 
-from xml.sax import make_parser
-from xml.sax.handler import ContentHandler
+#from xml.sax import make_parser
+#from xml.sax.handler import ContentHandler
 
 from time import localtime, mktime
 from datetime import datetime
 
 from time import localtime, mktime
 from datetime import datetime
@@ -411,99 +411,100 @@ class NIM(object):
        empty = property(lambda self: self.type is None)
 
 class NimManager:
        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")
-                               self.satellites[tpos] = tname
-                               self.satList.append( (tpos, tname) )
-                               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 = attrs.get('flags',"")
-                               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))
+#      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 getTransponders(self, pos):
                if self.transponders.has_key(pos):
 
        def getTransponders(self, pos):
                if self.transponders.has_key(pos):
@@ -538,33 +539,43 @@ class NimManager:
        def getSatDescription(self, pos):
                return self.satellites[pos]
 
        def getSatDescription(self, pos):
                return self.satellites[pos]
 
-       def readSatsfromFile(self):
+       def readTransponders(self):
                # read initial networks from file. we only read files which we are interested in,
                # which means only these where a compatible tuner exists.
                self.satellites = { }
                self.transponders = { }
                self.transponderscable = { }
                # read initial networks from file. we only read files which we are interested in,
                # which means only these where a compatible tuner exists.
                self.satellites = { }
                self.transponders = { }
                self.transponderscable = { }
-               self.transpondersterrestrial = { }              
+               self.transpondersterrestrial = { }
+               db = eDVBDB.getInstance()
 
 
-               parser = make_parser()
-               
+#              parser = make_parser()
                if self.hasNimType("DVB-S"):
                        print "Reading satellites.xml"
                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')
+#                      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
+#                      print "TRANSPONDERS", self.transponders
 
                if self.hasNimType("DVB-C"):
                        print "Reading cables.xml"
 
                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')
+#                      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"
 
                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')
+#                      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
 
        def enumerateNIMs(self):
                # enum available NIMs. This is currently very dreambox-centric and uses the /proc/bus/nim_sockets interface.
 
        def enumerateNIMs(self):
                # enum available NIMs. This is currently very dreambox-centric and uses the /proc/bus/nim_sockets interface.
@@ -638,8 +649,7 @@ class NimManager:
                self.cablesList = []
                self.terrestrialsList = []
                self.enumerateNIMs()
                self.cablesList = []
                self.terrestrialsList = []
                self.enumerateNIMs()
-               self.readSatsfromFile()
-
+               self.readTransponders()
                InitNimManager(self)    #init config stuff
 
        # get a list with the friendly full description
                InitNimManager(self)    #init config stuff
 
        # get a list with the friendly full description
index 7df6e76..a872c30 100644 (file)
@@ -626,7 +626,7 @@ class ConfigSatlist(ConfigSelection):
        def __init__(self, list, default = None):
                if default is not None:
                        default = str(default)
        def __init__(self, list, default = None):
                if default is not None:
                        default = str(default)
-               ConfigSelection.__init__(self, choices = [(str(orbpos), desc) for (orbpos, desc) in list], default = default)
+               ConfigSelection.__init__(self, choices = [(str(orbpos), desc) for (orbpos, desc, flags) in list], default = default)
 
        def getOrbitalPosition(self):
                if self.value == "":
 
        def getOrbitalPosition(self):
                if self.value == "":
diff --git a/lib/xml/Makefile.am b/lib/xml/Makefile.am
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib/xml/libxmlexport.cc b/lib/xml/libxmlexport.cc
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib/xml/libxmlexport.h b/lib/xml/libxmlexport.h
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib/xml/xmlccwrap.cc b/lib/xml/xmlccwrap.cc
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/lib/xml/xmlccwrap.h b/lib/xml/xmlccwrap.h
new file mode 100644 (file)
index 0000000..e69de29
index de68c14..04f024e 100644 (file)
@@ -31,7 +31,8 @@ enigma2_LDADD_WHOLE = \
        $(top_builddir)/lib/gui/libenigma_gui.a \
        $(top_builddir)/lib/python/libenigma_python.a \
        $(top_builddir)/lib/nav/libenigma_nav.a \
        $(top_builddir)/lib/gui/libenigma_gui.a \
        $(top_builddir)/lib/python/libenigma_python.a \
        $(top_builddir)/lib/nav/libenigma_nav.a \
-       $(top_builddir)/lib/service/libenigma_service.a
+       $(top_builddir)/lib/service/libenigma_service.a \
+       $(top_builddir)/lib/xml/libenigma_xml.a
 
 enigma2_LDADD = \
        @FREETYPE_LIBS@ \
 
 enigma2_LDADD = \
        @FREETYPE_LIBS@ \
@@ -44,7 +45,7 @@ enigma2_LDADD = \
        @GSTREAMER_LIBS@ \
        @JPEG_LIBS@ \
        @LIBUNGIF_LIBS@ \
        @GSTREAMER_LIBS@ \
        @JPEG_LIBS@ \
        @LIBUNGIF_LIBS@ \
-       -ldl -lpthread -lcrypt -lresolv
+       -ldl -lpthread -lcrypt -lresolv -lxml2
 
 enigma2$(EXEEXT): $(enigma2_OBJECTS) $(enigma2_DEPENDENCIES) $(enigma2_LDADD_WHOLE)
 #      @rm -f enigma2$(EXEEXT)
 
 enigma2$(EXEEXT): $(enigma2_OBJECTS) $(enigma2_DEPENDENCIES) $(enigma2_LDADD_WHOLE)
 #      @rm -f enigma2$(EXEEXT)