def __init__( self, *args, **kwargs ):
        if True: #self._check_compatible():
            self.pluginMgr = PluginMgr()
            self.parameters = self.pluginMgr.parse_params()

            # if 1st start create missing directories
            self.fileMgr = fileMgr()
            self.fileMgr.verifrep( DIR_ADDON_MODULE )
            self.fileMgr.verifrep( DIR_ADDON_REPO )
            self.fileMgr.verifrep( DIR_CACHE )
            self.fileMgr.verifrep( DIR_CACHE_ADDONS )

            # Check settings
            if xbmcplugin.getSetting('first_run') == 'true':
                # Check (only the 1st time) is xbmcaddon module is available
                print( "     **First run")
                if self._check_addon_lib():
                    print( "         XBMC Addon 4 XBOX Addon Library already installed")
                    print( "         Installing default repositories")
                    if ( self._installRepos() ):
                        xbmcplugin.setSetting('first_run','false')
                        self._createRootDir()
                else:
                    print( "         ERROR - XBMC Addon 4 XBOX Addon Library MISSING")
                    dialog = xbmcgui.Dialog()
                    dialog.ok( __language__(30000), __language__(30091) ,__language__(30092))
            else:
                self._createRootDir()

        self.pluginMgr.add_sort_methods( False )
        self.pluginMgr.end_of_directory( True, update=False )
    def __init__( self ):
        from globalvars import DIR_CACHE_ADDONS
        self.CACHEDIR      = DIR_CACHE_ADDONS
        self.fileMgr       = fileMgr()
        self.status        = "INIT" # Status of install :[ INIT | OK | ERROR | DOWNLOADED | EXTRACTED | ALREADYINSTALLED | ALREADYINUSE | CANCELED | INSTALL_DONE ]

        # Clean cache directory
        self.fileMgr.delDirContent(self.CACHEDIR)
    def __init__(self):
        from globalvars import DIR_CACHE_ADDONS
        self.CACHEDIR = DIR_CACHE_ADDONS
        self.fileMgr = fileMgr()
        self.status = "INIT"  # Status of install :[ INIT | OK | ERROR | DOWNLOADED | EXTRACTED | ALREADYINSTALLED | ALREADYINUSE | CANCELED | INSTALL_DONE ]

        # Clean cache directory
        self.fileMgr.delDirContent(self.CACHEDIR)
Exemple #4
0
    def __init__(self, *args, **kwargs):

        self.fileMgr = fileMgr()
        self.pluginMgr = PluginMgr()
        self.parameters = self.pluginMgr.parse_params()

        # Install from remote server
        status = self._install_addon_remote()

        self.pluginMgr.end_of_directory(True, update=False)
    def __init__( self, *args, **kwargs ):

        self.fileMgr   = fileMgr()
        self.pluginMgr = PluginMgr()
        self.parameters = self.pluginMgr.parse_params()

        # Install from remote server
        status = self._install_addon_remote()

        self.pluginMgr.end_of_directory( True, update=False )
 def __init__( self , name, type ):
     #self.itemId          = itemId       # Id of the server item 
     self.name            = name         # Name of the item
     self.type            = type         # XBMC Type of the item
     #self.typeInstallPath = installPath  # Install Path for this type of item
     self.typeInstallPath = Item.get_install_path( type )  # Install Path for this type of item
     #self.filesize        = filesize     # Size of the file to download
     
     self.configManager = CONF.configCtrl()
     if not self.configManager.is_conf_valid: raise
     self.CACHEDIR = self.configManager.CACHEDIR
     self.fileMgr = fileMgr()
     
     # NOTE: need to be set in a subclass before calling isAlreadyInstalled or deleteInstalledItem
     self.scraperName     = None
     self.scraperFileList = None # List of teh file for a scraper (xml, image ...)
     #self.installNameList = None
     self.installName     = None # Name of the addon used by XBMC: i.e script dir name, plugin dir name, skin dir name, scraper xml file name
     self.destinationPath = None # 
     self.status          = "INIT" # Status of install :[ INIT | OK | ERROR | DOWNLOADED | EXTRACTED | ALREADYINSTALLED | ALREADYINUSE | CANCELED | INSTALL_DONE ]       
Exemple #7
0
    def __init__(self, *args, **kwargs):
        if True:  #self._check_compatible():
            self.pluginMgr = PluginMgr()
            self.parameters = self.pluginMgr.parse_params()

            # if 1st start create missing directories
            self.fileMgr = fileMgr()
            self.fileMgr.verifrep(DIR_ADDON_MODULE)
            self.fileMgr.verifrep(DIR_ADDON_REPO)
            self.fileMgr.verifrep(DIR_CACHE)
            self.fileMgr.verifrep(DIR_CACHE_ADDONS)

            # Check settings
            if xbmcplugin.getSetting('first_run') == 'true':
                # Check (only the 1st time) is xbmcaddon module is available
                print("     **First run")
                if self._check_addon_lib():
                    print(
                        "         XBMC Addon 4 XBOX Addon Library already installed"
                    )
                    print("         Installing default repositories")
                    if (self._installRepos()):
                        xbmcplugin.setSetting('first_run', 'false')
                        self._createRootDir()
                else:
                    print(
                        "         ERROR - XBMC Addon 4 XBOX Addon Library MISSING"
                    )
                    dialog = xbmcgui.Dialog()
                    dialog.ok(__language__(30000), __language__(30091),
                              __language__(30092))
            else:
                self._createRootDir()

        self.pluginMgr.add_sort_methods(False)
        self.pluginMgr.end_of_directory(True, update=False)
Exemple #8
0
    def _getAddonRequiredLibs ( self, addonIdList, repoId = None):
        """
        Display the addons to install for a repository
        """
        status = "OK"

        # List of repositories we will look in order to find the required modules
        repoList = [ getInstalledAddonInfo( os.path.join( DIR_ADDON_REPO, REPO_ID_XBMC4XBOX) ) ]
        if repoId:
            repoList.extend( [ getInstalledAddonInfo( os.path.join( DIR_ADDON_REPO, repoId) ) ] )
        repoList.extend( [ getInstalledAddonInfo( os.path.join( DIR_ADDON_REPO, REPO_ID_XBMC) ) ] )

        # Check if required lib already exist - we do an additional check later for non script modules once we have the module name from the addons repo
        addonIdCheck = []
        addonIdCheck.extend(addonIdList)
        for requiredlib in addonIdCheck:
            localLibVersion = isLibInstalled( requiredlib['id'] )
            if localLibVersion:
                xbmc.log("Requested %s version %s - found version %s" % (requiredlib['id'], requiredlib["version"], localLibVersion), xbmc.LOGDEBUG)
                if versionsCmp( localLibVersion, requiredlib["version"] ) >= 0:
                    addonIdList.remove(requiredlib)

                else:
                    installPath = get_install_path( TYPE_ADDON_MODULE )
                    fileMgr().deleteDir( os.path.join( installPath, requiredlib['id'] ) )

        if len(addonIdList) == 0:
            xbmc.log("No required libs", xbmc.LOGDEBUG)
            return "OK"

        # Parse each repository in the list and try to find in it the required module
        if len(addonIdList) > 0:
            allLibsFound = False
            for repoInfo in repoList:
                # Retrieving addons.xml from remote repository
                xmlInfofPath = os.path.join( DIR_CACHE, repoInfo [ "id" ] + ".xml")
                if fileOlderThan(xmlInfofPath, 60 * 30):
                    data = readURL( repoInfo [ "repo_url" ], save=True, localPath=xmlInfofPath )

                if ( os.path.exists( xmlInfofPath ) ):
                    try:
                        xmlData = open( os.path.join( xmlInfofPath ), "r" )
                        listAddonsXml = ListItemFromXML(xmlData)
                        xmlData.close()
                    except:
                        print_exc()

                    keepParsingCurrentRepo = True
                    while (keepParsingCurrentRepo):
                        item = listAddonsXml.getNextItem()
                        if item:
                            if len(addonIdList) > 0:
                                for lib in addonIdList:
                                    if lib["id"] == item['id']:
                                        localLibVersion = isLibInstalled( item['id'], item['type'], item['name'] )
                                        if localLibVersion:
                                            xbmc.log("Requested %s version %s - found version %s" % (requiredlib['id'], requiredlib["version"], localLibVersion), xbmc.LOGDEBUG)
                                            if versionsCmp( localLibVersion, lib["version"] ) >= 0:
                                                addonIdList.remove(lib)
                                                continue
                                            else:
                                                name = item['name']
                                                if item['type'] == TYPE_ADDON_MODULE:
                                                    name = item['id']
                                                installPath = get_install_path( item['type'] )
                                                fileMgr().deleteDir( os.path.join( installPath, name ) )

                                        endRepoChar = "/"
                                        if repoInfo [ "repo_datadir" ].endswith( "/" ):
                                            endRepoChar = ""

                                        if repoInfo [ "repo_format" ] ==  'zip':
                                            downloadUrl = (repoInfo [ "repo_datadir" ] + endRepoChar + item["id"] + '/' + item["id"]  + '-' + item["version"] + ".zip").replace(' ', '%20')
                                            changelog   = (repoInfo [ "repo_datadir" ] + endRepoChar + item["id"] + '/' + "changelog" + '-' + item["version"] + ".txt").replace(' ', '%20')
                                            iconimage   = (repoInfo [ "repo_datadir" ] + endRepoChar + item["id"] + '/' + "icon.png").replace(' ', '%20')
                                        else:
                                            downloadUrl = (repoInfo [ "repo_datadir" ] + endRepoChar + item["id"] + '/').replace(' ', '%20')
                                            changelog   = (repoInfo [ "repo_datadir" ] + endRepoChar + item["id"] + '/' + "changelog" + ".txt").replace(' ', '%20')
                                            iconimage   = (repoInfo [ "repo_datadir" ] + endRepoChar + item["id"] + '/' + "icon.png").replace(' ', '%20')
                                        item["ImageUrl"] = iconimage
                                        item["changelog"] = changelog

                                        xbmc.log("Download URL: %s" % (downloadUrl), xbmc.LOGDEBUG)

                                        # Install lib
                                        installMgr = InstallMgr()
                                        status, itemName, destination, addonInstaller = installMgr.install_from_repo( item['name'].encode('utf8'), downloadUrl, repoInfo[ "repo_format" ], repoInfo[ "repo_datadir" ] )
                                        if status == "OK":
                                            status, destination = addonInstaller.installItem()
                                            if status == "OK":
                                                saveLocalAddonInfo(repoInfo[ "id" ], destination, addonInstaller)
                                            # recursively install further dependencies
                                            requiredLibs = addonInstaller.itemInfo[ "required_lib" ]
                                            if len(requiredLibs) > 0:
                                                status = self._getAddonRequiredLibs ( addonInstaller.itemInfo[ "required_lib" ], repoInfo[ "id" ] )
                                                if status != "OK":
                                                    return status
                                        else:
                                            # Notify user it is impossible to install the current kib and check if he want to continue
                                            if not xbmcgui.Dialog().yesno( item['name'].encode('utf8'), __language__( 30070 ), __language__( 30071 ), __language__( 30072 ) ):
                                                keepParsingCurrentRepo = False
                                                allLibsFound = True
                                                status = "CANCELED"
                                                xbmc.log("User cancelled due to error of a lib install", xbmc.LOGDEBUG)
                                            else:
                                                # User wants to continue
                                                status = "OK"
                                        # Module installed or already installed - Remove it for the list of libs to install
                                        addonIdList.remove(lib)
                            else:
                                # No lib to find remaining
                                keepParsingCurrentRepo = False
                                allLibsFound = True
                        else:
                            keepParsingCurrentRepo = False
                if not allLibsFound:
                    # all libs found, no need to go to parse next repo
                    continue
            if len(addonIdList) > 0:
                xbmc.log("Not all required lib has been installed", xbmc.LOGDEBUG)

                if not xbmcgui.Dialog().yesno( lib['id'], __language__( 30070 ), __language__( 30071 ), __language__( 30072 ) ):
                    xbmc.log("User cancelled due to error of a lib install", xbmc.LOGDEBUG)
                    allLibsFound = True
                    status = "CANCELED"
                else:
                    # User wants to continue

                    # Update list of module which fail to install
                    #self.addMissingModules(addonIdList)
                    addMissingModules2DB(addonIdList)

                    status = "OK"

        return status#, itemName, destination, addonInstaller