def load_data(self, kodi_version="krypton"):
"""
loads the xml with control nodes for sanity checking (controls.xml)
as well as builtins including their help string (data.xml)
"""
# TODO: clean this up
try:
# since we get packaged we need to use load_resource() to load external files
import sublime
controls = sublime.load_resource("Packages/KodiDevKit/data/%s/controls.xml" % kodi_version)
self.template_root = ET.fromstring(controls.encode("utf-8"), PARSER)
# resolve includes
data = sublime.load_resource("Packages/KodiDevKit/data/%s/data.xml" % kodi_version)
root = ET.fromstring(data.encode("utf-8"), PARSER)
WINDOW_MAP = json.loads(sublime.load_resource("Packages/KodiDevKit/data/%s/windows.json" % kodi_version))
except (ImportError, OSError):
# fallback to old method so that class still can get used without sublime import
path = os.path.normpath(os.path.abspath(__file__))
folder = os.path.split(path)[0]
self.template_root = utils.get_root_from_file(os.path.join(folder, "..", "data", kodi_version, "controls.xml"))
root = utils.get_root_from_file(os.path.join(folder, "..", "data", kodi_version, "data.xml"))
with open(os.path.join(folder, "..", "data", kodi_version, "windows.json")) as f:
WINDOW_MAP = json.load(f)
self.WINDOW_FILENAMES = [item[2] for item in WINDOW_MAP]
self.WINDOW_NAMES = [item[0] for item in WINDOW_MAP]
self.WINDOW_IDS = [str(item[1]) for item in WINDOW_MAP]
self.builtins = [[i.find("code").text, i.find("help").text] for i in root.find("builtins")]
self.conditions = [[i.find("code").text, i.find("help").text] for i in root.find("conditions")]
for include in self.template_root.xpath("//include[@name]"):
for node in self.template_root.xpath("//include[not(@*)]"):
if node.text == include.attrib.get("name"):
for child in include.getchildren():
child = copy.deepcopy(child)
node.getparent().append(child)
node.getparent().remove(node)
self.template_root.remove(include)
self.template_attribs = {}
self.template_values = {}
for template in self.template_root:
self.template_attribs[template.attrib.get("type")] = {i.tag: i.attrib for i in template.iterchildren()}
self.template_values[template.attrib.get("type")] = {i.tag: i.text for i in template.iterchildren()}
评论列表
文章目录