From c5313c078d201c323ec41448833fce9cb6253a96 Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Wed, 20 Dec 2023 16:29:00 +0800 Subject: [PATCH] code style --- .../Model/Entity/SettingEntry.Constant.cs | 2 +- .../Snap.Hutao/Service/AppOptions.cs | 4 +- .../Snap.Hutao/Service/AppOptionsExtension.cs | 6 ++ .../Snap.Hutao/Service/KnownRegions.cs | 24 ++----- .../Snap.Hutao/Service/SupportedCultures.cs | 3 +- .../ViewModel/Setting/SettingViewModel.cs | 2 +- .../Common/Announcement/AnnouncementClient.cs | 16 ++--- .../Snap.Hutao/Web/Hoyolab/PlayerUid.cs | 2 +- .../Snap.Hutao/Web/Hoyolab/Region.cs | 62 ++++++++----------- .../Snap.Hutao/Web/Hoyolab/RegionConverter.cs | 6 +- .../Hoyolab/Takumi/Binding/GenAuthKeyData.cs | 1 - .../Hoyolab/Takumi/Binding/UserGameRole.cs | 1 - .../Takumi/Event/BbsSignReward/SignInData.cs | 1 - .../Takumi/Event/Calculate/CalculateClient.cs | 1 - .../Takumi/GameRecord/Avatar/CharacterData.cs | 1 - .../Hoyolab/Takumi/GameRecord/Avatar/Role.cs | 2 +- .../Takumi/GameRecord/BasicRoleInfo.cs | 2 +- 17 files changed, 57 insertions(+), 79 deletions(-) diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.Constant.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.Constant.cs index a62fd8e2..29249345 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.Constant.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.Constant.cs @@ -128,5 +128,5 @@ internal sealed partial class SettingEntry /// public const string GeetestCustomCompositeUrl = "GeetestCustomCompositeUrl"; - public const string Region = "Region"; + public const string AnnouncementRegion = "AnnouncementRegion"; } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs index 3840165d..be60187b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs @@ -78,8 +78,8 @@ internal sealed partial class AppOptions : DbStoreOptions public Region Region { - get => GetOption(ref region, SettingEntry.Region, v => Region.FromRegion(v), Regions[0].Value).Value; - set => SetOption(ref region, SettingEntry.Region, value, value => value.ToStringOrEmpty()); + get => GetOption(ref region, SettingEntry.AnnouncementRegion, v => Region.FromRegionString(v), Region.CNGF01).Value; + set => SetOption(ref region, SettingEntry.AnnouncementRegion, value, value => value.ToStringOrEmpty()); } public string GeetestCustomCompositeUrl diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AppOptionsExtension.cs b/src/Snap.Hutao/Snap.Hutao/Service/AppOptionsExtension.cs index d05ac848..a534248f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/AppOptionsExtension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/AppOptionsExtension.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using Snap.Hutao.Model; +using Snap.Hutao.Web.Hoyolab; using System.Globalization; namespace Snap.Hutao.Service; @@ -12,4 +13,9 @@ internal static class AppOptionsExtension { return appOptions.Cultures.SingleOrDefault(c => c.Value == appOptions.CurrentCulture); } + + public static NameValue? GetCurrentRegionForSelectionOrDefault(this AppOptions appOptions) + { + return appOptions.Regions.SingleOrDefault(c => c.Value.Value == appOptions.Region.Value); + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/KnownRegions.cs b/src/Snap.Hutao/Snap.Hutao/Service/KnownRegions.cs index a7f61efe..1d256c9c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/KnownRegions.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/KnownRegions.cs @@ -8,28 +8,16 @@ namespace Snap.Hutao.Service; internal static class KnownRegions { - private static readonly Region RegionCNGF01 = new("cn_gf01"); - private static readonly Region RegionCNQD01 = new("cn_qd01"); - private static readonly Region RegionOSUSA = new("os_usa"); - private static readonly Region RegionOSEURO = new("os_euro"); - private static readonly Region RegionOSASIA = new("os_asia"); - private static readonly Region RegionOSCHT = new("os_cht"); - public static List> Get() { return [ - ToNameValue(RegionCNGF01), - ToNameValue(RegionCNQD01), - ToNameValue(RegionOSUSA), - ToNameValue(RegionOSEURO), - ToNameValue(RegionOSASIA), - ToNameValue(RegionOSCHT), + new(SH.WebHoyolabRegionCNGF01, Region.CNGF01), + new(SH.WebHoyolabRegionCNQD01, Region.CNQD01), + new(SH.WebHoyolabRegionOSUSA, Region.OSUSA), + new(SH.WebHoyolabRegionOSEURO, Region.OSEURO), + new(SH.WebHoyolabRegionOSASIA, Region.OSASIA), + new(SH.WebHoyolabRegionOSCHT, Region.OSCHT), ]; } - - private static NameValue ToNameValue(in Region region) - { - return new(region.DisplayName, region); - } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/SupportedCultures.cs b/src/Snap.Hutao/Snap.Hutao/Service/SupportedCultures.cs index 8e352ef8..975f437f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/SupportedCultures.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/SupportedCultures.cs @@ -13,8 +13,9 @@ internal static class SupportedCultures ToNameValue(CultureInfo.GetCultureInfo("zh-Hans")), ToNameValue(CultureInfo.GetCultureInfo("zh-Hant")), ToNameValue(CultureInfo.GetCultureInfo("en")), - ToNameValue(CultureInfo.GetCultureInfo("ko")), ToNameValue(CultureInfo.GetCultureInfo("ja")), + ToNameValue(CultureInfo.GetCultureInfo("id")), + ToNameValue(CultureInfo.GetCultureInfo("ko")), ]; public static List> Get() diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs index 2a4996f0..cb863518 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs @@ -108,7 +108,7 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel public NameValue? SelectedRegion { - get => selectedRegion ??= AppOptions.Regions.Single(t => t.Value.Value == AppOptions.Region.Value); + get => selectedRegion ??= AppOptions.GetCurrentRegionForSelectionOrDefault(); set { if (SetProperty(ref selectedRegion, value) && value is not null) 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 c1bc8ea1..9f467c37 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 @@ -29,11 +29,9 @@ internal sealed partial class AnnouncementClient /// 公告列表 public async ValueTask> GetAnnouncementsAsync(string languageCode, Region region, CancellationToken token = default) { - string annListUrl = region.IsOversea switch - { - true => ApiOsEndpoints.AnnList(languageCode, region.Value), - false => ApiEndpoints.AnnList(languageCode, region.Value), - }; + string annListUrl = region.IsOversea() + ? ApiOsEndpoints.AnnList(languageCode, region) + : ApiEndpoints.AnnList(languageCode, region); HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() .SetRequestUri(annListUrl) @@ -55,11 +53,9 @@ internal sealed partial class AnnouncementClient /// 公告内容列表 public async ValueTask>> GetAnnouncementContentsAsync(string languageCode, Region region, CancellationToken token = default) { - string annContentUrl = region.IsOversea switch - { - true => ApiOsEndpoints.AnnContent(languageCode, region.Value), - false => ApiEndpoints.AnnContent(languageCode, region.Value), - }; + string annContentUrl = region.IsOversea() + ? ApiOsEndpoints.AnnContent(languageCode, region) + : ApiEndpoints.AnnContent(languageCode, region); HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() .SetRequestUri(annContentUrl) diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PlayerUid.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PlayerUid.cs index c1fa8b94..fcb7f7c6 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PlayerUid.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/PlayerUid.cs @@ -28,7 +28,7 @@ internal readonly partial struct PlayerUid { Must.Argument(HoyolabRegex.UidRegex().IsMatch(value), SH.WebHoyolabInvalidUid); Value = value; - Region = region ?? Region.FromUid(value); + Region = region ?? Region.FromUidString(value); } public static implicit operator PlayerUid(string source) diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Region.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Region.cs index b7dba2a3..9b8cdb5c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Region.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Region.cs @@ -1,36 +1,37 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. - namespace Snap.Hutao.Web.Hoyolab; +[JsonConverter(typeof(RegionConverter))] internal readonly partial struct Region { - public readonly string DisplayName; + public static readonly Region CNGF01 = new("cn_gf01"); + public static readonly Region CNQD01 = new("cn_qd01"); + public static readonly Region OSUSA = new("os_usa"); + public static readonly Region OSEURO = new("os_euro"); + public static readonly Region OSASIA = new("os_asia"); + public static readonly Region OSCHT = new("os_cht"); public readonly string Value; - public readonly bool IsOversea; - - public Region(string value, bool? isOversea = default) + public Region(string value) { Must.Argument(HoyolabRegex.RegionRegex().IsMatch(value), SH.WebHoyolabInvalidRegion); - DisplayName = EvaluateDisplayName(value); Value = value; - IsOversea = isOversea ?? EvaluateIsOversea(value.AsSpan()[0]); } public static implicit operator Region(string value) { - return FromRegion(value); + return FromRegionString(value); } - public static Region FromRegion(string value) + public static Region FromRegionString(string value) { return new(value); } - public static Region FromUid(string uid) + public static Region FromUidString(string uid) { return uid.AsSpan()[0] switch { @@ -47,32 +48,23 @@ internal readonly partial struct Region }; } + public static bool IsOversea(string value) + { + Must.Argument(HoyolabRegex.RegionRegex().IsMatch(value), SH.WebHoyolabInvalidRegion); + return value.AsSpan()[..2] switch + { + "os" => true, + _ => false, + }; + } + + public readonly bool IsOversea() + { + return IsOversea(Value); + } + public override string ToString() { return Value; } - - private static string EvaluateDisplayName(string value) - { - return value switch - { - "cn_gf01" => SH.WebHoyolabRegionCNGF01, - "cn_qd01" => SH.WebHoyolabRegionCNQD01, - "os_usa" => SH.WebHoyolabRegionOSUSA, - "os_euro" => SH.WebHoyolabRegionOSEURO, - "os_asia" => SH.WebHoyolabRegionOSASIA, - "os_cht" => SH.WebHoyolabRegionOSCHT, - _ => throw Must.NeverHappen(), - }; - } - - private static bool EvaluateIsOversea(in char first) - { - return first switch - { - 'c' => false, - 'o' => true, - _ => throw Must.NeverHappen(), - }; - } -} +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/RegionConverter.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/RegionConverter.cs index 209ad3ac..6f5e1936 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/RegionConverter.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/RegionConverter.cs @@ -9,14 +9,14 @@ internal sealed class RegionConverter : JsonConverter { if (reader.GetString() is { } regionValue) { - return Region.FromRegion(regionValue); + return Region.FromRegionString(regionValue); } - return default; + throw new JsonException(); } public override void Write(Utf8JsonWriter writer, Region value, JsonSerializerOptions options) { - writer.WriteStringValue(value.ToString()); + writer.WriteStringValue(value.Value); } } diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/GenAuthKeyData.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/GenAuthKeyData.cs index a5a4bba5..fd657b70 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/GenAuthKeyData.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/GenAuthKeyData.cs @@ -50,7 +50,6 @@ internal sealed class GenAuthKeyData /// 区域 /// [JsonPropertyName("region")] - [JsonConverter(typeof(RegionConverter))] public Region Region { get; set; } = default!; /// diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/UserGameRole.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/UserGameRole.cs index 2e8ca931..e3322d57 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/UserGameRole.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Binding/UserGameRole.cs @@ -19,7 +19,6 @@ internal sealed class UserGameRole /// 服务器 /// [JsonPropertyName("region")] - [JsonConverter(typeof(RegionConverter))] public Region Region { get; set; } = default!; /// diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInData.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInData.cs index 53a48daa..6f8b1239 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInData.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/BbsSignReward/SignInData.cs @@ -31,7 +31,6 @@ internal sealed class SignInData /// 地区代码 /// [JsonPropertyName("region")] - [JsonConverter(typeof(RegionConverter))] public Region Region { get; } /// diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/Calculate/CalculateClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/Calculate/CalculateClient.cs index 0a875ae8..88257ea7 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/Calculate/CalculateClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/Event/Calculate/CalculateClient.cs @@ -181,7 +181,6 @@ internal sealed partial class CalculateClient public string Uid { get; set; } = default!; [JsonPropertyName("region")] - [JsonConverter(typeof(RegionConverter))] public Region Region { get; set; } = default!; } diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Avatar/CharacterData.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Avatar/CharacterData.cs index 10dbcae5..eb45a306 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Avatar/CharacterData.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Avatar/CharacterData.cs @@ -39,6 +39,5 @@ internal sealed class CharacterData /// 服务器 /// [JsonPropertyName("server")] - [JsonConverter(typeof(RegionConverter))] public Region Server { get; } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Avatar/Role.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Avatar/Role.cs index b54e899d..ec870534 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Avatar/Role.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/Avatar/Role.cs @@ -25,7 +25,7 @@ internal sealed class Role /// 服务器名称 /// [JsonPropertyName("region")] - public string Region { get; set; } = default!; + public string RegionName { get; set; } = default!; /// /// 等级 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/BasicRoleInfo.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/BasicRoleInfo.cs index 80142c67..a5fcd812 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/BasicRoleInfo.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/Takumi/GameRecord/BasicRoleInfo.cs @@ -26,7 +26,7 @@ internal sealed class BasicRoleInfo /// 服务器名称 /// [JsonPropertyName("region")] - public string Region { get; set; } = default!; + public string RegionName { get; set; } = default!; /// /// 等级