Rework xml unicode handling

This commit is contained in:
Matt 2020-03-06 23:38:43 -05:00
commit bb0a539074
4 changed files with 57 additions and 68 deletions

View file

@ -6,13 +6,13 @@ from __future__ import division, absolute_import, print_function, unicode_litera
import logging
import os
import shutil
import xml.etree.ElementTree as etree
from lxml import etree
from six.moves.urllib.parse import urlencode
from kodi_six import xbmc, xbmcvfs
from database import Database, jellyfin_db, get_sync, save_sync
from helper import translate, api, indent, write_xml, window, event
from helper import translate, api, window, event
from jellyfin import Jellyfin
#################################################################################################
@ -126,8 +126,8 @@ def verify_kodi_defaults():
xml = etree.parse(file).getroot()
xml.set('order', str(17 + index))
indent(xml)
write_xml(etree.tostring(xml, 'UTF-8'), file)
tree = etree.ElementTree(xml)
tree.write(file, pretty_print=True)
playlist_path = xbmc.translatePath("special://profile/playlists/video")
@ -272,7 +272,12 @@ class Views(object):
file = os.path.join(path, "jellyfin%s%s.xsp" % (view['Media'], view['Id']))
try:
xml = etree.parse(file).getroot()
if os.path.isfile(file):
xml = etree.parse(file).getroot()
else:
xml = etree.Element('smartplaylist', {'type': view['Media']})
etree.SubElement(xml, 'name')
etree.SubElement(xml, 'match')
except Exception:
LOG.warning("Unable to parse file '%s'", file)
xml = etree.Element('smartplaylist', {'type': view['Media']})
@ -292,8 +297,8 @@ class Views(object):
rule = etree.SubElement(xml, 'rule', {'field': "tag", 'operator': "is"})
etree.SubElement(rule, 'value').text = view['Tag']
indent(xml)
write_xml(etree.tostring(xml, 'UTF-8'), file)
tree = etree.ElementTree(xml)
tree.write(file, pretty_print=True)
def add_nodes(self, path, view, mixed=False):
@ -316,7 +321,13 @@ class Views(object):
file = os.path.join(path, "jellyfin_%s.xml" % view['Tag'].replace(" ", ""))
try:
xml = etree.parse(file).getroot()
if os.path.isfile(file):
xml = etree.parse(file).getroot()
else:
xml = self.node_root('folder' if item_type == 'favorites' and view['Media'] == 'episodes' else 'filter', index)
etree.SubElement(xml, 'label')
etree.SubElement(xml, 'match')
etree.SubElement(xml, 'content')
except Exception:
LOG.warning("Unable to parse file '%s'", file)
xml = self.node_root('folder' if item_type == 'favorites' and view['Media'] == 'episodes' else 'filter', index)
@ -348,8 +359,8 @@ class Views(object):
else:
self.node_all(xml)
indent(xml)
write_xml(etree.tostring(xml, 'UTF-8'), file)
tree = etree.ElementTree(xml)
tree.write(file, pretty_print=True)
def node_root(self, root, index):
@ -372,8 +383,14 @@ class Views(object):
index = self.sync['SortedViews'].index(view['Id'])
try:
xml = etree.parse(file).getroot()
xml.set('order', str(index))
if os.path.isfile(file):
xml = etree.parse(file).getroot()
xml.set('order', str(index))
else:
xml = self.node_root('filter', index)
etree.SubElement(xml, 'label')
etree.SubElement(xml, 'match')
etree.SubElement(xml, 'content')
except Exception as error:
LOG.exception(error)
xml = self.node_root('main', index)
@ -382,8 +399,8 @@ class Views(object):
label = xml.find('label')
label.text = view['Name'] if not mixed else "%s (%s)" % (view['Name'], translate(view['Media']))
indent(xml)
write_xml(etree.tostring(xml, 'UTF-8'), file)
tree = etree.ElementTree(xml)
tree.write(file, pretty_print=True)
def node(self, folder, view):
@ -412,7 +429,14 @@ class Views(object):
def add_node(self, index, file, view, node, name):
try:
xml = etree.parse(file).getroot()
if os.path.isfile(file):
xml = etree.parse(file).getroot()
else:
xml = self.node_root('filter', index)
etree.SubElement(xml, 'label')
etree.SubElement(xml, 'match')
etree.SubElement(xml, 'content')
except Exception:
LOG.warning("Unable to parse file '%s'", file)
xml = self.node_root('filter', index)
@ -437,13 +461,18 @@ class Views(object):
etree.SubElement(rule, 'value').text = view['Tag']
getattr(self, 'node_' + node)(xml) # get node function based on node type
indent(xml)
write_xml(etree.tostring(xml, 'UTF-8'), file)
tree = etree.ElementTree(xml)
tree.write(file, pretty_print=True)
def add_dynamic_node(self, index, file, view, node, name, path):
try:
xml = etree.parse(file).getroot()
if os.path.isfile(file):
xml = etree.parse(file).getroot()
else:
xml = self.node_root('filter', index)
etree.SubElement(xml, 'label')
etree.SubElement(xml, 'content')
except Exception:
LOG.warning("Unable to parse file '%s'", file)
xml = self.node_root('folder', index)
@ -454,8 +483,8 @@ class Views(object):
label.text = name
getattr(self, 'node_' + node)(xml, path)
indent(xml)
write_xml(etree.tostring(xml, 'UTF-8'), file)
tree = etree.ElementTree(xml)
tree.write(file, pretty_print=True)
def node_all(self, root):