import os import sys g_pp = None def program_path() -> str: global g_pp if g_pp == None: g_pp = os.path.abspath(os.path.split(sys.argv[0])[0]) return g_pp def exists(vault: str, path: str) -> bool: fp = os.path.join(program_path(), vault, path) return os.path.exists(fp) def fd_open(vault: str, path: str) -> object: fp = os.path.join(program_path(), vault, path) return open(fp, 'r') def fd_write(vault: str, path: str) -> object: fp = os.path.join(program_path(), vault, path) os.makedirs(os.path.join(program_path(), vault), exist_ok=True) return open(fp, 'w') g_data = {} class ModInfo(object): def __init__(self: object, modname: str): self.name = modname self.modinfo = None class ModInfoDir(ModInfo): def __init__(self: object, modname: str): super().__init__(modname) def path(self: object, path: str) -> str: return os.path.join(self.name, path) def exists(self: object, path: str) -> object: return exists('data', self.path(path)) def fd_open(self: object, path: str) -> object: return fd_open('data', self.path(path)) def has_modinfo(self: object) -> bool: return exists('data', self.path('modinfo.json')) def read_modinfo(self: object) -> None: inffile = self.fd_open('data', self.path('modinfo.json')) self.modinfo = json.load(inffile) def load_mods() -> None: global g_data g_data = {} full_modlist = {} for mod in os.listdir(os.path.join(program_path(), 'data')): mn, me = os.path.splitext(mod) if not mn in full_modlist: full_modlist[mn] = {} if me.lower() == 'zip': # handle zip mods here somehow # full_modlist[mn][me] = mod pass elif me == '' or os.path.isdir(os.path.join(program_path(), 'data', mn)): moddata = ModInfoDir() if moddata.has_modinfo(): full_modlist[mn][me] = moddata modlist = {} for mn in full_modlist.keys(): if '' in full_modlist[mn]: modlist[mn] = full_modlist[mn]['']