1 import os, xml.dom.minidom, re
2 from enigma import iServiceInformation
6 RE_XML_ILLEGAL = u'([\u0000-\u0008\u000b-\u000c\u000e-\u001f\ufffe-\uffff])' + \
8 u'([%s-%s][^%s-%s])|([^%s-%s][%s-%s])|([%s-%s]$)|(^[%s-%s])' % \
9 (unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff),
10 unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff),
11 unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff))
13 DUMPBIN = vbcfg.PLUGINROOT + "/dumpait"
14 class eAITSectionReader:
15 def __init__(self, demux, pmtid, sid):
16 self.mVuplusBox = False
20 self.mCommand = "%s --demux=%s --pmtid=%x --serviceid=%x"%(DUMPBIN, demux, pmtid, sid)
22 def __text(self, nodelist):
25 if node.nodeType == node.TEXT_NODE:
29 def __item(self, application, name):
30 for item in application.getElementsByTagName(name):
31 return self.__text(item.childNodes)
34 def __application(self, application):
38 item["name"] = str(application[1])
39 item["url"] = str(application[2])
40 item["control"] = int(application[0])
41 item["orgid"] = int(application[3])
42 item["appid"] = int(application[4])
43 item["profile"] = int(application[5])
45 item["name"] = str(self.__item(application, "name"))
46 item["url"] = str(self.__item(application, "url"))
47 item["control"] = int(self.__item(application, "control"))
48 item["orgid"] = int(self.__item(application, "orgid"))
49 item["appid"] = int(self.__item(application, "appid"))
50 item["profile"] = int(self.__item(application, "profile"))
53 def doParseApplications(self):
57 for application in self.mInfo.getInfoObject(iServiceInformation.sHBBTVUrl):
58 item = self.__application(application)
61 for application in self.mDocument.getElementsByTagName("application"):
62 item = self.__application(application)
66 def getApplicationList(self):
69 def doOpen(self, info, is_vuplusbox):
71 self.mVuplusBox = is_vuplusbox
76 try: document = os.popen(self.mCommand).read()
77 except Exception, ErrMsg:
80 if len(document) == 0:
82 document = re.sub(RE_XML_ILLEGAL, "?", document)
83 document = re.sub("&", "+", document)
84 document = document.decode("cp1252").encode("utf-8")
85 document = "<URL>" + document + "</URL>"
87 self.mDocument = xml.dom.minidom.parseString(document)
88 except Exception, ErrMsg:
89 vbcfg.ERR("XML parse: %s" % ErrMsg)
94 for x in self.getApplicationList():
95 print "Name :", x["name"]
96 print "URL :", x["url"]
97 print "OrgID :", x["orgid"]
98 print "AppID :", x["appid"]
99 print "Control Code :", x["control"]
100 print "Profile Code :", x["profile"]
103 def unit_test(demux, pmtid, sid):
104 reader = eAITSectionReader(demux, pmtid, sid)
106 reader.doParseApplications()
109 vbcfg.ERR("no data!!")
111 #unit_test('0', 0x17d4, 0x2b66)