From 9c9f72abedaaf5f2c75d33905e4d89aeab9eb385 Mon Sep 17 00:00:00 2001 From: "A.J. Venter" Date: Wed, 12 Oct 2016 10:40:11 +0200 Subject: [PATCH] Fixed problem with different mods using the same download --- libPyKAN/ckanRepo.py | 2 +- libPyKAN/modmanager.py | 9 +++++---- libPyKAN/util.py | 6 ++++-- pyKAN | 6 +++--- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/libPyKAN/ckanRepo.py b/libPyKAN/ckanRepo.py index 102536c..691a825 100644 --- a/libPyKAN/ckanRepo.py +++ b/libPyKAN/ckanRepo.py @@ -36,7 +36,7 @@ def update_repository_data(self): util.SaveJsonToFile(RepoListFile,util.download_json(util.repository_list)) uris = [] for i in self.settings.repos(): - uris.append({'uri': i, 'sha': None}) + uris.append({'uri': i, 'sha': None, 'id': None}) repofiles = util.download_files(uris, self.cachedir, self.settings['DownLoadRetryMax']) diff --git a/libPyKAN/modmanager.py b/libPyKAN/modmanager.py index 381f01c..bcfb2ac 100644 --- a/libPyKAN/modmanager.py +++ b/libPyKAN/modmanager.py @@ -44,8 +44,9 @@ def __get_sha__(self, repoentry): def download(self): - urilist = [{'uri':i['download'],'sha':self.__get_sha__(i)} for i in self.repoentries] - util.debug(urilist) + util.debug(self.repoentries) + urilist = [{'uri':i['download'],'sha':self.__get_sha__(i),'id':i['identifier']} for i in self.repoentries] + util.debug('URILIST %s' % urilist) self.cachedir = os.path.join(self.settings.KSPDIR,'PYKAN','cache') util.mkdir_p(self.cachedir) self.modfiles = util.download_files(urilist,self.cachedir,self.settings['DownLoadRetryMax']) @@ -70,9 +71,9 @@ def clear_the_way(self,find,install_to,is_regex=False, matches_files=False): def install(self): modlist = {} - util.debug(self.modfiles) + util.debug('MODFILES %s' %self.modfiles) for i in self.modfiles: - mod = [m for m in self.repoentries if self.__get_sha__(m) == i[1]][0] + mod = [m for m in self.repoentries if self.__get_sha__(m) == i[1] and m['identifier'] == i[2]][0] print("Installing module ",mod['identifier']) modfiles = [] for target in mod.get('install',[{'PYKANBASIC':True,'install_to':'GameData'}]): diff --git a/libPyKAN/util.py b/libPyKAN/util.py index 99fb209..ad58d55 100644 --- a/libPyKAN/util.py +++ b/libPyKAN/util.py @@ -41,6 +41,8 @@ def __download_file__(dl_data): before = '' if dl_data['sha']: before = '%s_' % dl_data['sha'][:8] + if dl_data['id']: + before += '_%s' % dl_data['id'] filename = dl_data['uri'].replace(':','').replace('/','_') filename = os.path.join(dl_data['cachedir'],'%s%s' %(before,filename)) print("Filename: %s" %filename) @@ -70,12 +72,12 @@ def __download_file__(dl_data): if not dl_data['sha']: return filename else: - return (filename,dl_data['sha']) + return (filename,dl_data['sha'],dl_data['id']) def download_files(urilist, cachedir, retries): dl_data = [] for uri in urilist: - dl_data.append({"uri": uri['uri'],"cachedir": cachedir, 'retries': retries, 'sha': uri['sha']}) + dl_data.append({'id':'id' in uri and uri['id'] or '',"uri": uri['uri'],"cachedir": cachedir, 'retries': retries, 'sha': uri['sha']}) pool = multiprocessing.Pool() return pool.map(__download_file__, dl_data) diff --git a/pyKAN b/pyKAN index 9fa8839..39208d1 100755 --- a/pyKAN +++ b/pyKAN @@ -142,7 +142,7 @@ if __name__ == '__main__': return if options.installed: for i in INSTALLED.list_modules(): - print('%s: %s | %s (%s)' %(i['identifier'],i['name'],i['version'],i['status'])) + print('%s : %s | %s (%s)' %(i['identifier'],i['name'],i['version'],i['status'])) return if options.allmods: filtermethods = [] @@ -157,7 +157,7 @@ if __name__ == '__main__': filterargs['kspversion'] = options.kspversion for i in repo.list_modules(filtermethods, filterargs): if options.allversions: - print("%s: %s | version: %s (%s)" %(i['identifier'],i.get('name',i),i.get('version'),INSTALLED.modstatus(i.get('name',i)))) + print("%s : %s | version: %s (%s)" %(i['identifier'],i.get('name',i),i.get('version'),INSTALLED.modstatus(i.get('name',i)))) else: name = i.get('name','') version = i.get('version','') @@ -166,7 +166,7 @@ if __name__ == '__main__': result[modid] = {'name': name, 'version': version} if result: for i in result: - print("%s: %s | %s (%s)" %(i,result[i]['name'],result[i]['version'],INSTALLED.modstatus(i))) + print("%s : %s | %s (%s)" %(i,result[i]['name'],result[i]['version'],INSTALLED.modstatus(i))) def show_module(): if not options.module: