diff --git a/ArchiSteamFarm/Program.cs b/ArchiSteamFarm/Program.cs index 417b303d0..a27abd887 100644 --- a/ArchiSteamFarm/Program.cs +++ b/ArchiSteamFarm/Program.cs @@ -28,6 +28,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; +using System.Net.Http; using System.Reflection; using System.Threading; using System.Threading.Tasks; @@ -205,21 +206,22 @@ namespace ArchiSteamFarm { return; } - Logging.LogGenericInfo("Downloading new version..."); - Stream newExe = await WebBrowser.UrlGetToStream(binaryAsset.DownloadURL).ConfigureAwait(false); - if (newExe == null) { - Logging.LogGenericWarning("Could not download new version!"); + byte[] result = null; + for (byte i = 0; i < WebBrowser.MaxRetries && result == null; i++) { + Logging.LogGenericInfo("Downloading new version..."); + result = await WebBrowser.UrlGetToBytes(binaryAsset.DownloadURL).ConfigureAwait(false); + } + + if (result == null) { + Logging.LogGenericWTF("Request failed even after " + WebBrowser.MaxRetries + " tries"); return; } - // We start deep update logic here string newExeFile = ExecutableFile + ".new"; // Firstly we create new exec try { - using (FileStream fileStream = File.Open(newExeFile, FileMode.Create)) { - await newExe.CopyToAsync(fileStream).ConfigureAwait(false); - } + File.WriteAllBytes(newExeFile, result); } catch (Exception e) { Logging.LogGenericException(e); return; diff --git a/ArchiSteamFarm/Properties/AssemblyInfo.cs b/ArchiSteamFarm/Properties/AssemblyInfo.cs index db51a42df..794b7eae7 100644 --- a/ArchiSteamFarm/Properties/AssemblyInfo.cs +++ b/ArchiSteamFarm/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.0.3.1")] -[assembly: AssemblyFileVersion("2.0.3.1")] +[assembly: AssemblyVersion("2.0.2.9")] +[assembly: AssemblyFileVersion("2.0.2.9")] diff --git a/ArchiSteamFarm/WebBrowser.cs b/ArchiSteamFarm/WebBrowser.cs index c265b7c83..c5b847e84 100644 --- a/ArchiSteamFarm/WebBrowser.cs +++ b/ArchiSteamFarm/WebBrowser.cs @@ -88,13 +88,9 @@ namespace ArchiSteamFarm { return false; } - HttpResponseMessage response = await UrlGetToResponse(request, referer).ConfigureAwait(false); - if (response == null) { - return false; + using (HttpResponseMessage response = await UrlGetToResponse(request, referer).ConfigureAwait(false)) { + return response != null; } - - response.Dispose(); - return true; } internal async Task UrlPost(string request, Dictionary data = null, string referer = null) { @@ -102,29 +98,9 @@ namespace ArchiSteamFarm { return false; } - HttpResponseMessage response = await UrlPostToResponse(request, data, referer).ConfigureAwait(false); - if (response == null) { - return false; + using (HttpResponseMessage response = await UrlPostToResponse(request, data, referer).ConfigureAwait(false)) { + return response != null; } - - response.Dispose(); - return true; - } - - internal async Task UrlGetToResponse(string request, string referer = null) { - if (string.IsNullOrEmpty(request)) { - return null; - } - - return await UrlRequest(request, HttpMethod.Get, null, referer).ConfigureAwait(false); - } - - internal async Task UrlPostToResponse(string request, Dictionary data = null, string referer = null) { - if (string.IsNullOrEmpty(request)) { - return null; - } - - return await UrlRequest(request, HttpMethod.Post, data, referer).ConfigureAwait(false); } internal async Task UrlGetToContent(string request, string referer = null) { @@ -132,31 +108,27 @@ namespace ArchiSteamFarm { return null; } - HttpResponseMessage httpResponse = await UrlGetToResponse(request, referer).ConfigureAwait(false); - if (httpResponse == null) { - return null; + using (HttpResponseMessage httpResponse = await UrlGetToResponse(request, referer).ConfigureAwait(false)) { + if (httpResponse == null) { + return null; + } + + return await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); } - - string result = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); - httpResponse.Dispose(); - - return result; } - internal async Task UrlGetToStream(string request, string referer = null) { + internal async Task UrlGetToBytes(string request, string referer = null) { if (string.IsNullOrEmpty(request)) { return null; } - HttpResponseMessage httpResponse = await UrlGetToResponse(request, referer).ConfigureAwait(false); - if (httpResponse == null) { - return null; + using (HttpResponseMessage httpResponse = await UrlGetToResponse(request, referer).ConfigureAwait(false)) { + if (httpResponse == null) { + return null; + } + + return await httpResponse.Content.ReadAsByteArrayAsync().ConfigureAwait(false); } - - Stream result = await httpResponse.Content.ReadAsStreamAsync().ConfigureAwait(false); - httpResponse.Dispose(); - - return result; } internal async Task UrlGetToHtmlDocument(string request, string referer = null) { @@ -220,6 +192,22 @@ namespace ArchiSteamFarm { return xmlDocument; } + private async Task UrlGetToResponse(string request, string referer = null) { + if (string.IsNullOrEmpty(request)) { + return null; + } + + return await UrlRequest(request, HttpMethod.Get, null, referer).ConfigureAwait(false); + } + + private async Task UrlPostToResponse(string request, Dictionary data = null, string referer = null) { + if (string.IsNullOrEmpty(request)) { + return null; + } + + return await UrlRequest(request, HttpMethod.Post, data, referer).ConfigureAwait(false); + } + private async Task UrlRequest(string request, HttpMethod httpMethod, Dictionary data = null, string referer = null) { if (string.IsNullOrEmpty(request) || httpMethod == null) { return null; diff --git a/ArchiSteamFarm/config/ASF.json b/ArchiSteamFarm/config/ASF.json index 047208413..a9e791291 100644 --- a/ArchiSteamFarm/config/ASF.json +++ b/ArchiSteamFarm/config/ASF.json @@ -2,7 +2,7 @@ "Debug": false, "Headless": false, "AutoUpdates": true, - "UpdateChannel": 1, + "UpdateChannel": 2, "SteamProtocol": 6, "SteamOwnerID": 0, "MaxFarmingTime": 10,