import csv import os import zipfile class csvROM(object): ''' One CSV ROM ''' def __init__(self): self.name = '' self.cloneof = None self.description = '' self.year = '' self.manufacturer = '' self.status = '' self.category = '' self.snap = None def __str__(self): return self.description def __repr__(self): return '%s("%s", "%s", "%s", "%s", "%s", "%s", "%s")' % ( self.__class__.__name__, self.name, self.cloneof, self.description, self.year, self.manufacturer, self.status, self.category) class csvROMs(object): ''' A Collection of CSV Roms ''' def __init__(self, data_dir, cfg): self.all_roms = [] self.roms = [] self.all_categories = [] self.categories = [] self.catdict = {} self.len = 0 self.data_dir = data_dir self.cfg = cfg self.emulator_dir = os.path.split(cfg['EXE'])[0] self.parse() self.filter() self.snapdir = cfg['SnapDir'] if os.path.isfile(os.path.join(self.snapdir, 'snap.zip')): self.snapfile = zipfile.ZipFile( os.path.join(self.snapdir, "snap.zip")) else: self.snapfile = None def __len__(self): return self.len def __getitem__(self, item): return self.roms[item] def filter(self): self.roms = [] for rom in self.all_roms: if self.cfg["Category"] == "All Games" or self.cfg["Category"] == rom.category: self.roms.append(rom) if self.cfg["Sort"] == "Name Asc": self.roms.sort(key=lambda x: x.description.lower(), reverse=False) elif self.cfg["Sort"] == "Name Dec": self.roms.sort(key=lambda x: x.description.lower(), reverse=True) elif self.cfg["Sort"] == "Year Asc": self.roms.sort(key=lambda x: x.year.lower(), reverse=False) elif self.cfg["Sort"] == "Year Dec": self.roms.sort(key=lambda x: x.year.lower(), reverse=True) self.len = len(self.roms) self.categories = self.all_categories def parse(self): ''' Parse csv file ''' if os.path.isfile(self.cfg['CSVFile']): with open(self.cfg['CSVFile']) as f: reader = csv.DictReader(f) for game in reader: rom = csvROM() rom.name = game['romname'] rom.description = game[ 'description'] if 'description' in game.keys( ) else game['romname'] rom.snap = game['snap'] if 'snap' in game.keys() else game[ 'romname'] rom.year = game[ 'year'] if 'year' in game.keys() else 'Unknown Year' rom.category = game[ 'category'] if 'category' in game.keys() else 'Unknown' self.all_roms.append(rom) self.all_categories.insert(0, 'All Games') self.all_categories.append('Unknown') return True def get_snap(self, rom, type_of_image): # pylint : disable=R0912 data = None image_file = None image_dir = None if type_of_image == 'snap': image_dir = self.snapdir image_file = self.snapfile if image_file: try: data = image_file.read(rom.name + ".png") except: try: data = image_file.read(rom.cloneof + '.png') except: data = None elif image_dir: fn = os.path.join(image_dir, rom.name + '.png') if os.path.isfile(fn): with open(fn, 'rb') as f: data = f.read() elif rom.cloneof: fn = os.path.join(image_dir, rom.cloneof + '.png') if os.path.isfile(fn): with open(fn, 'rb') as f: data = f.read() else: data = None else: data = None else: data = None return data def get_info(self, rom): return def get_history(self, rom): return