mirror of
https://github.com/SteamRE/DepotDownloader.git
synced 2026-10-20 01:46:17 +00:00
Add new -ugc option, removing -force-depot. (#41)
Also improve and clean up command line usage output, as well as add automatic lookup of correct workshop depot id for UGC, instead of requiring it on command line (usually assuming app id).
This commit is contained in:
1 parent
7a757101bf
commit
72f633eade
3 files changed
+68
-49
No files matched your search
@@ -197,9 +197,6 @@ namespace DepotDownloader
|
||||
|
||||
static ulong GetSteam3DepotManifest( uint depotId, uint appId, string branch )
|
||||
{
|
||||
if ( Config.ManifestId != INVALID_MANIFEST_ID )
|
||||
return Config.ManifestId;
|
||||
|
||||
KeyValue depots = GetSteam3AppSection( appId, EAppInfoSection.Depots );
|
||||
KeyValue depotChild = depots[ depotId.ToString() ];
|
||||
|
||||
@@ -376,7 +373,7 @@ namespace DepotDownloader
|
||||
steam3.Disconnect();
|
||||
}
|
||||
|
||||
public static async Task DownloadAppAsync( uint appId, uint depotId, string branch, string os = null, bool forceDepot = false )
|
||||
public static async Task DownloadAppAsync( uint appId, uint depotId, ulong manifestId, string branch, string os, bool isUgc )
|
||||
{
|
||||
if ( steam3 != null )
|
||||
steam3.RequestAppInfo( appId );
|
||||
@@ -401,8 +398,12 @@ namespace DepotDownloader
|
||||
KeyValue depots = GetSteam3AppSection( appId, EAppInfoSection.Depots );
|
||||
|
||||
|
||||
if ( forceDepot )
|
||||
if ( isUgc )
|
||||
{
|
||||
var workshopDepot = depots["workshopdepot"].AsUnsignedInteger();
|
||||
if (workshopDepot != 0)
|
||||
depotId = workshopDepot;
|
||||
|
||||
depotIDs.Add( depotId );
|
||||
}
|
||||
else
|
||||
@@ -456,7 +457,7 @@ namespace DepotDownloader
|
||||
|
||||
foreach ( var depot in depotIDs )
|
||||
{
|
||||
var info = GetDepotInfo( depot, appId, branch );
|
||||
var info = GetDepotInfo( depot, appId, manifestId, branch );
|
||||
if ( info != null )
|
||||
{
|
||||
infos.Add( info );
|
||||
@@ -473,7 +474,7 @@ namespace DepotDownloader
|
||||
}
|
||||
}
|
||||
|
||||
static DepotDownloadInfo GetDepotInfo( uint depotId, uint appId, string branch )
|
||||
static DepotDownloadInfo GetDepotInfo( uint depotId, uint appId, ulong manifestId, string branch )
|
||||
{
|
||||
if ( steam3 != null && appId != INVALID_APP_ID )
|
||||
steam3.RequestAppInfo( ( uint )appId );
|
||||
@@ -490,18 +491,21 @@ namespace DepotDownloader
|
||||
// Skip requesting an app ticket
|
||||
steam3.AppTickets[ depotId ] = null;
|
||||
|
||||
ulong manifestID = GetSteam3DepotManifest( depotId, appId, branch );
|
||||
if ( manifestID == INVALID_MANIFEST_ID && branch != "public" )
|
||||
if (manifestId == INVALID_MANIFEST_ID)
|
||||
{
|
||||
Console.WriteLine( "Warning: Depot {0} does not have branch named \"{1}\". Trying public branch.", depotId, branch );
|
||||
branch = "public";
|
||||
manifestID = GetSteam3DepotManifest( depotId, appId, branch );
|
||||
}
|
||||
manifestId = GetSteam3DepotManifest(depotId, appId, branch);
|
||||
if (manifestId == INVALID_MANIFEST_ID && branch != "public")
|
||||
{
|
||||
Console.WriteLine("Warning: Depot {0} does not have branch named \"{1}\". Trying public branch.", depotId, branch);
|
||||
branch = "public";
|
||||
manifestId = GetSteam3DepotManifest(depotId, appId, branch);
|
||||
}
|
||||
|
||||
if ( manifestID == INVALID_MANIFEST_ID )
|
||||
{
|
||||
Console.WriteLine( "Depot {0} ({1}) missing public subsection or manifest section.", depotId, contentName );
|
||||
return null;
|
||||
if (manifestId == INVALID_MANIFEST_ID)
|
||||
{
|
||||
Console.WriteLine("Depot {0} ({1}) missing public subsection or manifest section.", depotId, contentName);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
uint uVersion = GetSteam3AppBuildNumber( appId, branch );
|
||||
@@ -522,7 +526,7 @@ namespace DepotDownloader
|
||||
|
||||
byte[] depotKey = steam3.DepotKeys[ depotId ];
|
||||
|
||||
var info = new DepotDownloadInfo( depotId, manifestID, installDir, contentName );
|
||||
var info = new DepotDownloadInfo( depotId, manifestId, installDir, contentName );
|
||||
info.depotKey = depotKey;
|
||||
return info;
|
||||
}
|
||||
|
||||
@@ -18,8 +18,6 @@ namespace DepotDownloader
|
||||
|
||||
public string BetaPassword { get; set; }
|
||||
|
||||
public ulong ManifestId { get; set; }
|
||||
|
||||
public bool VerifyAll { get; set; }
|
||||
|
||||
public int MaxServers { get; set; }
|
||||
|
||||
+46
-29
@@ -25,24 +25,34 @@ namespace DepotDownloader
|
||||
|
||||
ConfigStore.LoadFromFile( Path.Combine( Directory.GetCurrentDirectory(), "DepotDownloader.config" ) );
|
||||
|
||||
bool bDumpManifest = HasParameter( args, "-manifest-only" );
|
||||
uint appId = GetParameter<uint>( args, "-app", ContentDownloader.INVALID_APP_ID );
|
||||
uint depotId = GetParameter<uint>( args, "-depot", ContentDownloader.INVALID_DEPOT_ID );
|
||||
ContentDownloader.Config.ManifestId = GetParameter<ulong>( args, "-manifest", ContentDownloader.INVALID_MANIFEST_ID );
|
||||
|
||||
if ( appId == ContentDownloader.INVALID_APP_ID )
|
||||
if (appId == ContentDownloader.INVALID_APP_ID)
|
||||
{
|
||||
Console.WriteLine( "Error: -app not specified!" );
|
||||
Console.WriteLine("Error: -app not specified!");
|
||||
return;
|
||||
}
|
||||
|
||||
if ( depotId == ContentDownloader.INVALID_DEPOT_ID && ContentDownloader.Config.ManifestId != ContentDownloader.INVALID_MANIFEST_ID )
|
||||
uint depotId;
|
||||
bool isUGC = false;
|
||||
|
||||
ulong manifestId = GetParameter<ulong>(args, "-ugc", ContentDownloader.INVALID_MANIFEST_ID);
|
||||
if (manifestId != ContentDownloader.INVALID_MANIFEST_ID)
|
||||
{
|
||||
Console.WriteLine( "Error: -manifest requires -depot to be specified" );
|
||||
return;
|
||||
depotId = appId;
|
||||
isUGC = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
depotId = GetParameter<uint>(args, "-depot", ContentDownloader.INVALID_DEPOT_ID);
|
||||
manifestId = GetParameter<ulong>(args, "-manifest", ContentDownloader.INVALID_MANIFEST_ID);
|
||||
if (depotId == ContentDownloader.INVALID_DEPOT_ID && manifestId != ContentDownloader.INVALID_MANIFEST_ID)
|
||||
{
|
||||
Console.WriteLine("Error: -manifest requires -depot to be specified");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
ContentDownloader.Config.DownloadManifestOnly = bDumpManifest;
|
||||
ContentDownloader.Config.DownloadManifestOnly = HasParameter(args, "-manifest-only");
|
||||
|
||||
int cellId = GetParameter<int>( args, "-cellid", -1 );
|
||||
if ( cellId == -1 )
|
||||
@@ -98,7 +108,6 @@ namespace DepotDownloader
|
||||
ContentDownloader.Config.MaxServers = GetParameter<int>( args, "-max-servers", 20 );
|
||||
ContentDownloader.Config.MaxDownloads = GetParameter<int>( args, "-max-downloads", 4 );
|
||||
string branch = GetParameter<string>( args, "-branch" ) ?? GetParameter<string>( args, "-beta" ) ?? "Public";
|
||||
bool forceDepot = HasParameter( args, "-force-depot" );
|
||||
string os = GetParameter<string>( args, "-os", null );
|
||||
|
||||
if ( ContentDownloader.Config.DownloadAllPlatforms && !String.IsNullOrEmpty( os ) )
|
||||
@@ -128,7 +137,7 @@ namespace DepotDownloader
|
||||
|
||||
if ( ContentDownloader.InitializeSteam3( username, password ) )
|
||||
{
|
||||
await ContentDownloader.DownloadAppAsync( appId, depotId, branch, os, forceDepot ).ConfigureAwait( false );
|
||||
await ContentDownloader.DownloadAppAsync( appId, depotId, manifestId, branch, os, isUGC ).ConfigureAwait( false );
|
||||
ContentDownloader.ShutdownSteam3();
|
||||
}
|
||||
}
|
||||
@@ -167,28 +176,36 @@ namespace DepotDownloader
|
||||
|
||||
static void PrintUsage()
|
||||
{
|
||||
Console.WriteLine( "\nUsage: depotdownloader <parameters> [optional parameters]\n" );
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine( "Usage: depotdownloader -app <id> [-depot <id> [-manifest <id>] | -ugc <id>]" );
|
||||
Console.WriteLine( "\t\t[-username <username> [-password <password>]] [other options]" );
|
||||
Console.WriteLine();
|
||||
Console.WriteLine( "Parameters:" );
|
||||
Console.WriteLine( "\t-app <#>\t\t\t\t- the AppID to download." );
|
||||
Console.WriteLine();
|
||||
|
||||
Console.WriteLine( "Optional Parameters:" );
|
||||
Console.WriteLine( "\t-depot <#>\t\t\t- the DepotID to download." );
|
||||
Console.WriteLine( "\t-cellid <#>\t\t\t- the overridden CellID of the content server to download from." );
|
||||
Console.WriteLine( "\t-username <user>\t\t\t- the username of the account to login to for restricted content." );
|
||||
Console.WriteLine( "\t-password <pass>\t\t\t- the password of the account to login to for restricted content." );
|
||||
Console.WriteLine( "\t-remember-password\t\t\t- if set, remember the password for subsequent logins of this user." );
|
||||
Console.WriteLine( "\t-dir <installdir>\t\t\t- the directory in which to place downloaded files." );
|
||||
Console.WriteLine( "\t-os <os>\t\t\t- the operating system for which to download the game (windows, macos or linux, default: OS the program is currently running on)" );
|
||||
Console.WriteLine( "\t-filelist <filename.txt>\t\t- a list of files to download (from the manifest). Can optionally use regex to download only certain files." );
|
||||
Console.WriteLine( "\t-all-platforms\t\t\t- downloads all platform-specific depots when -app is used." );
|
||||
Console.WriteLine( "\t-manifest-only\t\t\t- downloads a human readable manifest for any depots that would be downloaded." );
|
||||
Console.WriteLine( "\t-beta <branchname>\t\t\t\t- download from specified branch if available (default: Public)." );
|
||||
Console.WriteLine( "\t-betapassword <pass>\t\t\t- branch password if applicable." );
|
||||
Console.WriteLine( "\t-depot <#>\t\t\t\t- the DepotID to download." );
|
||||
Console.WriteLine( "\t-manifest <id>\t\t\t- manifest id of content to download (requires -depot, default: current for branch)." );
|
||||
Console.WriteLine( "\t-max-servers <#>\t\t\t- maximum number of content servers to use. (default: 8)." );
|
||||
Console.WriteLine( "\t-max-downloads <#>\t\t\t- maximum number of chunks to download concurrently. (default: 4)." );
|
||||
Console.WriteLine();
|
||||
Console.WriteLine( "\t-ugc <#>\t\t\t\t- the UGC ID to download." );
|
||||
Console.WriteLine();
|
||||
Console.WriteLine( "\t-username <user>\t\t- the username of the account to login to for restricted content. ");
|
||||
Console.WriteLine( "\t-password <pass>\t\t- the password of the account to login to for restricted content." );
|
||||
Console.WriteLine( "\t-remember-password\t\t- if set, remember the password for subsequent logins of this user." );
|
||||
Console.WriteLine();
|
||||
Console.WriteLine( "\t-beta <branchname>\t\t\t- download from specified branch if available (default: Public)." );
|
||||
Console.WriteLine( "\t-betapassword <pass>\t\t- branch password if applicable." );
|
||||
Console.WriteLine();
|
||||
Console.WriteLine( "\t-dir <installdir>\t\t- the directory in which to place downloaded files." );
|
||||
Console.WriteLine( "\t-all-platforms\t\t\t- downloads all platform-specific depots when -app is used." );
|
||||
Console.WriteLine( "\t-os <os>\t\t\t\t- the operating system for which to download the game (windows, macos or linux, default: OS the program is currently running on)" );
|
||||
Console.WriteLine( "\t-filelist <file.txt>\t- a list of files to download (from the manifest). Can optionally use regex to download only certain files." );
|
||||
Console.WriteLine( "\t-validate\t\t\t\t- Include checksum verification of files already downloaded" );
|
||||
Console.WriteLine();
|
||||
Console.WriteLine( "\t-manifest-only\t\t\t- downloads a human readable manifest for any depots that would be downloaded." );
|
||||
Console.WriteLine( "\t-cellid <#>\t\t\t\t- the overridden CellID of the content server to download from." );
|
||||
Console.WriteLine( "\t-max-servers <#>\t\t- maximum number of content servers to use. (default: 8)." );
|
||||
Console.WriteLine( "\t-max-downloads <#>\t\t- maximum number of chunks to download concurrently. (default: 4)." );
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user