def importRegion(region='US', language='en'): if not region in Config.regionLanguages( ) or language not in Config.regionLanguages()[region]: Print.error('Could not locate %s/%s !' % (region, language)) return False for region2 in Config.regionLanguages(): for language2 in Config.regionLanguages()[region2]: for nsuId, regionTitle in Titles.data(region2, language2).items(): if not regionTitle.id: continue title = Titles.get(regionTitle.id, None, None) title.importFrom(regionTitle, region2, language2) for region2 in Config.regionLanguages(): for language2 in Config.regionLanguages()[region2]: if language2 != language: continue for nsuId, regionTitle in Titles.data(region2, language2).items(): if not regionTitle.id: continue title = Titles.get(regionTitle.id, None, None) title.importFrom(regionTitle, region2, language2) for nsuId, regionTitle in Titles.data(region, language).items(): if not regionTitle.id: continue title = Titles.get(regionTitle.id, None, None) title.importFrom(regionTitle, region, language) Titles.loadTxtDatabases() Titles.save()
def matchDemos(): for nsuId, rt in Titles.data('US', 'en'): if rt.id: continue for tid, t in Titles.data(): if rt.name.startsWith(t.name) or (t.name == rt.name and len(t.name) > 5): print(rt.name + ' - ' + t.name) break
def matchDemos(): nut.initTitles() nut.initFiles() orphans = {} Titles.loadTxtDatabases() for nsuId, titleId in Titles.nsuIdMap.items(): for region, languages in Config.regionLanguages().items(): for language in languages: if nsuId: title = Titles.get(str(nsuId), region, language) title.id = titleId for region, languages in Config.regionLanguages().items(): for language in languages: for nsuId, rt in Titles.data(region, language).items(): if rt.id: continue orphans[nsuId] = rt.name Titles.saveRegion(region, language) for nsuId, name in orphans.items(): print(str(nsuId) + '|' + str(name))
def updateVersions(force=True): initTitles() initFiles() i = 0 for k, t in Titles.items(): if force or t.version is None: if (t.isDLC or t.isUpdate or Config.download.base) and (not t.isDLC or Config.download.DLC) and (not t.isDemo or Config.download.demo) and (not t.isUpdate or Config.download.update) and ( t.key or Config.download.sansTitleKey) and (len(Config.titleWhitelist) == 0 or t.id in Config.titleWhitelist) and t.id not in Config.titleBlacklist: v = t.lastestVersion(True) Print.info("%s[%s] v = %s" % (str(t.name), str(t.id), str(v))) i = i + 1 if i % 20 == 0: Titles.save() for t in list(Titles.data().values()): if not t.isUpdate and not t.isDLC and t.updateId and t.updateId and not Titles.contains(t.updateId): u = Title.Title() u.setId(t.updateId) if u.lastestVersion(): Titles.set(t.updateId, u) Print.info("%s[%s] FOUND" % (str(t.name), str(u.id))) i = i + 1 if i % 20 == 0: Titles.save() Titles.save()
def importRegion(region='US', language='en', save=True): if region not in Config.regionLanguages() or language not in Config.regionLanguages()[region]: Print.info('Could not locate %s/%s !' % (region, language)) return False Hook.call("import.pre", region, language) regionLanguages = [] for region2 in Config.regionLanguages(): for language2 in Config.regionLanguages()[region2]: regionLanguages.append(RegionLanguage(region2, language2, region, language)) for rl in sorted(regionLanguages): data = Titles.data(rl.region, rl.language) for nsuId in sorted(data.keys(), reverse=True): regionTitle = data[nsuId] if not regionTitle.id: continue try: for tid in regionTitle.ids: title = Titles.get(tid, None, None) title.importFrom(regionTitle, rl.region, rl.language, preferredRegion=region, preferredLanguage=language) except: title = Titles.get(regionTitle.id, None, None) title.importFrom(regionTitle, rl.region, rl.language, preferredRegion=region, preferredLanguage=language) Titles.loadTxtDatabases() Hook.call("import.post", region, language) if save: Titles.save()
def organize(): nut.initTitles() nut.initFiles() #scan() Print.info('organizing') for k, f in Nsps.files.items(): #print('moving ' + f.path) #Print.info(str(f.hasValidTicket) +' = ' + f.path) f.move() for id, t in Titles.data().items(): files = t.getFiles() if len(files) > 1: #Print.info("%d - %s - %s" % (len(files), t.id, t.name)) latest = t.getLatestFile() if not latest: continue for f in files: if f.path != latest.path: f.moveDupe() Print.info('removing empty directories') Nsps.removeEmptyDir('.', False) Nsps.save()
def title(self): if not self.titleId: raise IOError('NSP no titleId set') if self.titleId in Titles.keys(): return Titles.get(self.titleId) t = Title.Title() t.setId(self.titleId) Titles.data()[self.titleId] = t return t
def refreshRegions(): for region in Config.regionLanguages(): for language in Config.regionLanguages()[region]: for i in Titles.data(region, language): regionTitle = Titles.data(region, language)[i] if regionTitle.id: title = Titles.get(regionTitle.id, None, None) if not hasattr(title, 'regions') or not title.regions: title.regions = [] if not hasattr(title, 'languages') or not title.languages: title.languages = [] if not region in title.regions: title.regions.append(region) if not language in title.languages: title.languages.append(language) Titles.save()
def updateVersions(force=True): initTitles() initFiles() i = 0 for k, t in tqdm(Titles.items()): if force or t.version is None: if t.isActive(): v = t.lastestVersion(True) Print.info("%s[%s] v = %s" % (str(t.name), str(t.id), str(v))) for t in list(Titles.data().values()): if not t.isUpdate and not t.isDLC and t.updateId and t.updateId and not Titles.contains( t.updateId): u = Title.Title() u.setId(t.updateId) if u.lastestVersion(): Titles.set(t.updateId, u) Print.info("%s[%s] FOUND" % (str(t.name), str(u.id))) Titles.save()
def scrapeShogunUnnamed(): initTitles() initFiles() result = {} for k, t in Titles.data().items(): if not t.isDLC: continue if not t.name and t.baseId != '0100069000078000': result[t.baseId] = True if not Config.dryRun: for id, j in tqdm(result.items()): try: for region, languages in Config.regionLanguages().items(): for language in languages: t = Titles.getTitleId(id, region, language) if t: s = cdn.Shogun.scrapeTitle(int(t.nsuId), region=region, language=language, force=False) #print(json.dumps(s.__dict__)) except: pass for region, languages in Config.regionLanguages().items(): for language in languages: Titles.saveRegion(region, language) Titles.save() else: print(result)
def organize(): initTitles() initFiles() # scan() Print.info('organizing') # for k, f in Nsps.files.items(): #print('moving ' + f.path) #Print.info(str(f.hasValidTicket) +' = ' + f.path) # f.move() for id, t in Titles.data().items(): if not t.isActive(True): continue files = {} for f in t.getFiles(): ext = f.path[-4:] if ext not in files: files[ext] = [] files[ext].append(f) hasNsp = False if '.nsp' in files and len(files['.nsp']) > 0: latest = t.getLatestNsp() if latest: for f in files['.nsp']: if f.path != latest.path: f.moveDupe() hasNsp = True latest.move() if '.nsz' in files and len(files['.nsz']) > 0: latest = t.getLatestNsz() if latest: for f in files['.nsz']: if f.path != latest.path: f.moveDupe() hasNsp = True latest.move() if '.nsx' in files and len(files['.nsx']) > 0: latest = t.getLatestNsx() if latest: for f in files['.nsx']: if f.path != latest.path: f.moveDupe() if hasNsp: latest.moveDupe() else: latest.move() if '.xci' in files and len(files['.xci']) > 0: latest = t.getLatestXci() if latest: for f in files['.xci']: if f.path != latest.path: f.moveDupe() latest.move() Print.info('removing empty directories') Nsps.removeEmptyDir('.', False) Nsps.save()