Files
mfe9/config.py
Rich e446f9cce4 .
2023-12-07 15:22:21 +00:00

158 lines
4.0 KiB
Python

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