[cli] Fix EGL Local AppData resolution with newer WINE versions

Closes #332
This commit is contained in:
derrod 2021-09-03 19:00:56 +02:00
parent f3991d3ee2
commit d6e9c5ef46

View file

@ -25,6 +25,7 @@ from legendary.utils.cli import get_boolean_choice, sdl_prompt
from legendary.utils.custom_parser import AliasedSubParsersAction
from legendary.utils.lfs import validate_files
from legendary.utils.selective_dl import get_sdl_appname
from legendary.utils.wine_helpers import read_registry, get_shell_folders
# todo custom formatter for cli logger (clean info, highlighted error/warning)
logging.basicConfig(
@ -69,34 +70,33 @@ class LegendaryCLI:
if args.import_egs_auth:
# get appdata path on Linux
if not self.core.egl.appdata_path:
wine_pfx_users = None
lutris_wine_users = os.path.expanduser('~/Games/epic-games-store/drive_c/users')
if os.path.exists(lutris_wine_users):
logger.info(f'Found Lutris EGL WINE prefix at "{lutris_wine_users}"')
egl_wine_pfx = None
lutris_wine_pfx = os.path.expanduser('~/Games/epic-games-store')
if os.path.exists(lutris_wine_pfx):
logger.info(f'Found Lutris EGL WINE prefix at "{lutris_wine_pfx}"')
if args.yes or get_boolean_choice('Do you want to use the Lutris install?'):
wine_pfx_users = lutris_wine_users
egl_wine_pfx = lutris_wine_pfx
if not wine_pfx_users:
if not egl_wine_pfx:
logger.info('Please enter the path to the Wine prefix that has EGL installed')
wine_pfx = input('Path [empty input to quit]: ').strip()
if not wine_pfx:
print('Empty input, quitting...')
exit(0)
if not os.path.exists(wine_pfx):
if not os.path.exists(wine_pfx) and os.path.isdir(wine_pfx):
print('Path is invalid (does not exist)!')
exit(1)
wine_pfx_users = os.path.join(wine_pfx, 'drive_c/users')
# todo instead of getuser() this should read from the user.reg in the WINE prefix
appdata_dir = os.path.join(wine_pfx_users, getuser(),
'Local Settings/Application Data/EpicGamesLauncher',
'Saved/Config/Windows')
if not os.path.exists(appdata_dir):
logger.error(f'Wine prefix does not have EGL appdata path at "{appdata_dir}"')
wine_folders = get_shell_folders(read_registry(egl_wine_pfx), egl_wine_pfx)
egl_appdata = os.path.realpath(os.path.join(wine_folders['Local AppData'],
'EpicGamesLauncher', 'Saved',
'Config', 'Windows'))
if not os.path.exists(egl_appdata):
logger.error(f'Wine prefix does not have EGL appdata path at "{egl_appdata}"')
exit(0)
else:
logger.info(f'Using EGL appdata path at "{appdata_dir}"')
self.core.egl.appdata_path = appdata_dir
logger.info(f'Using EGL appdata path at "{egl_appdata}"')
self.core.egl.appdata_path = egl_appdata
logger.info('Importing login session from the Epic Launcher...')
try: