mirror of
https://github.com/derrod/legendary.git
synced 2024-12-22 17:55:27 +00:00
[cli/core/models] Add config option for pre-launch command
This commit is contained in:
parent
4ab0c99a0f
commit
a25de242d9
|
@ -740,6 +740,10 @@ override_exe = relative/path/to/file.exe
|
||||||
disable_sdl = true
|
disable_sdl = true
|
||||||
|
|
||||||
[AppName3]
|
[AppName3]
|
||||||
|
; Command to run before launching the gmae
|
||||||
|
pre_launch_command = /path/to/script.sh
|
||||||
|
; Whether or not to wait for command to finish running
|
||||||
|
pre_launch_wait = false
|
||||||
; (macOS) override crossover settings
|
; (macOS) override crossover settings
|
||||||
crossover_app = /Applications/CrossOver Nightly.app
|
crossover_app = /Applications/CrossOver Nightly.app
|
||||||
crossover_bottle = SomethingElse
|
crossover_bottle = SomethingElse
|
||||||
|
|
|
@ -658,6 +658,8 @@ class LegendaryCLI:
|
||||||
|
|
||||||
if args.dry_run:
|
if args.dry_run:
|
||||||
logger.info(f'Not Launching {app_name} (dry run)')
|
logger.info(f'Not Launching {app_name} (dry run)')
|
||||||
|
if params.pre_launch_command:
|
||||||
|
logger.info(f'Pre-Launch Command: {params.pre_launch_command}')
|
||||||
logger.info(f'Launch parameters: {shlex.join(full_params)}')
|
logger.info(f'Launch parameters: {shlex.join(full_params)}')
|
||||||
logger.info(f'Working directory: {params.working_directory}')
|
logger.info(f'Working directory: {params.working_directory}')
|
||||||
if params.environment:
|
if params.environment:
|
||||||
|
@ -665,6 +667,16 @@ class LegendaryCLI:
|
||||||
f'{k}={v}' for k, v in params.environment.items())))
|
f'{k}={v}' for k, v in params.environment.items())))
|
||||||
else:
|
else:
|
||||||
logger.info(f'Launching {app_name}...')
|
logger.info(f'Launching {app_name}...')
|
||||||
|
if params.pre_launch_command:
|
||||||
|
try:
|
||||||
|
logger.debug(f'Running pre-launch command: {params.pre_launch_command}')
|
||||||
|
p = subprocess.Popen(shlex.split(params.pre_launch_command), env=full_env)
|
||||||
|
if params.pre_launch_wait:
|
||||||
|
logger.debug('Waiting for pre-launch command to finish...')
|
||||||
|
p.wait()
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f'Pre-launch command failed: {e!r}')
|
||||||
|
|
||||||
logger.debug(f'Launch parameters: {shlex.join(full_params)}')
|
logger.debug(f'Launch parameters: {shlex.join(full_params)}')
|
||||||
logger.debug(f'Working directory: {params.working_directory}')
|
logger.debug(f'Working directory: {params.working_directory}')
|
||||||
if params.environment:
|
if params.environment:
|
||||||
|
@ -695,9 +707,23 @@ class LegendaryCLI:
|
||||||
return self._print_json(dict(uri=origin_uri), args.pretty_json)
|
return self._print_json(dict(uri=origin_uri), args.pretty_json)
|
||||||
|
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
|
cmd, wait_for_exit = self.core.get_pre_launch_command(args.app_name)
|
||||||
|
|
||||||
if args.dry_run:
|
if args.dry_run:
|
||||||
|
if cmd:
|
||||||
|
logger.info(f'Pre-launch command: {cmd}')
|
||||||
logger.info(f'Origin URI: {origin_uri}')
|
logger.info(f'Origin URI: {origin_uri}')
|
||||||
else:
|
else:
|
||||||
|
if cmd:
|
||||||
|
try:
|
||||||
|
logger.debug(f'Running pre-launch command: {cmd}')
|
||||||
|
p = subprocess.Popen(shlex.split(cmd))
|
||||||
|
if wait_for_exit:
|
||||||
|
logger.debug('Waiting for pre-launch command to finish...')
|
||||||
|
p.wait()
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f'Pre-launch command failed: {e!r}')
|
||||||
|
|
||||||
logger.debug(f'Opening Origin URI: {origin_uri}')
|
logger.debug(f'Opening Origin URI: {origin_uri}')
|
||||||
webbrowser.open(origin_uri)
|
webbrowser.open(origin_uri)
|
||||||
return
|
return
|
||||||
|
@ -709,6 +735,8 @@ class LegendaryCLI:
|
||||||
crossover_app=args.crossover_app)
|
crossover_app=args.crossover_app)
|
||||||
env = self.core.get_app_environment(args.app_name, wine_pfx=args.wine_pfx,
|
env = self.core.get_app_environment(args.app_name, wine_pfx=args.wine_pfx,
|
||||||
cx_bottle=args.crossover_bottle)
|
cx_bottle=args.crossover_bottle)
|
||||||
|
cmd, wait_for_exit = self.core.get_pre_launch_command(args.app_name)
|
||||||
|
|
||||||
full_env = os.environ.copy()
|
full_env = os.environ.copy()
|
||||||
full_env.update(env)
|
full_env.update(env)
|
||||||
|
|
||||||
|
@ -732,8 +760,20 @@ class LegendaryCLI:
|
||||||
|
|
||||||
command.append(origin_uri)
|
command.append(origin_uri)
|
||||||
if args.dry_run:
|
if args.dry_run:
|
||||||
|
if cmd:
|
||||||
|
logger.info(f'Pre-launch command: {cmd}')
|
||||||
logger.info(f'Origin launch command: {shlex.join(command)}')
|
logger.info(f'Origin launch command: {shlex.join(command)}')
|
||||||
else:
|
else:
|
||||||
|
if cmd:
|
||||||
|
try:
|
||||||
|
logger.debug(f'Running pre-launch command: {cmd}')
|
||||||
|
p = subprocess.Popen(shlex.split(cmd), env=full_env)
|
||||||
|
if wait_for_exit:
|
||||||
|
logger.debug('Waiting for pre-launch command to finish...')
|
||||||
|
p.wait()
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f'Pre-launch command failed: {e!r}')
|
||||||
|
|
||||||
logger.debug(f'Opening Origin URI with command: {shlex.join(command)}')
|
logger.debug(f'Opening Origin URI with command: {shlex.join(command)}')
|
||||||
subprocess.Popen(command, env=full_env)
|
subprocess.Popen(command, env=full_env)
|
||||||
|
|
||||||
|
|
|
@ -642,6 +642,19 @@ class LegendaryCore:
|
||||||
|
|
||||||
return _cmd
|
return _cmd
|
||||||
|
|
||||||
|
def get_pre_launch_command(self, app_name=''):
|
||||||
|
if app_name:
|
||||||
|
pre_launch_command = self.lgd.config.get(app_name, 'pre_launch_command', fallback=None)
|
||||||
|
pre_launch_wait = self.lgd.config.getboolean(app_name, 'pre_launch_wait', fallback=False)
|
||||||
|
|
||||||
|
if pre_launch_command:
|
||||||
|
return pre_launch_command, pre_launch_wait
|
||||||
|
|
||||||
|
# try default if no per-game override exists
|
||||||
|
pre_launch_command = self.lgd.config.get('default', 'pre_launch_command', fallback=None)
|
||||||
|
pre_launch_wait = self.lgd.config.getboolean('default', 'pre_launch_wait', fallback=False)
|
||||||
|
return pre_launch_command, pre_launch_wait
|
||||||
|
|
||||||
def get_launch_parameters(self, app_name: str, offline: bool = False,
|
def get_launch_parameters(self, app_name: str, offline: bool = False,
|
||||||
user: str = None, extra_args: list = None,
|
user: str = None, extra_args: list = None,
|
||||||
wine_bin: str = None, wine_pfx: str = None,
|
wine_bin: str = None, wine_pfx: str = None,
|
||||||
|
@ -681,6 +694,11 @@ class LegendaryCore:
|
||||||
cx_bottle=crossover_bottle, disable_wine=disable_wine)
|
cx_bottle=crossover_bottle, disable_wine=disable_wine)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
cmd, wait = self.get_pre_launch_command(app_name)
|
||||||
|
if cmd:
|
||||||
|
params.pre_launch_command = cmd
|
||||||
|
params.pre_launch_wait = wait
|
||||||
|
|
||||||
if install.launch_parameters:
|
if install.launch_parameters:
|
||||||
try:
|
try:
|
||||||
params.game_parameters.extend(shlex.split(install.launch_parameters, posix=False))
|
params.game_parameters.extend(shlex.split(install.launch_parameters, posix=False))
|
||||||
|
|
|
@ -222,3 +222,5 @@ class LaunchParameters:
|
||||||
# user and environment supplied options
|
# user and environment supplied options
|
||||||
user_parameters: list = field(default_factory=list)
|
user_parameters: list = field(default_factory=list)
|
||||||
environment: dict = field(default_factory=dict)
|
environment: dict = field(default_factory=dict)
|
||||||
|
pre_launch_command: str = ''
|
||||||
|
pre_launch_wait: bool = False
|
||||||
|
|
Loading…
Reference in a new issue