kodi: add xml_merge.py script to process xml files during installation

This commit is contained in:
Lukas Rusak 2017-03-14 10:38:42 -07:00
parent 91964543cc
commit 8fd902f197
No known key found for this signature in database
GPG Key ID: 8C310C807E7393A3
2 changed files with 71 additions and 32 deletions

View File

@ -292,39 +292,27 @@ post_makeinstall_target() {
$SED "s|@ADDON_URL@|http://lrusak.libreelec.tv/addons/$ADDON_PATH|g" $INSTALL/usr/share/kodi/addons/repository.retroplayer.libreelec.tv/addon.xml $SED "s|@ADDON_URL@|http://lrusak.libreelec.tv/addons/$ADDON_PATH|g" $INSTALL/usr/share/kodi/addons/repository.retroplayer.libreelec.tv/addon.xml
mkdir -p $INSTALL/usr/share/kodi/config mkdir -p $INSTALL/usr/share/kodi/config
cp $PKG_DIR/config/guisettings.xml $INSTALL/usr/share/kodi/config
cp $PKG_DIR/config/sources.xml $INSTALL/usr/share/kodi/config
# install project specific configs
if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/guisettings.xml ]; then
cp -R $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/guisettings.xml $INSTALL/usr/share/kodi/config
elif [ -f $PROJECT_DIR/$PROJECT/kodi/guisettings.xml ]; then
cp -R $PROJECT_DIR/$PROJECT/kodi/guisettings.xml $INSTALL/usr/share/kodi/config
fi
if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/sources.xml ]; then
cp -R $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/sources.xml $INSTALL/usr/share/kodi/config
elif [ -f $PROJECT_DIR/$PROJECT/kodi/sources.xml ]; then
cp -R $PROJECT_DIR/$PROJECT/kodi/sources.xml $INSTALL/usr/share/kodi/config
fi
mkdir -p $INSTALL/usr/share/kodi/system/
if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/advancedsettings.xml ]; then
cp $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/advancedsettings.xml $INSTALL/usr/share/kodi/system/
elif [ -f $PROJECT_DIR/$PROJECT/kodi/advancedsettings.xml ]; then
cp $PROJECT_DIR/$PROJECT/kodi/advancedsettings.xml $INSTALL/usr/share/kodi/system/
else
cp $PKG_DIR/config/advancedsettings.xml $INSTALL/usr/share/kodi/system/
fi
mkdir -p $INSTALL/usr/share/kodi/system/settings mkdir -p $INSTALL/usr/share/kodi/system/settings
if [ -n "$DEVICE" -a -f $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/appliance.xml ]; then
cp $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/appliance.xml $INSTALL/usr/share/kodi/system/settings $PKG_DIR/scripts/xml_merge.py $PKG_DIR/config/guisettings.xml \
elif [ -f $PROJECT_DIR/$PROJECT/kodi/appliance.xml ]; then $PROJECT_DIR/$PROJECT/kodi/guisettings.xml
cp $PROJECT_DIR/$PROJECT/kodi/appliance.xml $INSTALL/usr/share/kodi/system/settings $PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/guisettings.xml \
else > $INSTALL/usr/share/kodi/config/guisettings.xml
cp $PKG_DIR/config/appliance.xml $INSTALL/usr/share/kodi/system/settings
fi $PKG_DIR/scripts/xml_merge.py $PKG_DIR/config/sources.xml \
$PROJECT_DIR/$PROJECT/kodi/sources.xml
$PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/sources.xml \
> $INSTALL/usr/share/kodi/config/sources.xml
$PKG_DIR/scripts/xml_merge.py $PKG_DIR/config/advancedsettings.xml \
$PROJECT_DIR/$PROJECT/kodi/advancedsettings.xml
$PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/advancedsettings.xml \
> $INSTALL/usr/share/kodi/system/advancedsettings.xml
$PKG_DIR/scripts/xml_merge.py $PKG_DIR/config/appliance.xml \
$PROJECT_DIR/$PROJECT/kodi/appliance.xml
$PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/appliance.xml \
> $INSTALL/usr/share/kodi/system/settings/appliance.xml
# update addon manifest # update addon manifest
ADDON_MANIFEST=$INSTALL/usr/share/kodi/system/addon-manifest.xml ADDON_MANIFEST=$INSTALL/usr/share/kodi/system/addon-manifest.xml

View File

@ -0,0 +1,51 @@
#!/usr/bin/env python2
# taken from http://stackoverflow.com/a/14879370 with minor modifications
import os
import sys
import xml.dom.minidom
from xml.etree import ElementTree as et
class XMLCombiner(object):
def __init__(self, filenames):
assert len(filenames) > 0, 'No filenames!'
self.roots = [et.parse(f).getroot() for f in filenames]
def prettyPrint(self, etree_xml):
minidom = xml.dom.minidom.parseString(et.tostring(etree_xml))
return "\n".join([line for line in minidom.toprettyxml(indent=" ", encoding="utf-8").split('\n') if line.strip() != ""])
def combine(self):
for r in self.roots[1:]:
self.combine_element(self.roots[0], r)
return self.prettyPrint(self.roots[0])
def combine_element(self, one, other):
mapping = {el.tag: el for el in one}
for el in other:
if len(el) == 0:
try:
mapping[el.tag].text = el.text
except KeyError:
mapping[el.tag] = el
one.append(el)
else:
try:
self.combine_element(mapping[el.tag], el)
except KeyError:
mapping[el.tag] = el
one.append(el)
if __name__ == '__main__':
try:
r = XMLCombiner([sys.argv[1], sys.argv[2], sys.argv[3]]).combine()
except IOError:
try:
r = XMLCombiner([sys.argv[1], sys.argv[2]]).combine()
except IOError:
try:
r = XMLCombiner([sys.argv[1], sys.argv[3]]).combine()
except IOError:
r = XMLCombiner([sys.argv[1]]).combine()
print(r)