From e88a369febecfad60c567535709ca45c556be984 Mon Sep 17 00:00:00 2001 From: derrod Date: Sat, 16 May 2020 11:01:13 +0200 Subject: [PATCH] [core] Honor existing installation directory This prevents an issue where changing the base path later on would cause an update to be written to the wrong directory (or cause crashes). --- legendary/core.py | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/legendary/core.py b/legendary/core.py index cef7d4b..c723000 100644 --- a/legendary/core.py +++ b/legendary/core.py @@ -552,23 +552,28 @@ class LegendaryCore: self.lgd.save_manifest(game.app_name, new_manifest_data, version=new_manifest.meta.build_version) - if not game_folder: - if game.is_dlc: - game_folder = base_game.metadata.get('customAttributes', {}).\ - get('FolderName', {}).get('value', base_game.app_name) - else: - game_folder = game.metadata.get('customAttributes', {}).\ - get('FolderName', {}).get('value', game.app_name) + # reuse existing installation's directory + if igame := self.get_installed_game(base_game.app_name if base_game else game.app_name): + install_path = igame.install_path + else: + if not game_folder: + if game.is_dlc: + game_folder = base_game.metadata.get('customAttributes', {}).\ + get('FolderName', {}).get('value', base_game.app_name) + else: + game_folder = game.metadata.get('customAttributes', {}).\ + get('FolderName', {}).get('value', game.app_name) - if not base_path: - base_path = self.get_default_install_dir() + if not base_path: + base_path = self.get_default_install_dir() - # make sure base directory actually exists (but do not create game dir) - if not os.path.exists(base_path): - self.log.info(f'"{base_path}" does not exist, creating...') - os.makedirs(base_path) + # make sure base directory actually exists (but do not create game dir) + if not os.path.exists(base_path): + self.log.info(f'"{base_path}" does not exist, creating...') + os.makedirs(base_path) + + install_path = os.path.join(base_path, game_folder) - install_path = os.path.join(base_path, game_folder) self.log.info(f'Install path: {install_path}') if not force: