diff --git a/ArchiSteamFarm/ASF.cs b/ArchiSteamFarm/ASF.cs index c6290347f..286cb8f8c 100644 --- a/ArchiSteamFarm/ASF.cs +++ b/ArchiSteamFarm/ASF.cs @@ -189,7 +189,7 @@ namespace ArchiSteamFarm { return; } - ArchiLogger.LogGenericInfo(Strings.UpdateDownloadingNewVersion); + ArchiLogger.LogGenericInfo(string.Format(Strings.UpdateDownloadingNewVersion, newVersion, binaryAsset.Size / 1024 / 1024)); byte[] result = await Program.WebBrowser.UrlGetToBytesRetry(binaryAsset.DownloadURL).ConfigureAwait(false); if (result == null) { diff --git a/ArchiSteamFarm/JSON/GitHub.cs b/ArchiSteamFarm/JSON/GitHub.cs index d10d3db3b..7a7e3b25e 100644 --- a/ArchiSteamFarm/JSON/GitHub.cs +++ b/ArchiSteamFarm/JSON/GitHub.cs @@ -55,6 +55,11 @@ namespace ArchiSteamFarm.JSON { internal readonly string Name; #pragma warning restore 649 +#pragma warning disable 649 + [JsonProperty(PropertyName = "size", Required = Required.Always)] + internal readonly uint Size; +#pragma warning restore 649 + // Deserialized from JSON private Asset() { } } diff --git a/ArchiSteamFarm/Localization/Strings.Designer.cs b/ArchiSteamFarm/Localization/Strings.Designer.cs index ac3b0b3f4..be6c2b140 100644 --- a/ArchiSteamFarm/Localization/Strings.Designer.cs +++ b/ArchiSteamFarm/Localization/Strings.Designer.cs @@ -1306,7 +1306,7 @@ namespace ArchiSteamFarm.Localization { } /// - /// Wyszukuje zlokalizowany ciąg podobny do ciągu Downloading new version... While waiting, consider donating if you appreciate the work being done! :). + /// Wyszukuje zlokalizowany ciąg podobny do ciągu Downloading new version: {0} ({1} MB)... While waiting, consider donating if you appreciate the work being done! :). /// internal static string UpdateDownloadingNewVersion { get { diff --git a/ArchiSteamFarm/Localization/Strings.resx b/ArchiSteamFarm/Localization/Strings.resx index 42a2ad8c3..28c45e6a0 100644 --- a/ArchiSteamFarm/Localization/Strings.resx +++ b/ArchiSteamFarm/Localization/Strings.resx @@ -247,7 +247,8 @@ StackTrace: Checking for new version... - Downloading new version... While waiting, consider donating if you appreciate the work being done! :) + Downloading new version: {0} ({1} MB)... While waiting, consider donating if you appreciate the work being done! :) + {0} will be replaced by version string, {1} will be replaced by update size (in megabytes) Update process finished! diff --git a/ArchiSteamFarm/Program.cs b/ArchiSteamFarm/Program.cs index 826f5a51b..d0297aa1c 100644 --- a/ArchiSteamFarm/Program.cs +++ b/ArchiSteamFarm/Program.cs @@ -309,7 +309,7 @@ namespace ArchiSteamFarm { OS.Init(GlobalConfig.Headless); WebBrowser.Init(); - WebBrowser = new WebBrowser(ASF.ArchiLogger); + WebBrowser = new WebBrowser(ASF.ArchiLogger, true); } private static async Task InitShutdownSequence() { diff --git a/ArchiSteamFarm/WebBrowser.cs b/ArchiSteamFarm/WebBrowser.cs index 138ebd7bc..377a15bb2 100644 --- a/ArchiSteamFarm/WebBrowser.cs +++ b/ArchiSteamFarm/WebBrowser.cs @@ -37,6 +37,7 @@ namespace ArchiSteamFarm { internal sealed class WebBrowser { internal const byte MaxRetries = 5; // Defines maximum number of retries, UrlRequest() does not handle retry by itself (it's app responsibility) + private const byte ExtendedTimeoutMultiplier = 10; // Multiplier for WebBrowsers dealing with huge data private const byte MaxConnections = ServicePointManager.DefaultNonPersistentConnectionLimit; // Defines maximum number of connections per ServicePoint. Be careful, as it also defines maximum number of sockets in CLOSE_WAIT state private const byte MaxIdleTime = 15; // In seconds, how long socket is allowed to stay in CLOSE_WAIT state after there are no connections to it @@ -45,7 +46,7 @@ namespace ArchiSteamFarm { private readonly ArchiLogger ArchiLogger; private readonly HttpClient HttpClient; - internal WebBrowser(ArchiLogger archiLogger) { + internal WebBrowser(ArchiLogger archiLogger, bool extendedTimeout = false) { ArchiLogger = archiLogger ?? throw new ArgumentNullException(nameof(archiLogger)); HttpClientHandler httpClientHandler = new HttpClientHandler { @@ -54,7 +55,7 @@ namespace ArchiSteamFarm { }; HttpClient = new HttpClient(httpClientHandler) { - Timeout = TimeSpan.FromSeconds(Program.GlobalConfig.ConnectionTimeout) + Timeout = TimeSpan.FromSeconds(extendedTimeout ? ExtendedTimeoutMultiplier * Program.GlobalConfig.ConnectionTimeout : Program.GlobalConfig.ConnectionTimeout) }; // Most web services expect that UserAgent is set, so we declare it globally @@ -380,12 +381,13 @@ namespace ArchiSteamFarm { } private async Task UrlGetToResponse(string request, string referer = null) { - if (!string.IsNullOrEmpty(request)) { - return await UrlRequest(new Uri(request), HttpMethod.Get, null, referer).ConfigureAwait(false); + if (string.IsNullOrEmpty(request)) { + ArchiLogger.LogNullError(nameof(request)); + return null; } - ArchiLogger.LogNullError(nameof(request)); - return null; + HttpResponseMessage result = await UrlRequest(new Uri(request), HttpMethod.Get, null, referer).ConfigureAwait(false); + return result; } private async Task UrlGetToXML(string request, string referer = null) {