From 7dacd7ba35c1fc5e72206af4c44099e60fb3b733 Mon Sep 17 00:00:00 2001 From: derrod Date: Thu, 30 Apr 2020 11:42:09 +0200 Subject: [PATCH] [cli/core] Fix manifest saving/loading The refactoring didn't take into account that the raw manifest data still needs to be accessible. Since I did not want to modify the manifest model to hold the raw data (waste of RAM), just make the methods return the raw data again (at least for now) --- legendary/cli.py | 7 ++++--- legendary/core.py | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/legendary/cli.py b/legendary/cli.py index 3c3ba53..3821a9b 100644 --- a/legendary/cli.py +++ b/legendary/cli.py @@ -129,18 +129,19 @@ class LegendaryCLI: # check if we even need to log in if args.override_manifest: logger.info(f'Loading manifest from "{args.override_manifest}"') - manifest, _ = self.core.get_uri_manfiest(args.override_manifest) + manifest_data, _ = self.core.get_uri_manfiest(args.override_manifest) elif self.core.is_installed(args.app_name) and not args.force_download: logger.info(f'Loading installed manifest for "{args.app_name}"') - manifest, _ = self.core.get_installed_manifest(args.app_name) + manifest_data, _ = self.core.get_installed_manifest(args.app_name) else: logger.info(f'Logging in and downloading manifest for {args.app_name}') if not self.core.login(): logger.error('Login failed! Cannot continue with download process.') exit(1) game = self.core.get_game(args.app_name, update_meta=True) - manifest, _ = self.core.get_cdn_manifest(game, platform_override=args.platform_override) + manifest_data, _ = self.core.get_cdn_manifest(game, platform_override=args.platform_override) + manifest = self.core.load_manfiest(manifest_data) files = sorted(manifest.file_manifest_list.elements, key=lambda a: a.filename.lower()) diff --git a/legendary/core.py b/legendary/core.py index 60aa2bf..dbb9fd0 100644 --- a/legendary/core.py +++ b/legendary/core.py @@ -308,7 +308,7 @@ class LegendaryCore: def get_installed_manifest(self, app_name): igame = self.get_installed_game(app_name) if old_bytes := self.lgd.load_manifest(app_name, igame.version): - return self.load_manfiest(old_bytes), igame.base_urls + return old_bytes, igame.base_urls def get_cdn_manifest(self, game, platform_override=''): base_urls = [] @@ -335,7 +335,7 @@ class LegendaryCore: self.log.debug(f'Downloading manifest from {manifest["uri"]} ...') r = self.egs.unauth_session.get(manifest['uri'], params=params) r.raise_for_status() - return self.load_manfiest(r.content), base_urls + return r.content, base_urls def get_uri_manfiest(self, uri): if uri.startswith('http'): @@ -348,7 +348,7 @@ class LegendaryCore: with open(uri, 'rb') as f: new_manifest_data = f.read() - return self.load_manfiest(new_manifest_data), base_urls + return new_manifest_data, base_urls def prepare_download(self, game: Game, base_game: Game = None, base_path: str = '', status_q: Queue = None, max_shm: int = 0, max_workers: int = 0, @@ -360,27 +360,29 @@ class LegendaryCore: # load old manifest old_manifest = None - new_manifest_data = b'' # load old manifest if we have one if override_old_manifest: self.log.info(f'Overriding old manifest with "{override_old_manifest}"') - old_manifest, _ = self.get_uri_manfiest(override_old_manifest) + old_bytes, _ = self.get_uri_manfiest(override_old_manifest) + old_manifest = self.load_manfiest(old_bytes) elif not disable_patching and not force and self.is_installed(game.app_name): - old_manifest, _ = self.get_installed_manifest(game.app_name) + old_bytes, _ = self.get_installed_manifest(game.app_name) + old_manifest = self.load_manfiest(old_bytes) base_urls = list(game.base_urls) # copy list for manipulation if override_manifest: self.log.info(f'Overriding manifest with "{override_manifest}"') - new_manifest, _base_urls = self.get_uri_manfiest(override_manifest) + new_manifest_data, _base_urls = self.get_uri_manfiest(override_manifest) # if override manifest has a base URL use that instead if _base_urls: base_urls = _base_urls else: - new_manifest, _base_urls = self.get_cdn_manifest(game, platform_override) + new_manifest_data, _base_urls = self.get_cdn_manifest(game, platform_override) base_urls.extend(i for i in _base_urls if i not in base_urls) + new_manifest = self.load_manfiest(new_manifest_data) self.log.debug(f'Base urls: {base_urls}') self.lgd.save_manifest(game.app_name, new_manifest_data) # save manifest with version name as well for testing/downgrading/etc.