diff options
| -rw-r--r-- | gamechestcli/gamechest/cliactions/run.py | 30 | ||||
| -rw-r--r-- | gamechestcli/gamechest/gamedb.py | 18 | 
2 files changed, 35 insertions, 13 deletions
diff --git a/gamechestcli/gamechest/cliactions/run.py b/gamechestcli/gamechest/cliactions/run.py index d6791d0..cf5ac43 100644 --- a/gamechestcli/gamechest/cliactions/run.py +++ b/gamechestcli/gamechest/cliactions/run.py @@ -1,18 +1,46 @@  import subprocess  import sys +from pathlib import Path +from ..gameconfig import config  from ..gamedb import GameDB  from ..statusdb import StatusDB  def run_game(game_db, profile_id, game_info):      command = game_db.get_game_command(profile_id, game_info['id']) +    profile_dir = Path(config.get_profile_dir(profile_id)) +    profile_game_dir = profile_dir / game_info['id'] +    game_dir = config.get_games_install_basedir() / game_info['id'] +    # note: glob('*/') globs regular files too, thus I filter on is_dir. +    game_dir = list(item +                    for item in game_dir.glob('*') if item.is_dir())[-1] +    game_dir = Path(game_dir)      #tools_bin_path = config.get_games_saves_tools_bin_path()      #new_env = dict(os.environ)      #new_env['PATH'] = f'{tools_bin_path}:{new_env["PATH"]}'      # path to mod/run scripts are already prepended by get_game_command, no      # need to modify the path environment variable. -    subprocess.run(command) +    profile_lockdir = profile_dir / '.lock' +    try: +        profile_lockdir.mkdir(parents=True, exist_ok=False) +    except FileExistsError: +        print('ERROR: profile is already locked, {profile_lockdir}', +              file=sys.stderr) +        sys.exit(1) +    try: +        subprocess.run( +            command, +            env={ +                **os.environ, +                'PROFILE_DIR': str(profile_game_dir), +                'GAME_DIR': str(game_dir), +                'GAME_ID': game_info['id'], +            }, +        ) +    finally: +        profile_lockdir.rmdir() +        print('INFO: {profile_lockdir} removed')  def run(game_id, profile_id): diff --git a/gamechestcli/gamechest/gamedb.py b/gamechestcli/gamechest/gamedb.py index bec90d3..d372089 100644 --- a/gamechestcli/gamechest/gamedb.py +++ b/gamechestcli/gamechest/gamedb.py @@ -27,24 +27,18 @@ class GameDB:      def get_game_command(self, profile_id, game_id=None):          game_info = self.get_game_info(game_id)          game_mods = game_info.get('mods', []) -        game_mods += ['locked-run-profiledir'] - -        game_dir = config.get_games_install_basedir() / game_info['id'] -        # note: glob('*/') globs regular files too, thus I filter on is_dir. -        game_dir = list(item -                        for item in game_dir.glob('*') if item.is_dir())[-1] - +        #game_mods += ['locked-run-profiledir'] +        #game_dir = config.get_games_install_basedir() / game_info['id'] +        ## note: glob('*/') globs regular files too, thus I filter on is_dir. +        #game_dir = list(item +        #                for item in game_dir.glob('*') if item.is_dir())[-1]          tools_bin_path = config.get_games_saves_tools_bin_path() -        profile_dir = config.get_profile_dir(profile_id) - +        #profile_dir = config.get_profile_dir(profile_id)          command = [              *[f'{tools_bin_path}/mod-{item}' for item in game_mods], -            profile_dir, -            game_dir,              *[item if index > 0 else f'{tools_bin_path}/runners/{item}'                for index, item in enumerate(game_info['command'])],          ] -          return command      def get_ids(self):  | 
