diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Abstraction/IAnnouncementService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Abstraction/IAnnouncementService.cs
index d198ae93..3c86893a 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Abstraction/IAnnouncementService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Abstraction/IAnnouncementService.cs
@@ -1,6 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
+using Snap.Hutao.Web.Hoyolab;
using Snap.Hutao.Web.Hoyolab.Hk4e.Common.Announcement;
namespace Snap.Hutao.Service.Abstraction;
@@ -15,7 +16,8 @@ internal interface IAnnouncementService
/// 异步获取游戏公告与活动,通常会进行缓存
///
/// 语言代码
+ /// 服务器
/// 取消令牌
/// 公告包装器
- ValueTask GetAnnouncementWrapperAsync(string languageCode, CancellationToken cancellationToken = default);
+ ValueTask GetAnnouncementWrapperAsync(string languageCode, RegionType region, CancellationToken cancellationToken = default);
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AnnouncementService.cs b/src/Snap.Hutao/Snap.Hutao/Service/AnnouncementService.cs
index 55c3038a..aac92b84 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/AnnouncementService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/AnnouncementService.cs
@@ -3,6 +3,7 @@
using Microsoft.Extensions.Caching.Memory;
using Snap.Hutao.Service.Abstraction;
+using Snap.Hutao.Web.Hoyolab;
using Snap.Hutao.Web.Hoyolab.Hk4e.Common.Announcement;
using Snap.Hutao.Web.Response;
using System.Globalization;
@@ -25,17 +26,17 @@ internal sealed partial class AnnouncementService : IAnnouncementService
private readonly IMemoryCache memoryCache;
///
- public async ValueTask GetAnnouncementWrapperAsync(string languageCode, CancellationToken cancellationToken = default)
+ public async ValueTask GetAnnouncementWrapperAsync(string languageCode, RegionType region, CancellationToken cancellationToken = default)
{
// 缓存中存在记录,直接返回
- if (memoryCache.TryGetRequiredValue(CacheKey, out AnnouncementWrapper? cache))
+ if (memoryCache.TryGetRequiredValue($"{CacheKey}.{languageCode}.{region}", out AnnouncementWrapper? cache))
{
return cache;
}
await taskContext.SwitchToBackgroundAsync();
Response announcementWrapperResponse = await announcementClient
- .GetAnnouncementsAsync(languageCode, cancellationToken)
+ .GetAnnouncementsAsync(languageCode, region, cancellationToken)
.ConfigureAwait(false);
if (!announcementWrapperResponse.IsOk())
@@ -45,7 +46,7 @@ internal sealed partial class AnnouncementService : IAnnouncementService
AnnouncementWrapper wrapper = announcementWrapperResponse.Data;
Response> announcementContentResponse = await announcementClient
- .GetAnnouncementContentsAsync(languageCode, cancellationToken)
+ .GetAnnouncementContentsAsync(languageCode, region, cancellationToken)
.ConfigureAwait(false);
if (!announcementContentResponse.IsOk())
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Home/AnnouncementViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Home/AnnouncementViewModel.cs
index 39d463bd..05a33680 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Home/AnnouncementViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Home/AnnouncementViewModel.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license.
using Snap.Hutao.Core.Setting;
+using Snap.Hutao.Service;
using Snap.Hutao.Service.Abstraction;
using Snap.Hutao.Service.Hutao;
using Snap.Hutao.Service.Metadata;
@@ -25,6 +26,7 @@ internal sealed partial class AnnouncementViewModel : Abstraction.ViewModel
private readonly HutaoUserOptions hutaoUserOptions;
private readonly ITaskContext taskContext;
private readonly MetadataOptions metadataOptions;
+ private readonly AppOptions appOptions;
private AnnouncementWrapper? announcement;
private string greetingText = SH.ViewPageHomeGreetingTextDefault;
@@ -63,7 +65,7 @@ internal sealed partial class AnnouncementViewModel : Abstraction.ViewModel
{
try
{
- AnnouncementWrapper announcementWrapper = await announcementService.GetAnnouncementWrapperAsync(metadataOptions.LanguageCode, CancellationToken).ConfigureAwait(false);
+ AnnouncementWrapper announcementWrapper = await announcementService.GetAnnouncementWrapperAsync(metadataOptions.LanguageCode, appOptions.RegionType, CancellationToken).ConfigureAwait(false);
await taskContext.SwitchToMainThreadAsync();
Announcement = announcementWrapper;
}
diff --git a/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs b/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs
index 881b3c55..cb9986a8 100644
--- a/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Web/ApiEndpoints.cs
@@ -281,12 +281,18 @@ internal static class ApiEndpoints
///
/// 公告列表
///
- public const string AnnList = $"{Hk4eApiAnnouncementApi}/getAnnList?{AnnouncementQuery}";
+ public static string AnnList(string languageCode, string region)
+ {
+ return $"{Hk4eApiAnnouncementApi}/getAnnList?{AnnouncementQuery(languageCode, region)}";
+ }
///
/// 公告内容
///
- public const string AnnContent = $"{Hk4eApiAnnouncementApi}/getAnnContent?{AnnouncementQuery}";
+ public static string AnnContent(string languageCode, string region)
+ {
+ return $"{Hk4eApiAnnouncementApi}/getAnnContent?{AnnouncementQuery(languageCode, region)}";
+ }
#endregion
#region Hk4eSdk
@@ -422,6 +428,9 @@ internal static class ApiEndpoints
///
public const string WebStaticMihoyoReferer = "https://webstatic.mihoyo.com";
- private const string AnnouncementQuery = "game=hk4e&game_biz=hk4e_cn&lang=zh-cn&bundle_id=hk4e_cn&platform=pc®ion=cn_gf01&level=55&uid=100000000";
+ private static string AnnouncementQuery(string languageCode, string region)
+ {
+ return $"game=hk4e&game_biz=hk4e_cn&lang={languageCode}&bundle_id=hk4e_cn&platform=pc®ion={region}&level=55&uid=100000000";
+ }
#endregion
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementClient.cs
index f9d0d227..417d6137 100644
--- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementClient.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Hk4e/Common/Announcement/AnnouncementClient.cs
@@ -24,12 +24,21 @@ internal sealed partial class AnnouncementClient
/// 异步获取公告列表
///
/// 语言代码
+ /// 服务器
/// 取消令牌
/// 公告列表
- public async ValueTask> GetAnnouncementsAsync(string languageCode, CancellationToken token = default)
+ public async ValueTask> GetAnnouncementsAsync(string languageCode, RegionType region, CancellationToken token = default)
{
- // ApiOsEndpoints.AnnList(languageCode, region)
- string annListUrl = ApiEndpoints.AnnList;
+ string annListUrl = region switch
+ {
+ RegionType.CN_GF01 => ApiEndpoints.AnnList(languageCode, region.ToString().ToLowerInvariant()),
+ RegionType.CN_QD01 => ApiEndpoints.AnnList(languageCode, region.ToString().ToLowerInvariant()),
+ RegionType.OS_USA => ApiOsEndpoints.AnnList(languageCode, region.ToString().ToLowerInvariant()),
+ RegionType.OS_EURO => ApiOsEndpoints.AnnList(languageCode, region.ToString().ToLowerInvariant()),
+ RegionType.OS_ASIA => ApiOsEndpoints.AnnList(languageCode, region.ToString().ToLowerInvariant()),
+ RegionType.OS_CHT => ApiOsEndpoints.AnnList(languageCode, region.ToString().ToLowerInvariant()),
+ _ => ApiEndpoints.AnnList(languageCode, RegionType.CN_GF01.ToString().ToLowerInvariant()),
+ };
HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(annListUrl)
@@ -46,12 +55,21 @@ internal sealed partial class AnnouncementClient
/// 异步获取公告内容列表
///
/// 语言代码
+ /// 服务器
/// 取消令牌
/// 公告内容列表
- public async ValueTask>> GetAnnouncementContentsAsync(string languageCode, CancellationToken token = default)
+ public async ValueTask>> GetAnnouncementContentsAsync(string languageCode, RegionType region, CancellationToken token = default)
{
- // ApiOsEndpoints.AnnContent(languageCode, region)
- string annContentUrl = ApiEndpoints.AnnContent;
+ string annContentUrl = region switch
+ {
+ RegionType.CN_GF01 => ApiEndpoints.AnnContent(languageCode, region.ToString().ToLowerInvariant()),
+ RegionType.CN_QD01 => ApiEndpoints.AnnContent(languageCode, region.ToString().ToLowerInvariant()),
+ RegionType.OS_USA => ApiOsEndpoints.AnnContent(languageCode, region.ToString().ToLowerInvariant()),
+ RegionType.OS_EURO => ApiOsEndpoints.AnnContent(languageCode, region.ToString().ToLowerInvariant()),
+ RegionType.OS_ASIA => ApiOsEndpoints.AnnContent(languageCode, region.ToString().ToLowerInvariant()),
+ RegionType.OS_CHT => ApiOsEndpoints.AnnContent(languageCode, region.ToString().ToLowerInvariant()),
+ _ => ApiEndpoints.AnnContent(languageCode, RegionType.CN_GF01.ToString().ToLowerInvariant()),
+ };
HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create()
.SetRequestUri(annContentUrl)