diff --git a/DepotDownloader/ContentDownloader.cs b/DepotDownloader/ContentDownloader.cs index 1d1cab09..a089f122 100644 --- a/DepotDownloader/ContentDownloader.cs +++ b/DepotDownloader/ContentDownloader.cs @@ -189,6 +189,20 @@ static uint GetSteam3AppBuildNumber(uint appId, string branch) return uint.Parse(buildid.Value); } + static uint GetSteam3DepotProxyAppId(uint depotId, uint appId) + { + var depots = GetSteam3AppSection(appId, EAppInfoSection.Depots); + var depotChild = depots[depotId.ToString()]; + + if (depotChild == KeyValue.Invalid) + return INVALID_APP_ID; + + if (depotChild["depotfromapp"] == KeyValue.Invalid) + return INVALID_APP_ID; + + return depotChild["depotfromapp"].AsUnsignedInteger(); + } + static async Task GetSteam3DepotManifest(uint depotId, uint appId, string branch) { var depots = GetSteam3AppSection(appId, EAppInfoSection.Depots); @@ -595,7 +609,12 @@ static async Task GetDepotInfo(uint depotId, uint appId, ulon return null; } - return new DepotDownloadInfo(depotId, appId, manifestId, branch, installDir, depotKey); + // For depots that are proxied through depotfromapp, we still need to resolve the proxy app id + var containingAppId = appId; + var proxyAppId = GetSteam3DepotProxyAppId(depotId, appId); + if (proxyAppId != INVALID_APP_ID) containingAppId = proxyAppId; + + return new DepotDownloadInfo(depotId, containingAppId, manifestId, branch, installDir, depotKey); } private class ChunkMatch(DepotManifest.ChunkData oldChunk, DepotManifest.ChunkData newChunk) @@ -727,7 +746,7 @@ private static async Task ProcessDepotManifestAndFiles(Cancellat } else { - Console.Write("Downloading depot manifest... "); + Console.WriteLine($"Downloading depot {depot.DepotId} manifest"); ulong manifestRequestCode = 0; var manifestRequestCodeExpiration = DateTime.MinValue; @@ -766,7 +785,6 @@ private static async Task ProcessDepotManifestAndFiles(Cancellat // If we could not get the manifest code, this is a fatal error if (manifestRequestCode == 0) { - Console.WriteLine("No manifest request code was returned for {0} {1}", depot.DepotId, depot.ManifestId); cts.Cancel(); } } @@ -840,7 +858,6 @@ private static async Task ProcessDepotManifestAndFiles(Cancellat cts.Token.ThrowIfCancellationRequested(); Util.SaveManifestToFile(configDir, newManifest); - Console.WriteLine(" Done!"); } } diff --git a/DepotDownloader/Steam3Session.cs b/DepotDownloader/Steam3Session.cs index 065c0646..9ebfe536 100644 --- a/DepotDownloader/Steam3Session.cs +++ b/DepotDownloader/Steam3Session.cs @@ -262,9 +262,14 @@ public async Task GetDepotManifestRequestCodeAsync(uint depotId, uint app var requestCode = await steamContent.GetManifestRequestCode(depotId, appId, manifestId, branch); - Console.WriteLine("Got manifest request code for {0} {1} result: {2}", - depotId, manifestId, - requestCode); + if (requestCode == 0) + { + Console.WriteLine($"No manifest request code was returned for depot {depotId} from app {appId}, manifest {manifestId}"); + } + else + { + Console.WriteLine($"Got manifest request code for depot {depotId} from app {appId}, manifest {manifestId}, result: {requestCode}"); + } return requestCode; }