Initial commit
This commit is contained in:
143
csvfile.py
Normal file
143
csvfile.py
Normal file
@@ -0,0 +1,143 @@
|
||||
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
|
||||
Reference in New Issue
Block a user