import os from appdirs import user_data_dir from configobj import ConfigObj, flatten_errors, Section from validate import Validator # from utils import get_pygame_keydict, get_keys CFGSPEC = """ResolutionX = integer(default=1024) ResolutionY = integer(default=768) FullScreen = boolean(default=False) Font = string(default='microsoftsansserif') FontSize = integer(default=13) QuitKeyPresses = integer(min=1,default=3) ScanLines = boolean(default=True) Key_Up = list(default=list('K_UP')) Key_Down = list(default=list('K_DOWN')) Key_PgUp = list(default=list('K_LEFT','K_PAGEUP')) Key_PgDn = list(default=list('K_RIGHT','K_PAGEDOWN')) Key_Home = list(default=list('K_HOME')) Key_End = list(default=list('K_END')) Key_Select = list(default=list('K_RETURN','K_1')) Key_GameInfo = list(default=list('K_5')) Key_GameHistoryxP = list(default=list('K_6')) Key_Popup = list(default=list('K_2')) Key_ShowArtwork = list(default=list()) AlwaysChangeSnap = boolean(default=True) Emulator = string() FPS = integer(default=60) [__many__] EXE = string() Version = string(default=None) ShowClones = boolean(default=True) Category = string(default='All Games') GameAtTop = integer(min=0,default=0) CurrentGame = integer(min=0,default=0) EmulatorType = option('MAME','MESS','CSV',default='MAME') StatusFilter = list(default=list()) Sort = option('Name Asc','Name Dec','Year Asc','Year Dec',default='Name Asc') SnapDir = string(default=None) CSVFile = string(default=None) ArtworkDirs = list(default=list()) ShowVideoSnaps = boolean(default=True) HideMature = boolean(default=True) """ appname = "MFE6" appauthor = "RMJ" debug = True datadir = user_data_dir(appname, appauthor) if debug: datadir = os.getcwd() if not os.path.isdir(datadir): os.makedirs(datadir) spec = CFGSPEC.split("\n") cfg = ConfigObj(os.path.join(datadir, "mfe.ini"), configspec=spec, encoding="UTF8") cfg.write() validator = Validator() result = cfg.validate(validator, copy=True, preserve_errors=True) errored = False for entry in flatten_errors(cfg, result): section_list, key, error = entry if key is not None: section_list.append(key) else: section_list.append("[missing section]") section_string = ", ".join(section_list) if error is False: error = "Missing value or section." print(section_string, " = ", error) errored = True if errored: print("Error in INI file") exit() cfg.write() cfg["datadir"] = datadir if not os.path.isfile(os.path.join(datadir, "mame_exclude.txt")): from exclude import MAME_EXCLUDE with open(os.path.join(datadir, "mame_exclude.txt"), "wt") as f: f.write(MAME_EXCLUDE) # import gfx_pygame # keys = gfx_pygame.get_keydict() # get_keys = gfx_pygame.get_keys # cfg["KeyUp"] = get_keys(keys, cfg["Key_Up"]) # cfg["KeyDown"] = get_keys(keys, cfg["Key_Down"]) # cfg["KeyPgUp"] = get_keys(keys, cfg["Key_PgUp"]) # cfg["KeyPgDn"] = get_keys(keys, cfg["Key_PgDn"]) # cfg["KeyHome"] = get_keys(keys, cfg["Key_Home"]) # cfg["KeyEnd"] = get_keys(keys, cfg["Key_End"]) # cfg["KeySelect"] = get_keys(keys, cfg["Key_Select"]) # cfg["KeyGameInfo"] = get_keys(keys, cfg["Key_GameInfo"]) # cfg["KeyGameHistory"] = get_keys(keys, cfg["Key_GameHistory"]) # cfg["KeyPopup"] = get_keys(keys, cfg["Key_Popup"]) # cfg["KeyShowArtwork"] = get_keys(keys, cfg["Key_ShowArtwork"]) def config_write(): Exclude = [ "KeyUp", "KeyDown", "KeyPgUp", "KeyPgDn", "KeySelect", "KeyGameInfo", "KeyGameHistory", "KeyPopup", "KeyHome", "KeyEnd", "KeyShowArtwork", "datadir", ] t = {} for item in Exclude: t[item] = cfg[item] del cfg[item] cfg.write() for item in t: cfg[item] = t[item] # def get_emu(option=None): # if option: # r = cfg[cfg['Emulator']][option] # else: # r = cfg[cfg['Emulator']] # return r # def set_emu(option, data): # cfg[cfg['Emulator']][option] = data def get_emulators(): r = [] for k in cfg.keys(): if isinstance(cfg[k], Section): r.append(k) return r