Results 1 to 4 of 4
  1. #1
    Transparent Wall Technician crazed 9.6's Avatar
    Join Date
    Nov 2014
    Posts
    15,650
    Rep Power
    447

    How to Create a Repository for Kodi

    There are many written text tutorials on how to create a repository, but they can be hard to follow.
    As an example, take a peek at the Written Tutorial that Kodi posted on their Wiki page. See it at below.

    These videos are great if you really wanna start learning xml code and how to do all this
    Big thnx to Simple Kodi for posting these videos !

    Create a Repository for Kodi
    Code:
    https://www.youtube.com/watch?v=A5scCJ3OnmM
    Update Your Repository
    Code:
    https://www.youtube.com/watch?v=tXzPUs9FaF8

    Written Tutorial
    Code:
    Things you will require
    
        Any HTTP server. A popular method is to use the svn or git source code servers of googlecode, gitorious and github. 
     - In your code project page, make sure you set up the correct version control system (source tab). Most skins use SVN.
     - This will get you the right checkout address (link) and folder structure.
    
        A folder containing one or more add-on. 
     - Start by installing an svn program (like Tortoisesvn).
     - Right click the empty folder, choose 'SVN Checkout' to let it build a folder structure inside.
     - Make sure you get asked for authentication (!), the folders look like your source code server.
     - If you don't get asked for authentication check your server settings and http vs https links.
     - Make a test.txt file in the trunk, right click to mark it as 'add' and use and use 'SVN Commit' on top folder.
    
        Make the following two files using the python code below. These 2 files are made from the addon.xml files in the folders below (from the addons). Where you can have your addon unzipped (or zipped as long as there is an addon.xml file next to it, that is always up to date with the one in the zip). 
     - A master addons.xml file. This file contains metadata about all available add-ons.
     - A checksum of the above file (this file only contains a hash of addons.xml).
    
        A zipped repository add-on for distribution. This allows you to share your repository with others. 
     - Easiest way is to have a look at another repository file and change the name, info and links.
     - You can also have a look at how other repos set up their folder structure.
    
    You can use addons_xml_generator.py[1] to generate the master xml and the MD5. Put it in the folder with all your add-ons (it needs to see addon.xml files in a folder below) and run it from your Python interpreter. If using a source code server, you can now upload your add-on folder via svn or git to your repository. Every time you update an add-on run the addons_xml_generator.py before uploading the add-ons folder.
    
        For Windows users. Install the latest version of Python.msi (from their website) in it's default directory. Python (.py) files should now be associated with python.exe and can be run like a program.
        Make a new text file and name it addons_xml_generator.py. Open it with Notepad++ (or equivalent) and paste the following code inside. 
    
    addons_xml_generator.py
    
    # *
    # *  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("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<addons>\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" , encoding="UTF-8").read().splitlines()
                    # new addon
                    addon_xml = ""
                    # loop thru cleaning each line
                    for line in xml_lines:
                        # skip encoding format line
                        if ( line.find( "<?xml" ) >= 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</addons>\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()
    
    3 Repository Files
    
    Repositories are distributed just like any other add-on. In order for you to browse one in XBMC, you'll need to create an add-on and install it. The repository addon extends the xbmc.addon.repository extension point, so in addition to the general XML structure and icons required for an icon, you'll need an <extension> block specfically pointing to your repository. Use the addon.xml of any of the 3rd party add-on repositories as a template. Online repositories should always have zip set to true, both for efficiency of download and for the protection that .zip offers by way of verifying the download (i.e. can we unzip it).
    4 Tips
    4.1 Using your repo to host images
    
    You may as a developer need to host images from time to time. Something like photobucket or flickr may work, but you can also use your repo. Commit an image to it, and then form the url to it as you would if you were accessing the image via git or svn (like below):
    
    http://xbmc-adult.googlecode.com/svn/trunk/repository.xbmc-adult/icon.png
    
    This can then be accessed easily from python code, or even embedded on the XBMC forums.
    4.2 How to make an add-on self-updating without distributing a repository file
    
    This is optional. You still need a repository for this, you just distribute the actual zipped plugin or script, as opposed to the repository file. First you need to have a working repository file. Copy the equivalent of this code from the addon.xml of your repository file:
    
      <extension point="xbmc.addon.repository"
                  name="Official XBMC.org Add-on Repository">
        <info compressed="true">http://mirrors.xbmc.org/addons/dharma-pre/addons.xml</info>
        <checksum>http://mirrors.xbmc.org/addons/dharma-pre/addons.xml.md5</checksum>
        <datadir zip="true">http://mirrors.xbmc.org/addons/dharma-pre</datadir>
      </extension>
    
    Then simply add it under the other <extension point> entries of your add-on's addon.xml The name= part of this repository extension must never be the same as your add-on.
    "The illusion of freedom will continue for as long as it's profitable to continue the illusion. At the point where the illusion becomes too expensive to maintain, they will take down the scenery, move the tables and chairs out of the way, then they will pull back the curtains and you will see the brick wall at the back of the theater."
    - Frank Zappa

  2. #2
    enlightened one psycon's Avatar
    Join Date
    Feb 2015
    Location
    In the hills
    Posts
    11
    Rep Power
    0
    this a hint?

  3. #3

    Fire From Within

    dara's Avatar
    Join Date
    Nov 2014
    Location
    yes i do
    Posts
    10,910
    Rep Power
    393
    I think tinieblax would love to host a repo location!

  4. #4
    enlightened one psycon's Avatar
    Join Date
    Feb 2015
    Location
    In the hills
    Posts
    11
    Rep Power
    0
    we were actually thinking of doing that over at ********** already.. ken was going to look into it, think it just got backburnered.

 

 

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •