Open NicknineTheEagle opened 7 months ago
Needs SteamKit with https://github.com/SteamRE/SteamKit/pull/1337 merged since very large depots are slow to serialize without it.
This would be a breaking change. Can we have a backwards compat for the ProtoManifest.LoadFromFile
?
And can you make a separate PR for the error related commits.
This would be a breaking change. Can we have a backwards compat for the
ProtoManifest.LoadFromFile
?
Not sure how to handle it. Option A is converting from ProtoManifest to DepotManifest which would be tricky since the former doesn't have all the data from the latter. Option B is handling both of these types in tandem which would be a pure nightmare.
the former doesn't have all the data from the latter.
What data that is needed is missing?
@azuisleet what do you think? I currently can't update to last SK because it changed the chunk checksum from byte[] to uint, and the breaks the proto contract of the ProtoManifest.
@NicknineTheEagle can you rebase and undo the log message changes please.
@NicknineTheEagle can you rebase and undo the log message changes please.
Done.
What data that is needed is missing?
I don't believe anything that is needed by DepotDownloader is missing but ProtoManifest format is missing a few fields from Steam manifest, for example, filename hashes and symlinks. We can convert from ProtoManifest to DepotManifest and the result will be valid for DepotDownloader but probably not valid for other tools that work with Steam manifest format.
We can convert from ProtoManifest to DepotManifest and the result will be valid for DepotDownloader but probably not valid for other tools that work with Steam manifest format.
We only care about backwards compat on ProtoManifest.LoadFromFile
for the cached files, we don't need to save them back.
If .bin exists, load proto, then the proper .manifest, always save .manifest.
We can convert from ProtoManifest to DepotManifest and the result will be valid for DepotDownloader but probably not valid for other tools that work with Steam manifest format.
We only care about backwards compat on
ProtoManifest.LoadFromFile
for the cached files, we don't need to save them back.If .bin exists, load proto, then the proper .manifest, always save .manifest.
I don't quite get it. If proto exists, should I load it to check if it's valid then download the proper manifest from Steam servers?
The proto is loaded from disk to diff it against latest manifest to see which files need to be updated, no?
The proto is loaded from disk to diff it against latest manifest to see which files need to be updated, no?
So are you proposing to use them in tandem then? That would still require internally converting ProtoManifest to DepotManifest (just without re-saving, as you said) but that's probably manageable. What should be done if the latest manifest id matches user's current ProtoManifest? Just keep ProtoManifest file untouched?
Keeping it as is instead of resaving sounds simpler.
This migrates DepotDownloader to the original manifest format used by Steam, phasing out the pseudo-format from the old days before Steam itself was using protobuf. The output manifest files stored in download dir are compatible with Steam client and match what you can find in Steam's depotcache dir.