Repository navigation
Steam: download owned DLC with its game, a switch per DLC, and Download DLC - #484
insertfloppy wants to merge 7 commits into
Conversation
The depot selection left out every depot with a dlcappid, so owned DLC that ships as depots of the game never arrived: Fallout: New Vegas's four Courier's Stash packs were missing from Data. A DLC depot is now selected when the account's licenses include it, and its install record entry names its DLC app as Valve's client writes it. An owned DLC depot Steam still refuses a key for is skipped instead of failing the install. Games already installed get their DLC from "Repair installed files". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LRteDvgrjU8qVByo5Mipwz Signed-off-by: ft7t8drgwf-wq <337626868+ft7t8drgwf-wq@users.noreply.github.com>
Game details › Steam shows the DLC the game's install record lists (InstalledDepots entries with a dlcappid), with sizes, named from Steam when signed in, so you can see whether owned DLC was downloaded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LRteDvgrjU8qVByo5Mipwz Signed-off-by: ft7t8drgwf-wq <337626868+ft7t8drgwf-wq@users.noreply.github.com>
Game details showed "DLC <id>" for Fallout 4's DLC. Names are now asked for in one request, and any still missing take the name of their depot in the game's own app info. The lookup logs how many names it found, or why it was skipped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LRteDvgrjU8qVByo5Mipwz Signed-off-by: ft7t8drgwf-wq <337626868+ft7t8drgwf-wq@users.noreply.github.com>
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), with the depots it adds and their sizes. A download still takes
every DLC depot the account's licenses include, minus the DLC apps the
player turned off (SteamAppInfo.dlcOff from SteamDLC.offApps), by the
game's own OS, architecture and language rules.
The download sheet has a DLC section with a switch per DLC; an installed
game's page has Owned DLC (n) beside Installed DLC, and Download DLC when a
DLC left on is missing (it runs Repair). env.MADEIRA_STEAM_DLC = 0 turns
DLC off. Docs in STEAM_LIBRARY.md ("DLC"); host checks for the selection,
the owned list and the choices.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LiLQakAySboBR7FkqkJFKS
Signed-off-by: ft7t8drgwf-wq <337626868+ft7t8drgwf-wq@users.noreply.github.com>
…tated" Old games (New Vegas) state no size for their DLC depots, so each row read "Size not stated, not installed". A row now says Installed when the install record names the DLC (dlcappid), with its recorded size, or holds all its depots; otherwise "Not installed", with a size only when Steam states one. Download DLC leaves out DLC the record already names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwPPpv8GktVxXz37784ajC Signed-off-by: ft7t8drgwf-wq <337626868+ft7t8drgwf-wq@users.noreply.github.com>
The selection took a DLC depot only when a license package listed that depot ID. 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. The download now also counts the depots of the DLC apps the account owns (the cached owned-DLC list); Steam still refuses a key for anything not owned, and a refused DLC depot is skipped as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwPPpv8GktVxXz37784ajC Signed-off-by: ft7t8drgwf-wq <337626868+ft7t8drgwf-wq@users.noreply.github.com>
Valve's client records a game's sharedinstall depots (DirectX, VC++ from
Steamworks Common Redistributables, 228980) under its SharedDepots and
refuses to start it until the owner app is installed: "Failed running app
730 (required app 228980 not ready)". Madeira skipped those depots, and
Valve's client in Dock cannot fetch them ("No connection"), so CS2 and
Garry's Mod needed a Repair before every start.
The downloader now plans them too, into the owner's folder
(steamapps/common/Steamworks Shared), and records them under the game's
SharedDepots and in the owner's appmanifest, as Valve's client does. A
redistributable that cannot be planned is logged ([steam-redist] skipped)
and left out; it never fails the game's install.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QwPPpyEGW7D4dmNsNKzK6P
Signed-off-by: ft7t8drgwf-wq <337626868+ft7t8drgwf-wq@users.noreply.github.com>
|
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. |
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
keeps the DLC apps of the account's licenses and attaches each to its game
(
common.parent,extended.listofdlcor a depot'sdlcappid). A downloadtakes their depots by the game's own OS, architecture and language rules,
and the install record lists them under InstalledDepots with their
dlcappid.holds, with sizes.
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).
dlcappid, and no "Size not stated"for DLC whose size Steam doesn't give.
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 = 0turns it all off (no DLC listed or downloaded, asbefore). 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
downloaded. That build had these changes on an older base.
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.runand the Game details rows. Both keepmain's drive handling.
ConfigCatalog.generated.swift) isn't regenerated forenv.MADEIRA_STEAM_DLC, because the generator needs the full submodules.🤖 Generated with Claude Code
https://claude.ai/code/session_01LiLQakAySboBR7FkqkJFKS