2021-03-09 05:20:28 +13:00
|
|
|
import os
|
2022-07-27 02:41:23 +12:00
|
|
|
from typing import Union, List
|
2021-03-09 05:20:28 +13:00
|
|
|
|
2021-10-25 08:23:31 +13:00
|
|
|
from legendary.core import LegendaryCore
|
2021-09-30 10:22:47 +13:00
|
|
|
|
|
|
|
|
2021-10-25 08:23:31 +13:00
|
|
|
class PathSpec:
|
|
|
|
__egl_path_vars = {
|
2021-12-24 22:09:50 +13:00
|
|
|
"{appdata}": os.path.expandvars("%LOCALAPPDATA%"),
|
|
|
|
"{userdir}": os.path.expandvars("%USERPROFILE%/Documents"),
|
2021-10-25 08:23:31 +13:00
|
|
|
# '{userprofile}': os.path.expandvars('%userprofile%'), # possibly wrong
|
2021-12-24 22:09:50 +13:00
|
|
|
"{usersavedgames}": os.path.expandvars("%USERPROFILE%/Saved Games"),
|
2021-10-25 08:23:31 +13:00
|
|
|
}
|
2021-12-24 22:09:50 +13:00
|
|
|
egl_appdata: str = r"%LOCALAPPDATA%\EpicGamesLauncher\Saved\Config\Windows"
|
|
|
|
egl_programdata: str = r"%PROGRAMDATA%\Epic\EpicGamesLauncher\Data\Manifests"
|
|
|
|
wine_programdata: str = r"dosdevices/c:/ProgramData"
|
2021-10-25 08:23:31 +13:00
|
|
|
|
2021-12-24 22:09:50 +13:00
|
|
|
def __init__(self, core: LegendaryCore = None, app_name: str = "default"):
|
2021-10-25 08:23:31 +13:00
|
|
|
if core is not None:
|
2021-12-24 22:09:50 +13:00
|
|
|
self.__egl_path_vars.update({"{epicid}": core.lgd.userdata["account_id"]})
|
2021-10-25 08:23:31 +13:00
|
|
|
self.app_name = app_name
|
|
|
|
|
|
|
|
def cook(self, path: str) -> str:
|
2021-12-24 22:09:50 +13:00
|
|
|
cooked_path = [self.__egl_path_vars.get(p.lower(), p) for p in path.split("/")]
|
2021-10-25 08:23:31 +13:00
|
|
|
return os.path.join(*cooked_path)
|
|
|
|
|
|
|
|
@property
|
|
|
|
def wine_egl_programdata(self):
|
2022-07-24 10:06:35 +12:00
|
|
|
return self.egl_programdata.replace("\\", "/").replace("%PROGRAMDATA%", self.wine_programdata)
|
2021-10-25 08:23:31 +13:00
|
|
|
|
|
|
|
def wine_egl_prefixes(self, results: int = 0) -> Union[List[str], str]:
|
|
|
|
possible_prefixes = [
|
|
|
|
os.path.expanduser("~/.wine"),
|
|
|
|
os.path.expanduser("~/Games/epic-games-store"),
|
|
|
|
]
|
|
|
|
prefixes = []
|
|
|
|
for prefix in possible_prefixes:
|
|
|
|
if os.path.exists(os.path.join(prefix, self.wine_egl_programdata)):
|
|
|
|
prefixes.append(prefix)
|
|
|
|
if not prefixes:
|
|
|
|
return str()
|
|
|
|
if not results:
|
|
|
|
return prefixes
|
|
|
|
elif results == 1:
|
|
|
|
return prefixes[0]
|
|
|
|
else:
|
|
|
|
return prefixes[:results]
|