1
0
Fork 0
mirror of synced 2024-05-19 12:02:54 +12:00
Rare/rare/models/pathspec.py
loathingKernel 582b83c12b WIP
2024-02-12 21:52:08 +02:00

71 lines
2.2 KiB
Python

import os
from typing import Union, List, LiteralString
from legendary.core import LegendaryCore
from legendary.models.game import InstalledGame
from rare.utils.config_helper import get_prefixes
class PathSpec:
@staticmethod
def egl_appdata() -> str:
return r"%LOCALAPPDATA%\EpicGamesLauncher\Saved\Config\Windows"
@staticmethod
def egl_programdata() -> str:
return r"%PROGRAMDATA%\Epic\EpicGamesLauncher\Data\Manifests"
@staticmethod
def wine_programdata() -> str:
return r"ProgramData"
@staticmethod
def wine_egl_programdata() -> str:
return PathSpec.egl_programdata(
).replace(
"\\", "/"
).replace(
"%PROGRAMDATA%", PathSpec.wine_programdata()
)
@staticmethod
def prefix_egl_programdata(prefix: str) -> str:
return os.path.join(prefix, "dosdevices/c:", PathSpec.wine_egl_programdata())
@staticmethod
def wine_egl_prefixes(results: int = 0) -> Union[List[str], str]:
possible_prefixes = get_prefixes()
prefixes = [
prefix
for prefix, _ in possible_prefixes
if os.path.exists(os.path.join(prefix, PathSpec.wine_egl_programdata()))
]
if not prefixes:
return ""
if not results:
return prefixes
elif results == 1:
return prefixes[0]
else:
return prefixes[:results]
def __init__(self, core: LegendaryCore = None, igame: InstalledGame = None):
self.__egl_path_vars = {
"{appdata}": os.path.expandvars("%LOCALAPPDATA%"),
"{userdir}": os.path.expandvars("%USERPROFILE%/Documents"),
"{userprofile}": os.path.expandvars("%userprofile%"), # possibly wrong
"{usersavedgames}": os.path.expandvars("%USERPROFILE%/Saved Games"),
}
if core is not None:
self.__egl_path_vars["{epicid}"] = core.lgd.userdata["account_id"]
if igame is not None:
self.__egl_path_vars["{installdir}"] = igame.install_path
def resolve_egl_path_vars(self, path: str) -> Union[LiteralString, str, bytes]:
cooked_path = (self.__egl_path_vars.get(p.lower(), p) for p in path.split("/"))
return os.path.join(*cooked_path)