#484

Steam: download owned DLC with its game, a switch per DLC, and Download DLC

Openinsertfloppywants to merge intofrom

Requested by Cameron · project thread

Madeira's own Steam downloads took only the game's depots, so DLC the account owns never arrived and games like Fallout: New Vegas started without it. This adds owned DLC to Madeira's Steam downloads. One commit per step.

Changes

  1. Download the DLC the account owns with the game. The library refresh keeps the DLC apps of the account's licenses and attaches each to its game (common.parent, extended.listofdlc or a depot's dlcappid). A download takes their depots by the game's own OS, architecture and language rules, and the install record lists them under InstalledDepots with their dlcappid.
  2. Game details › Steam › Installed DLC lists the DLC the install record holds, with sizes.
  3. DLC names come from one request, with the depot name as a fallback.
  4. A switch per owned DLC, Owned DLC (n) and Download DLC. The download sheet has a DLC section with a switch per DLC; a DLC turned off is left out of the next update or repair. An installed game's page has Owned DLC (n) and, when a DLC left on is missing, Download DLC (it runs Repair).
  5. Installed state from the record's dlcappid, and no "Size not stated" for DLC whose size Steam doesn't give.
  6. An owned DLC app's depots count as owned. New Vegas's Courier's Stash packages list the DLC apps but not their depots, so Download DLC only re-checked the game's files. Steam still refuses a key for anything not owned, and a refused DLC depot is skipped as before.

env.MADEIRA_STEAM_DLC = 0 turns it all off (no DLC listed or downloaded, as before). Docs: STEAM_LIBRARY.md, "DLC". Host checks: check-steam-owned-dlc.py, check-steam-dlc-list.py, and new cases in check-steam-games.py.

Testing

  • On device (iPhone, sideloaded build): Fallout: New Vegas's owned DLC downloaded. That build had these changes on an older base.
  • This branch: rebased onto main c2c1b03a. It is not compiled here, because this machine has no Swift toolchain, so CI is the first compile on this base. Two spots needed hand merges with main's external drive support: the download path in SteamOwnedLibrary.run and the Game details rows. Both keep main's drive handling.
  • The settings catalog (ConfigCatalog.generated.swift) isn't regenerated for env.MADEIRA_STEAM_DLC, because the generator needs the full submodules.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LiLQakAySboBR7FkqkJFKS

Activity

8
insertfloppy23h ago

Added a 7th commit, "Steam: install the Steamworks redistributables a game names" (same Steam download code as the DLC changes).

Counter-Strike 2 and Garry's Mod needed Repair installed files before every start. Steam's content_log.txt showed "Failed running app 730 (required app 228980 not ready)": Valve's client records the game's sharedinstall depots (DirectX and VC++ from Steamworks Common Redistributables, app 228980) under SharedDepots, then waits for 228980, which it can't fetch inside Dock. The downloader now installs those depots into steamapps/common/Steamworks Shared and records them under the game's SharedDepots and in appmanifest_228980.acf. A redistributable that can't be planned is logged as [steam-redist] skipped and never fails the game's install.

Tested on device (iPhone, sideloaded build): CS2 starts without a Repair. That build had this commit on an older base; it applies unchanged on top of this branch and isn't compiled here.