Re-check required install tags when updating an installed game

Install tags are written to config on first install and never looked at
again, so a tag Epic adds later never makes it into an existing install.
The next update then deletes the files for it, since they're no longer
covered by the stored list, and verify filters by that same list so it
reports the install as healthy.

On Fortnite this drops pakchunk100iad-WindowsClient.uondemandtoc, which
is the only way the game can reach the on-demand container holding
glider assets, and pakchunk29-WindowsClient (FatCosmo). Cosmetics fail
to load in game, with or without an error depending on which is missing.

Fetch the SDL data on update as well and add any required tags that
aren't in the stored list. Only ever adds, so optional packs the user
deselected are left alone.

Ref #711
This commit is contained in:
Zyhloh 2026-08-29 23:22:36 -04:00
parent b4d75f143a
commit 4c2ed98689

View file

@ -973,6 +973,14 @@ class LegendaryCLI:
logger.error(f'Unable to get SDL data for {sdl_name}')
else:
args.install_tag = config_tags.split(',')
# config tags are from install time, Epic may have added required tags since then
sdl_data = self.core.get_sdl_data(sdl_name, platform=args.platform)
if sdl_data and '__required' in sdl_data:
new_tags = [t for t in sdl_data['__required']['tags'] if t not in args.install_tag]
if new_tags:
logger.info(f'Adding new required install tags: {", ".join(t for t in new_tags if t)}')
args.install_tag.extend(new_tags)
self.core.lgd.config.set(game.app_name, 'install_tags', ','.join(args.install_tag))
elif args.install_tag and not game.is_dlc and not args.no_install:
config_tags = ','.join(args.install_tag)
logger.info(f'Saving install tags for "{game.app_name}" to config: {config_tags}')