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) {