diff --git a/DepotDownloader/ContentDownloader.cs b/DepotDownloader/ContentDownloader.cs index 1d8559d3..6534b4a4 100644 --- a/DepotDownloader/ContentDownloader.cs +++ b/DepotDownloader/ContentDownloader.cs @@ -386,7 +386,7 @@ namespace DepotDownloader if ( details.hcontent_file > 0 ) { - await DownloadAppAsync( details.consumer_appid, details.consumer_appid, details.hcontent_file, DEFAULT_BRANCH, null, true ); + await DownloadAppAsync( details.consumer_appid, details.consumer_appid, details.hcontent_file, DEFAULT_BRANCH, null, null, false, true ); } else { @@ -394,7 +394,7 @@ namespace DepotDownloader } } - public static async Task DownloadAppAsync( uint appId, uint depotId, ulong manifestId, string branch, string os, bool isUgc ) + public static async Task DownloadAppAsync( uint appId, uint depotId, ulong manifestId, string branch, string os, string language, bool lv, bool isUgc ) { // Load our configuration data containing the depots currently installed string configPath = ContentDownloader.Config.InstallDirectory; @@ -451,13 +451,32 @@ namespace DepotDownloader if ( depotId != INVALID_DEPOT_ID && id != depotId ) continue; - if ( depotId == INVALID_DEPOT_ID && !Config.DownloadAllPlatforms ) + if ( depotId == INVALID_DEPOT_ID ) { var depotConfig = depotSection[ "config" ]; - if ( depotConfig != KeyValue.Invalid && depotConfig[ "oslist" ] != KeyValue.Invalid && !string.IsNullOrWhiteSpace( depotConfig[ "oslist" ].Value ) ) + if ( depotConfig != KeyValue.Invalid ) { - var oslist = depotConfig[ "oslist" ].Value.Split( ',' ); - if ( Array.IndexOf( oslist, os ?? Util.GetSteamOS() ) == -1 ) + if ( !Config.DownloadAllPlatforms && + depotConfig["oslist"] != KeyValue.Invalid && + !string.IsNullOrWhiteSpace( depotConfig["oslist"].Value ) ) + { + var oslist = depotConfig["oslist"].Value.Split( ',' ); + if ( Array.IndexOf( oslist, os ?? Util.GetSteamOS() ) == -1 ) + continue; + } + + if ( !Config.DownloadAllLanguages && + depotConfig["language"] != KeyValue.Invalid && + !string.IsNullOrWhiteSpace( depotConfig["language"].Value ) ) + { + var depotLang = depotConfig["language"].Value; + if ( depotLang != ( language ?? "english" ) ) + continue; + } + + if ( !lv && + depotConfig["lowviolence"] != KeyValue.Invalid && + depotConfig["lowviolence"].AsBoolean() ) continue; } } diff --git a/DepotDownloader/DownloadConfig.cs b/DepotDownloader/DownloadConfig.cs index d337d540..780fd56a 100644 --- a/DepotDownloader/DownloadConfig.cs +++ b/DepotDownloader/DownloadConfig.cs @@ -7,6 +7,7 @@ namespace DepotDownloader { public int CellID { get; set; } public bool DownloadAllPlatforms { get; set; } + public bool DownloadAllLanguages { get; set; } public bool DownloadManifestOnly { get; set; } public string InstallDirectory { get; set; } diff --git a/DepotDownloader/Program.cs b/DepotDownloader/Program.cs index 9f62f593..854dd14a 100644 --- a/DepotDownloader/Program.cs +++ b/DepotDownloader/Program.cs @@ -165,6 +165,16 @@ namespace DepotDownloader Console.WriteLine("Error: Cannot specify -os when -all-platforms is specified."); return 1; } + ContentDownloader.Config.DownloadAllLanguages = HasParameter( args, "-all-languages" ); + string language = GetParameter( args, "-language", null ); + + if ( ContentDownloader.Config.DownloadAllLanguages && !String.IsNullOrEmpty( language ) ) + { + Console.WriteLine( "Error: Cannot specify -language when -all-languages is specified." ); + return 1; + } + + bool lv = HasParameter( args, "-lowviolence" ); uint appId = GetParameter( args, "-app", ContentDownloader.INVALID_APP_ID ); if ( appId == ContentDownloader.INVALID_APP_ID ) @@ -197,7 +207,7 @@ namespace DepotDownloader { try { - await ContentDownloader.DownloadAppAsync( appId, depotId, manifestId, branch, os, isUGC ).ConfigureAwait( false ); + await ContentDownloader.DownloadAppAsync( appId, depotId, manifestId, branch, os, language, lv, isUGC ).ConfigureAwait( false ); } catch ( Exception ex ) when ( ex is ContentDownloaderException