diff --git a/resources/lib/initialsetup.py b/resources/lib/initialsetup.py index 534241aa..b0aee77c 100644 --- a/resources/lib/initialsetup.py +++ b/resources/lib/initialsetup.py @@ -7,7 +7,7 @@ import xbmc import xbmcgui from utils import settings, window, language as lang, tryEncode, \ - get_advancessettings_xml_setting + advancessettings_xml import downloadutils from userclient import UserClient @@ -401,7 +401,7 @@ class InitialSetup(): dialog = self.dialog # Get current Kodi video cache setting - cache = get_advancessettings_xml_setting(['cache', 'memorysize']) + cache = advancessettings_xml(['cache', 'memorysize']) if cache is not None: cache = str(cache.text) else: @@ -478,8 +478,8 @@ class InitialSetup(): log.debug("User opted to disable Plex music library.") settings('enableMusic', value="false") else: - from utils import advancedSettingsXML - advancedSettingsXML() + from utils import advancedsettings_tweaks + advancedsettings_tweaks() # Download additional art from FanArtTV if dialog.yesno(heading=lang(29999), line1=lang(39061)): diff --git a/resources/lib/librarysync.py b/resources/lib/librarysync.py index 8c1b77d5..017e4cf9 100644 --- a/resources/lib/librarysync.py +++ b/resources/lib/librarysync.py @@ -12,7 +12,7 @@ import xbmcgui from utils import window, settings, getUnixTimestamp, sourcesXML,\ ThreadMethods, ThreadMethodsAdditionalStop, LogTime, getScreensaver,\ setScreensaver, playlistXSP, language as lang, DateToKodi, reset,\ - advancedSettingsXML, tryDecode, deletePlaylists, deleteNodes, \ + advancedsettings_tweaks, tryDecode, deletePlaylists, deleteNodes, \ ThreadMethodsAdditionalSuspend, create_actor_db_index, dialog import downloadutils import itemtypes @@ -1461,7 +1461,7 @@ class LibrarySync(Thread): self.initializeDBs() if self.enableMusic: - advancedSettingsXML() + advancedsettings_tweaks() if settings('FanartTV') == 'true': self.fanartthread.start() diff --git a/resources/lib/utils.py b/resources/lib/utils.py index 79a0bf49..930fc3c4 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -451,21 +451,24 @@ def normalize_string(text): return text + def indent(elem, level=0): - # Prettify xml trees + """ + Prettifies xml trees. Pass the etree root in + """ i = "\n" + level*" " if len(elem): if not elem.text or not elem.text.strip(): - elem.text = i + " " + elem.text = i + " " if not elem.tail or not elem.tail.strip(): - elem.tail = i + elem.tail = i for elem in elem: - indent(elem, level+1) + indent(elem, level+1) if not elem.tail or not elem.tail.strip(): - elem.tail = i + elem.tail = i else: if level and (not elem.tail or not elem.tail.strip()): - elem.tail = i + elem.tail = i def guisettingsXML(): @@ -519,7 +522,7 @@ def __setSubElement(element, subelement): return answ -def get_advancessettings_xml_setting(node_list): +def advancessettings_xml(node_list, new_value=None, attrib=None): """ Returns the etree element for nodelist (if it exists) and None if not set @@ -529,7 +532,7 @@ def get_advancessettings_xml_setting(node_list): 750 - Example xml: + for the following example xml: @@ -537,60 +540,63 @@ def get_advancessettings_xml_setting(node_list): 750 + + If new_value is set, '750' will be replaced accordingly, returning the new + etree Element. Advancedsettings might be generated if it did not exist + already + + If the dict attrib is set, the Element's attributs will be appended + accordingly """ - path = tryDecode(xbmc.translatePath("special://profile/")) + path = '%sadvancedsettings.xml' % xbmc.translatePath("special://profile/") try: - xmlparse = etree.parse("%sadvancedsettings.xml" % path) - except: - log.debug('Could not parse advancedsettings.xml, returning None') - return - root = xmlparse.getroot() + xml = etree.parse(path) + except IOError: + # Document is blank or missing + if new_value is None and attrib is None: + log.debug('Could not parse advancedsettings.xml, returning None') + return + # Create topmost xml entry + root = etree.Element('advancedsettings') + else: + root = xml.getroot() + element = root + # Reading values + if new_value is None and attrib is None: + for node in node_list: + element = element.find(node) + if element is None: + break + return element + + # Setting new values. Get correct element first for node in node_list: - root = root.find(node) - if root is None: - break - return root + element = __setSubElement(element, node) + # Write new values + element.text = new_value or '' + if attrib is not None: + for key, attribute in attrib.iteritems(): + element.set(key, attribute) + # Indent and make readable + indent(root) + # Safe the changed xml + try: + xml.write(path) + except NameError: + etree.ElementTree(root).write(path) + return element -def advancedSettingsXML(): +def advancedsettings_tweaks(): """ Kodi tweaks Changes advancedsettings.xml, musiclibrary: backgroundupdate set to "true" - - Overrides guisettings.xml in Kodi userdata folder: - updateonstartup : set to "false" - usetags : set to "false" - findremotethumbs : set to "false" """ - path = tryDecode(xbmc.translatePath("special://profile/")) - xmlpath = "%sadvancedsettings.xml" % path - - try: - xmlparse = etree.parse(xmlpath) - except: - # Document is blank or missing - root = etree.Element('advancedsettings') - else: - root = xmlparse.getroot() - - music = __setSubElement(root, 'musiclibrary') - __setXMLTag(music, 'backgroundupdate', "true") - # __setXMLTag(music, 'updateonstartup', "false") - - # Subtag 'musicfiles' - # music = __setSubElement(root, 'musicfiles') - # __setXMLTag(music, 'usetags', "false") - # __setXMLTag(music, 'findremotethumbs', "false") - - # Prettify and write to file - try: - indent(root) - except: - pass - etree.ElementTree(root).write(xmlpath) + advancessettings_xml(['musiclibrary', 'backgroundupdate'], + new_value='true') def sourcesXML(): @@ -851,7 +857,7 @@ def LogTime(func): result = func(*args, **kwargs) elapsedtotal = datetime.now() - starttotal log.info('It took %s to run the function %s' - % (elapsedtotal, func.__name__)) + % (elapsedtotal, func.__name__)) return result return wrapper