From e6e6e22b9cfc76d07f37dc3a9982527bb95842f8 Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Wed, 6 Dec 2023 16:39:48 +0800 Subject: [PATCH] apply hutao api changes --- .../Snap.Hutao/Resource/Localization/SH.resx | 3 +++ .../ViewModel/Setting/SettingViewModel.cs | 11 +++++++++-- .../Snap.Hutao/Web/Hutao/IPInformation.cs | 11 +++++++++-- .../HttpRequestMessageBuilderExtension.cs | 19 +++++++++++++++++++ .../Builder/HttpTryCatchSendStrategy.cs | 10 ++++++++++ 5 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Request/Builder/HttpTryCatchSendStrategy.cs diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx index e79abdea..8977675b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx @@ -2828,6 +2828,9 @@ 无效的 UID + + 胡桃服务维护中 + 验证失败,请手动验证或前往「米游社-我的角色」页面查看 diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs index 5f2fb09c..b3d438ba 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs @@ -107,12 +107,19 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel protected override async ValueTask InitializeUIAsync() { Response resp = await hutaoInfrastructureClient.GetIPInformationAsync().ConfigureAwait(false); + IPInformation info; if (resp.IsOk()) { - await taskContext.SwitchToMainThreadAsync(); - IPInformation = resp.Data; + info = resp.Data; } + else + { + info = IPInformation.Default; + } + + await taskContext.SwitchToMainThreadAsync(); + IPInformation = info; return true; } diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/IPInformation.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/IPInformation.cs index 8546fc7c..f7ee777d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hutao/IPInformation.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hutao/IPInformation.cs @@ -5,10 +5,12 @@ namespace Snap.Hutao.Web.Hutao; internal sealed class IPInformation { + private const string Unknown = "Unknown"; + public static IPInformation Default { get; } = new() { - Ip = "Unknown", - Division = "Unknown", + Ip = Unknown, + Division = Unknown, }; [JsonPropertyName("ip")] @@ -19,6 +21,11 @@ internal sealed class IPInformation public override string ToString() { + if (Ip is Unknown && Division is Unknown) + { + return SH.WebHutaoServiceUnAvailable; + } + return SH.FormatViewPageSettingDeviceIpDescription(Ip, Division); } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Request/Builder/HttpRequestMessageBuilderExtension.cs b/src/Snap.Hutao/Snap.Hutao/Web/Request/Builder/HttpRequestMessageBuilderExtension.cs index 469b5e72..5fe0b0e3 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Request/Builder/HttpRequestMessageBuilderExtension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Request/Builder/HttpRequestMessageBuilderExtension.cs @@ -1,7 +1,9 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. +using Snap.Hutao.Web.Hutao; using System.IO; +using System.Net; using System.Net.Http; using System.Net.Sockets; @@ -12,6 +14,7 @@ internal static class HttpRequestMessageBuilderExtension private const string RequestErrorMessage = "请求异常已忽略"; internal static async ValueTask TryCatchSendAsync(this HttpRequestMessageBuilder builder, HttpClient httpClient, ILogger logger, CancellationToken token) + where TResult : class { try { @@ -26,6 +29,22 @@ internal static class HttpRequestMessageBuilderExtension catch (HttpRequestException ex) { logger.LogWarning(ex, RequestErrorMessage); + + if (ex.StatusCode is HttpStatusCode.BadGateway) + { + Type resultType = typeof(TResult); + + if (resultType == typeof(HutaoResponse)) + { + return Activator.CreateInstance(resultType, 502, SH.WebHutaoServiceUnAvailable, default) as TResult; + } + + if (resultType.IsConstructedGenericType && resultType.GetGenericTypeDefinition() == typeof(HutaoResponse<>)) + { + return Activator.CreateInstance(resultType, 502, SH.WebHutaoServiceUnAvailable, default, default) as TResult; + } + } + return default; } catch (IOException ex) diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Request/Builder/HttpTryCatchSendStrategy.cs b/src/Snap.Hutao/Snap.Hutao/Web/Request/Builder/HttpTryCatchSendStrategy.cs new file mode 100644 index 00000000..53eb0ea1 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Request/Builder/HttpTryCatchSendStrategy.cs @@ -0,0 +1,10 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Request.Builder; + +internal enum HttpTryCatchSendStrategy +{ + Default, + HutaoApi, +} \ No newline at end of file