From a59107e5033b1a6c43f5faa9ef3c1c4751f1fb36 Mon Sep 17 00:00:00 2001 From: derrod Date: Fri, 24 Apr 2020 06:26:45 +0200 Subject: [PATCH] [core/lfs] Load correct old manifest file after aborted installation If a user were to start and then abort an installation previously we would have loaded the downloaded new manifest, rather than the one of the installed version. By explicitly setting the version we can avoid this. --- legendary/core.py | 3 ++- legendary/lfs/lgndry.py | 11 +++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/legendary/core.py b/legendary/core.py index 70d487b..f6b591b 100644 --- a/legendary/core.py +++ b/legendary/core.py @@ -312,7 +312,8 @@ class LegendaryCore: old_manifest_data = f.read() old_manifest = self.load_manfiest(old_manifest_data) elif not disable_patching and not force and self.is_installed(game.app_name): - if old_bytes := self.lgd.get_manifest(game.app_name): + igame = self.get_installed_game(game.app_name) + if old_bytes := self.lgd.get_manifest(game.app_name, igame.version): old_manifest = self.load_manfiest(old_bytes) base_urls = list(game.base_urls) # copy list for manipulation diff --git a/legendary/lfs/lgndry.py b/legendary/lfs/lgndry.py index 8a3a8f3..c49c59b 100644 --- a/legendary/lfs/lgndry.py +++ b/legendary/lfs/lgndry.py @@ -116,8 +116,15 @@ class LGDLFS: open(os.path.join(self.path, 'assets.json'), 'w'), indent=2, sort_keys=True) - def get_manifest(self, app_name): - manifest_file = os.path.join(self.path, 'manifests', f'{app_name}.manifest') + def get_manifest(self, app_name, version=''): + if not version: + manifest_file = os.path.join(self.path, 'manifests', f'{app_name}.manifest') + else: + # if a version is specified load it from the versioned directory + fname = clean_filename(f'{app_name}_{version}') + manifest_file = os.path.join(self.path, 'manifests', 'old', + f'{fname}.manifest') + if os.path.exists(manifest_file): return open(manifest_file, 'rb').read() else: