def scanFsFiles(self): d = findGamesavesDir() if not d: return for f in glob(os.path.join(d, '*.fs')): self.insertFsFile(f) self.filteredGames = self.allGames[:]
def selectUnsupportedSavestate(self): if not self.controller.fba: self.onStatusMessage( 'ggpofba is not set, cannot locate unsupported_ggpo.fs') return d = findGamesavesDir() if not d or not os.path.isdir(d): self.onStatusMessage('Unsupported Savestates Directory is not set') return savestatesDialog = SavestatesDialog() if savestatesDialog.exec_(): fname = savestatesDialog.fsfile dst = os.path.join(os.path.dirname(self.controller.fba), 'savestates', 'unsupported_ggpo.fs') shutil.copy(fname, dst) basefile = os.path.basename(fname) basename = os.path.splitext(basefile)[0] self.onStatusMessage( 'Saved {} as unsupported_ggpo.fs'.format(basefile)) if self.controller.channel == 'unsupported': self.controller.setUnsupportedRom('') desc = '' if basename in allgames: desc = ' {}'.format( allgames[basename][FBA_GAMEDB_DESCRIPTION]) self.controller.sendChat("* {} switches to [{}]{}".format( self.controller.username, basename, desc)) self.controller.setUnsupportedRom(basename)
def download(self): d = findGamesavesDir() if not d: self.sigStatusMessage.emit('Can\'t find Savestates Directory') self.sigFinished.emit(self.added, self.updated, self.nochange) return localJsonDigest = readLocalJsonDigest() # noinspection PyBroadException try: # gotta love CPython's GIL, yield thread time.sleep(0.05) response = urllib.request.urlopen(self.SAVESTATES_INDEX_URL, timeout=3) games = json.load(response) for filename, shahash in games.items(): if re.search(r'[^ .a-zA-Z0-9_-]', filename): logdebug().error( "Filename {} looks suspicious, ignoring".format( filename)) continue if filename in localJsonDigest: if localJsonDigest[filename] == shahash: self.nochange += 1 continue else: self.updated += 1 else: self.added += 1 if not self.checkonly: time.sleep(0.05) localfile = os.path.join(d, filename) fileurl = self.SAVESTATES_GITHUB_BASE_URL + urllib.parse.quote( filename) urllib.request.urlretrieve(fileurl, localfile) self.sigStatusMessage.emit( 'Downloaded {}'.format(localfile)) # remove config/games/<game>.fs gamefs = os.path.abspath( os.path.join(d, "..", "config", "games", filename.replace("_ggpo.fs", ".fs"))) if os.path.isfile(gamefs): try: os.remove(gamefs) except: pass if not self.checkonly: if not self.added and not self.updated: #self.sigStatusMessage.emit('All files are up to date') pass else: writeLocalJsonDigest() self.sigStatusMessage.emit( '{} files are current, added {}, updated {}'.format( self.nochange, self.added, self.updated)) except Exception as ex: logdebug().error(str(ex)) self.sigFinished.emit(self.added, self.updated, self.nochange)
def checkUnsupportedRom(self): if self.fba: d = findGamesavesDir() if d: unsupported = os.path.join(os.path.dirname(self.fba), 'savestates', 'unsupported_ggpo.fs') if os.path.isfile(unsupported): unsupported = sha256digest(unsupported) localJsonDigest = readLocalJsonDigest() for k, v in localJsonDigest.items(): if v == unsupported: self.unsupportedRom = os.path.splitext(k)[0] break
def readLocalJsonDigest(): localJsonDigest = {} d = findGamesavesDir() if d: localjson = os.path.join(d, SyncWorker.JSON_INDEX_FILENAME) if os.path.isfile(localjson): # noinspection PyBroadException try: localJsonDigest = json.load(file(localjson).read()) except: pass if not localJsonDigest: return writeLocalJsonDigest() return localJsonDigest
def download(self): d = findGamesavesDir() if not d: self.sigStatusMessage.emit('Can\'t find Savestates Directory') self.sigFinished.emit(self.added, self.updated, self.nochange) return localJsonDigest = readLocalJsonDigest() # noinspection PyBroadException try: # gotta love CPython's GIL, yield thread time.sleep(0.05) response = urllib2.urlopen(self.SAVESTATES_INDEX_URL, timeout=3) games = json.load(response) for filename, shahash in games.items(): if re.search(r'[^ .a-zA-Z0-9_-]', filename): logdebug().error("Filename {} looks suspicious, ignoring".format(filename)) continue if filename in localJsonDigest: if localJsonDigest[filename] == shahash: self.nochange += 1 continue else: self.updated += 1 else: self.added += 1 if not self.checkonly: time.sleep(0.05) localfile = os.path.join(d, filename) fileurl = self.SAVESTATES_GITHUB_BASE_URL + urllib.quote(filename) urllib.urlretrieve(fileurl, localfile) self.sigStatusMessage.emit('Downloaded {}'.format(localfile)) # remove config/games/<game>.fs gamefs=os.path.abspath(os.path.join(d,"..","config","games",filename.replace("_ggpo.fs",".fs"))) if os.path.isfile(gamefs): try: os.remove(gamefs) except: pass if not self.checkonly: if not self.added and not self.updated: #self.sigStatusMessage.emit('All files are up to date') pass else: writeLocalJsonDigest() self.sigStatusMessage.emit( '{} files are current, added {}, updated {}'.format( self.nochange, self.added, self.updated)) except Exception, ex: logdebug().error(str(ex))
def writeLocalJsonDigest(): localJsonDigest = {} d = findGamesavesDir() if d: localjson = os.path.join(d, SyncWorker.JSON_INDEX_FILENAME) for filename in glob.glob(os.path.join(d, '*.fs')): localJsonDigest[os.path.basename(filename)] = sha256digest(filename) # noinspection PyBroadException try: f = open(localjson, 'w') f.write(json.dumps(localJsonDigest, sort_keys=True, indent=2)) except: pass return localJsonDigest
def writeLocalJsonDigest(): localJsonDigest = {} d = findGamesavesDir() if d: localjson = os.path.join(d, SyncWorker.JSON_INDEX_FILENAME) for filename in glob.glob(os.path.join(d, '*.fs')): localJsonDigest[os.path.basename(filename)] = sha256digest( filename) # noinspection PyBroadException try: f = open(localjson, 'w') f.write(json.dumps(localJsonDigest, sort_keys=True, indent=2)) except: pass return localJsonDigest
def selectUnsupportedSavestate(self): if not self.controller.fba: self.onStatusMessage('ggpofba is not set, cannot locate unsupported_ggpo.fs') return d = findGamesavesDir() if not d or not os.path.isdir(d): self.onStatusMessage('Unsupported Savestates Directory is not set') return savestatesDialog = SavestatesDialog() if savestatesDialog.exec_(): fname = savestatesDialog.fsfile dst = os.path.join(os.path.dirname(self.controller.fba), 'savestates', 'unsupported_ggpo.fs') shutil.copy(fname, dst) basefile = os.path.basename(fname) basename = os.path.splitext(basefile)[0] self.onStatusMessage('Saved {} as unsupported_ggpo.fs'.format(basefile)) if self.controller.channel == 'unsupported': self.controller.setUnsupportedRom('') desc = '' if basename in allgames: desc = ' {}'.format(allgames[basename][FBA_GAMEDB_DESCRIPTION]) self.controller.sendChat("* {} switches to [{}]{}".format(self.controller.username, basename, desc)) self.controller.setUnsupportedRom(basename)