# * # * Copyright (C) 2012-2013 Garrett Brown # * Copyright (C) 2010 j48antialias # * # * This Program is free software; you can redistribute it and/or modify # * it under the terms of the GNU General Public License as published by # * the Free Software Foundation; either version 2, or (at your option) # * any later version. # * # * This Program is distributed in the hope that it will be useful, # * but WITHOUT ANY WARRANTY; without even the implied warranty of # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # * GNU General Public License for more details. # * # * You should have received a copy of the GNU General Public License # * along with XBMC; see the file COPYING. If not, write to # * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. # * http://www.gnu.org/copyleft/gpl.html # * # * Based on code by j48antialias: # * https://anarchintosh-projects.googlecode.com/files/addons_xml_generator.py """ addons.xml generator """ import os import sys # Compatibility with 3.0, 3.1 and 3.2 not supporting u"" literals if sys.version < '3': import codecs def u(x): return codecs.unicode_escape_decode(x)[0] else: def u(x): return x class Generator: """ Generates a new addons.xml file from each addons addon.xml file and a new addons.xml.md5 hash file. Must be run from the root of the checked-out repo. Only handles single depth folder structure. """ def __init__( self ): # generate files self._generate_addons_file() self._generate_md5_file() # notify user print("Finished updating addons xml and md5 files") def _generate_addons_file( self ): # addon list addons = os.listdir( "." ) # final addons text addons_xml = u("\n\n") # loop thru and add each addons addon.xml file for addon in addons: try: # skip any file or .svn folder or .git folder if ( not os.path.isdir( addon ) or addon == ".svn" or addon == ".git" ): continue # create path _path = os.path.join( addon, "addon.xml" ) # split lines for stripping xml_lines = open( _path, "r" ).read().splitlines() # new addon addon_xml = "" # loop thru cleaning each line for line in xml_lines: # skip encoding format line if ( line.find( "= 0 ): continue # add line if sys.version < '3': addon_xml += unicode( line.rstrip() + "\n", "UTF-8" ) else: addon_xml += line.rstrip() + "\n" # we succeeded so add to our final addons.xml text addons_xml += addon_xml.rstrip() + "\n\n" except Exception as e: # missing or poorly formatted addon.xml print("Excluding %s for %s" % ( _path, e )) # clean and add closing tag addons_xml = addons_xml.strip() + u("\n\n") # save file self._save_file( addons_xml.encode( "UTF-8" ), file="addons.xml" ) def _generate_md5_file( self ): # create a new md5 hash try: import md5 m = md5.new( open( "addons.xml", "r" ).read() ).hexdigest() except ImportError: import hashlib m = hashlib.md5( open( "addons.xml", "r", encoding="UTF-8" ).read().encode( "UTF-8" ) ).hexdigest() # save file try: self._save_file( m.encode( "UTF-8" ), file="addons.xml.md5" ) except Exception as e: # oops print("An error occurred creating addons.xml.md5 file!\n%s" % e) def _save_file( self, data, file ): try: # write data to the file (use b for Python 3) open( file, "wb" ).write( data ) except Exception as e: # oops print("An error occurred saving %s file!\n%s" % ( file, e )) if ( __name__ == "__main__" ): # start Generator()