diff --git a/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs b/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs index 18c605b99..4a93fa94c 100644 --- a/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs +++ b/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs @@ -227,16 +227,21 @@ public sealed class ArchiHandler : ClientMsgHandler { // Interpret the result and see what we should do about it switch (serviceMethodResponse.Result) { - case EResult.Busy: - case EResult.DuplicateRequest: - case EResult.ServiceUnavailable: - // Those are generic failures that we should be able to retry - ArchiLogger.LogGenericDebug(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, serviceMethodResponse.Result)); - - continue; case EResult.OK: // Success, we can continue break; + case EResult.Busy: + case EResult.DuplicateRequest: + case EResult.RemoteCallFailed: + case EResult.ServiceUnavailable: + case EResult.Timeout: + // Expected failures that we should be able to retry + ArchiLogger.LogGenericDebug(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, serviceMethodResponse.Result)); + + continue; + case EResult.NoMatch: + // Expected failures that we're not going to retry + throw new TimeoutException(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, serviceMethodResponse.Result)); default: // Unknown failures, report them and do not retry since we're unsure if we should ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(serviceMethodResponse.Result), serviceMethodResponse.Result)); @@ -261,7 +266,7 @@ public sealed class ArchiHandler : ClientMsgHandler { } if (response.descriptions.Count == 0) { - throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(response.descriptions))); + throw new InvalidOperationException(nameof(response.descriptions)); } if (response.total_inventory_count > Array.MaxLength) { diff --git a/ArchiSteamFarm/Steam/Integration/ArchiWebHandler.cs b/ArchiSteamFarm/Steam/Integration/ArchiWebHandler.cs index 78056ba02..23e36be4b 100644 --- a/ArchiSteamFarm/Steam/Integration/ArchiWebHandler.cs +++ b/ArchiSteamFarm/Steam/Integration/ArchiWebHandler.cs @@ -275,7 +275,7 @@ public sealed class ArchiWebHandler : IDisposable { ObjectResponse? response = null; try { - for (byte i = 0; (i < WebBrowser.MaxTries) && (response?.StatusCode.IsSuccessCode() != true); i++) { + for (byte i = 0; (i < WebBrowser.MaxTries) && (response?.Content is not { Result: EResult.OK } || !response.StatusCode.IsSuccessCode()); i++) { if ((i > 0) && (rateLimitingDelay > 0)) { await Task.Delay(rateLimitingDelay).ConfigureAwait(false); } @@ -300,12 +300,16 @@ public sealed class ArchiWebHandler : IDisposable { // Try to interpret the failure reason and see if we should try again switch (response.Content.ErrorCode) { - case null: case EResult.Busy: case EResult.DuplicateRequest: + case EResult.RemoteCallFailed: case EResult.ServiceUnavailable: - // Those are generic failures that we should be able to retry + case EResult.Timeout: + // Expected failures that we should be able to retry continue; + case EResult.NoMatch: + // Expected failures that we're not going to retry + throw new HttpRequestException(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, response.Content.ErrorText), null, response.StatusCode); default: // Unknown failures, report them and do not retry since we're unsure if we should Bot.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(response.Content.ErrorText), response.Content.ErrorText)); @@ -331,8 +335,8 @@ public sealed class ArchiWebHandler : IDisposable { throw new HttpRequestException(string.Format(CultureInfo.CurrentCulture, Strings.ErrorObjectIsNull, nameof(response))); } - if ((response.Content == null) || (response.StatusCode.IsSuccessCode() != true)) { - throw new HttpRequestException(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, !string.IsNullOrEmpty(response.Content?.ErrorText) ? response.Content.ErrorText : response.Content?.Result.HasValue == true ? response.Content.Result : response.StatusCode)); + if (response.Content is not { Result: EResult.OK } || !response.StatusCode.IsSuccessCode()) { + throw new HttpRequestException(string.Format(CultureInfo.CurrentCulture, Strings.WarningFailedWithError, response.Content?.ErrorText ?? response.Content?.Result?.ToString() ?? response.StatusCode.ToString())); } if ((response.Content.TotalInventoryCount == 0) || (response.Content.Assets.Count == 0)) { @@ -341,7 +345,7 @@ public sealed class ArchiWebHandler : IDisposable { } if (response.Content.Descriptions.Count == 0) { - throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Strings.ErrorIsEmpty, nameof(response.Content.Descriptions))); + throw new InvalidOperationException(nameof(response.Content.Descriptions)); } if (response.Content.TotalInventoryCount > Array.MaxLength) { diff --git a/ArchiSteamFarm/Steam/Integration/SteamUtilities.cs b/ArchiSteamFarm/Steam/Integration/SteamUtilities.cs index 677bd9bf4..87b3bca18 100644 --- a/ArchiSteamFarm/Steam/Integration/SteamUtilities.cs +++ b/ArchiSteamFarm/Steam/Integration/SteamUtilities.cs @@ -71,10 +71,6 @@ public static class SteamUtilities { internal static EResult? InterpretError(string errorText) { ArgumentException.ThrowIfNullOrEmpty(errorText); - if (errorText.StartsWith("EYldRefreshAppIfNecessary", StringComparison.Ordinal)) { - return EResult.ServiceUnavailable; - } - int startIndex = errorText.LastIndexOf('('); if (startIndex < 0) { @@ -96,7 +92,7 @@ public static class SteamUtilities { string errorCodeText = errorText[startIndex..endIndex]; if (!byte.TryParse(errorCodeText, out byte errorCode)) { - ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(errorCodeText), errorCodeText)); + ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(errorText), errorText)); return null; } @@ -104,7 +100,7 @@ public static class SteamUtilities { EResult result = (EResult) errorCode; if (!Enum.IsDefined(result)) { - ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(EResult), result)); + ASF.ArchiLogger.LogGenericError(string.Format(CultureInfo.CurrentCulture, Strings.WarningUnknownValuePleaseReport, nameof(errorText), errorText)); return null; }