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)
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 ]
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 _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