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