Use depotfromapp for getting manifest codes

Partially reverts 3143362d83

Fixes #569
Fixes #570
pull/581/head
Pavel Djundik 10 months ago
parent 682bfbac27
commit 5fe8a827d8

@ -189,6 +189,20 @@ namespace DepotDownloader
return uint.Parse(buildid.Value); 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<ulong> GetSteam3DepotManifest(uint depotId, uint appId, string branch) static async Task<ulong> GetSteam3DepotManifest(uint depotId, uint appId, string branch)
{ {
var depots = GetSteam3AppSection(appId, EAppInfoSection.Depots); var depots = GetSteam3AppSection(appId, EAppInfoSection.Depots);
@ -595,7 +609,12 @@ namespace DepotDownloader
return null; 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) private class ChunkMatch(DepotManifest.ChunkData oldChunk, DepotManifest.ChunkData newChunk)
@ -727,7 +746,7 @@ namespace DepotDownloader
} }
else else
{ {
Console.Write("Downloading depot manifest... "); Console.WriteLine($"Downloading depot {depot.DepotId} manifest");
ulong manifestRequestCode = 0; ulong manifestRequestCode = 0;
var manifestRequestCodeExpiration = DateTime.MinValue; var manifestRequestCodeExpiration = DateTime.MinValue;
@ -766,7 +785,6 @@ namespace DepotDownloader
// If we could not get the manifest code, this is a fatal error // If we could not get the manifest code, this is a fatal error
if (manifestRequestCode == 0) if (manifestRequestCode == 0)
{ {
Console.WriteLine("No manifest request code was returned for {0} {1}", depot.DepotId, depot.ManifestId);
cts.Cancel(); cts.Cancel();
} }
} }
@ -840,7 +858,6 @@ namespace DepotDownloader
cts.Token.ThrowIfCancellationRequested(); cts.Token.ThrowIfCancellationRequested();
Util.SaveManifestToFile(configDir, newManifest); Util.SaveManifestToFile(configDir, newManifest);
Console.WriteLine(" Done!");
} }
} }

@ -262,9 +262,14 @@ namespace DepotDownloader
var requestCode = await steamContent.GetManifestRequestCode(depotId, appId, manifestId, branch); var requestCode = await steamContent.GetManifestRequestCode(depotId, appId, manifestId, branch);
Console.WriteLine("Got manifest request code for {0} {1} result: {2}", if (requestCode == 0)
depotId, manifestId, {
requestCode); 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; return requestCode;
} }

Loading…
Cancel
Save