mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-31 14:37:59 +00:00
kodi: add xml_merge.py script to process xml files during installation
This commit is contained in:
parent
91964543cc
commit
8fd902f197
@ -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
|
||||
|
||||
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
|
||||
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
|
||||
elif [ -f $PROJECT_DIR/$PROJECT/kodi/appliance.xml ]; then
|
||||
cp $PROJECT_DIR/$PROJECT/kodi/appliance.xml $INSTALL/usr/share/kodi/system/settings
|
||||
else
|
||||
cp $PKG_DIR/config/appliance.xml $INSTALL/usr/share/kodi/system/settings
|
||||
fi
|
||||
|
||||
$PKG_DIR/scripts/xml_merge.py $PKG_DIR/config/guisettings.xml \
|
||||
$PROJECT_DIR/$PROJECT/kodi/guisettings.xml
|
||||
$PROJECT_DIR/$PROJECT/devices/$DEVICE/kodi/guisettings.xml \
|
||||
> $INSTALL/usr/share/kodi/config/guisettings.xml
|
||||
|
||||
$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
|
||||
ADDON_MANIFEST=$INSTALL/usr/share/kodi/system/addon-manifest.xml
|
||||
|
51
packages/mediacenter/kodi/scripts/xml_merge.py
Executable file
51
packages/mediacenter/kodi/scripts/xml_merge.py
Executable 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)
|
Loading…
x
Reference in New Issue
Block a user