Repository navigation
Steam: Steam Workshop page per game and a Workshop area - #491
Open
insertfloppy wants to merge 8 commits into
Open
insertfloppy wants to merge 8 commits into
insertfloppy wants to merge 8 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>
Game details gets a Steam Workshop page: the account's subscribed items for the game with their state (installed, update available, not downloaded, progress), Browse (popular this week, most subscribed, most recent, search) with Subscribe, Download/Update, Unsubscribe and Remove, and installed items that are no longer subscribed. A Workshop button beside the library's Steam title opens a list of the installed games, those with a Workshop first, each opening its page. Everything goes over the app's own Steam connection (PublishedFile GetUserFiles, QueryFiles, GetDetails, Subscribe, Unsubscribe), only while no game session holds the account. An item is a manifest of the game's own Workshop depot and downloads with the game downloader's key, manifest, chunk check and resume path into steamapps/workshop/content/<app>/<item>; older single-file items come over HTTPS from Steam's hosts. The appworkshop_<app>.acf record is written in Valve's format, keeping what Valve's client wrote, so a game started through Madeira Dock finds the items installed and current. env.MADEIRA_STEAM_WORKSHOP = 0 turns it off. docs/STEAM_WORKSHOP.md, tests/host/check-steam-workshop.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QwPPpwZNPXpKGL7XE7MBVm Signed-off-by: ft7t8drgwf-wq <337626868+ft7t8drgwf-wq@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Cameron · project thread
Builds on #484 (Steam DLC). It uses the per-depot install folder added by
#484's Steamworks redistributables commit, so this branch sits on top of it.
Until #484 is merged its 7 commits show here too. The new commit is the last
one, "steam: Steam Workshop page per game and a Workshop area".
Change
most subscribed, most recent, or search), Subscribe and Unsubscribe, see
your subscribed and installed items, and download or update them. A
Workshop button beside the library's Steam title opens the same area.
Items download to
steamapps/workshop/content/<app>/<item>, andappworkshop_<app>.acfis written the way Valve's client does, so games findthem.
SteamWorkshop.swift(UI and service calls) andSteamWorkshopFiles.swift(download and record). It also touchesDepotDownloader (
installWorkshopItem, using the game downloads' chunk download and resume), SteamSession andSteamProtocol (the service calls), and SteamAppInfo (
workshopVisible).env.MADEIRA_STEAM_WORKSHOP = 0turns it off. Docs:docs/STEAM_WORKSHOP.md.Testing
Subscribe.
tests/host/check-steam-workshop.py(new) andcheck-steam-library.pypass on this branch with swiftc 6.1 on Linux. Itisn't compiled for iOS here.
🤖 Generated with Claude Code
https://claude.ai/code/session_01LiLQakAySboBR7FkqkJFKS