From d4e9c2aa9c8bacfe3d5bb75f0c328e42a4e73b3c Mon Sep 17 00:00:00 2001
From: Lightczx <1686188646@qq.com>
Date: Mon, 13 Nov 2023 15:37:06 +0800
Subject: [PATCH] localenames
---
.../Snap.Hutao.SourceGeneration.csproj | 10 +--
.../Snap.Hutao.Test/Snap.Hutao.Test.csproj | 2 +-
.../Snap.Hutao/Resource/Localization/SH.resx | 3 +
.../Service/Metadata/LocaleNames.cs | 84 +++++++++++--------
.../Service/Metadata/MetadataOptions.cs | 12 ++-
.../Service/Metadata/MetadataService.cs | 6 +-
6 files changed, 66 insertions(+), 51 deletions(-)
diff --git a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Snap.Hutao.SourceGeneration.csproj b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Snap.Hutao.SourceGeneration.csproj
index a1f0f38a..62f03b54 100644
--- a/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Snap.Hutao.SourceGeneration.csproj
+++ b/src/Snap.Hutao/Snap.Hutao.SourceGeneration/Snap.Hutao.SourceGeneration.csproj
@@ -7,17 +7,9 @@
enable
x64
true
- Debug;Release;Debug As Fake Elevated
+ Debug;Release
-
-
-
-
-
-
-
-
diff --git a/src/Snap.Hutao/Snap.Hutao.Test/Snap.Hutao.Test.csproj b/src/Snap.Hutao/Snap.Hutao.Test/Snap.Hutao.Test.csproj
index 96004082..3949e0f1 100644
--- a/src/Snap.Hutao/Snap.Hutao.Test/Snap.Hutao.Test.csproj
+++ b/src/Snap.Hutao/Snap.Hutao.Test/Snap.Hutao.Test.csproj
@@ -7,7 +7,7 @@
false
true
True
- Debug;Release;Debug As Fake Elevated
+ Debug;Release
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
index 6a5fd97a..882f607f 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
@@ -932,6 +932,9 @@
无法找到缓存的元数据文件
+
+ HTTP {0}:元数据校验文件下载失败
+
元数据服务尚未初始化,或初始化失败
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/LocaleNames.cs b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/LocaleNames.cs
index e86b1b2f..c760a0df 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/LocaleNames.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/LocaleNames.cs
@@ -1,8 +1,6 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
-using System.Collections.Immutable;
-
namespace Snap.Hutao.Service.Metadata;
///
@@ -26,42 +24,54 @@ internal static class LocaleNames
public const string CHS = "CHS"; // Chinese (Simplified)
public const string CHT = "CHT"; // Chinese (Traditional)
- public static readonly ImmutableDictionary LanguageNameLocaleNameMap = new Dictionary()
+ public static bool TryGetLocaleNameFromLanguageName(string languageName, [NotNullWhen(true)] out string? localeName)
{
- ["de"] = DE,
- ["en"] = EN,
- ["es"] = ES,
- ["fr"] = FR,
- ["id"] = ID,
- ["it"] = IT,
- ["ja"] = JP,
- ["ko"] = KR,
- ["pt"] = PT,
- ["ru"] = RU,
- ["th"] = TH,
- ["tr"] = TR,
- ["vi"] = VI,
- ["zh-Hans"] = CHS,
- ["zh-Hant"] = CHT,
- [string.Empty] = CHS, // Fallback to Chinese.
- }.ToImmutableDictionary();
+ localeName = languageName switch
+ {
+ "de" => DE,
+ "en" => EN,
+ "es" => ES,
+ "fr" => FR,
+ "id" => ID,
+ "it" => IT,
+ "ja" => JP,
+ "ko" => KR,
+ "pt" => PT,
+ "ru" => RU,
+ "th" => TH,
+ "tr" => TR,
+ "vi" => VI,
+ "zh-Hans" => CHS,
+ "zh-Hant" => CHT,
+ "" => CHS, // Fallback to Chinese.
+ _ => string.Empty,
+ };
- public static readonly ImmutableDictionary LocaleNameLanguageCodeMap = new Dictionary()
+ return !string.IsNullOrEmpty(localeName);
+ }
+
+ public static bool TryGetLanguageCodeFromLocaleName(string localeName, [NotNullWhen(true)] out string? languageCode)
{
- [DE] = "de-de",
- [EN] = "en-us",
- [ES] = "es-es",
- [FR] = "fr-fr",
- [ID] = "id-id",
- [IT] = "it-it",
- [JP] = "ja-jp",
- [KR] = "ko-kr",
- [PT] = "pt-pt",
- [RU] = "ru-ru",
- [TH] = "th-th",
- [TR] = "tr-tr",
- [VI] = "vi-vn",
- [CHS] = "zh-cn",
- [CHT] = "zh-tw",
- }.ToImmutableDictionary();
+ languageCode = localeName switch
+ {
+ DE => "de-de",
+ EN => "en-us",
+ ES => "es-es",
+ FR => "fr-fr",
+ ID => "id-id",
+ IT => "it-it",
+ JP => "ja-jp",
+ KR => "ko-kr",
+ PT => "pt-pt",
+ RU => "ru-ru",
+ TH => "th-th",
+ TR => "tr-tr",
+ VI => "vi-vn",
+ CHS => "zh-cn",
+ CHT => "zh-tw",
+ _ => string.Empty,
+ };
+
+ return !string.IsNullOrEmpty(languageCode);
+ }
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs
index 4cc8e4a8..ac89edb7 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs
@@ -69,7 +69,15 @@ internal sealed partial class MetadataOptions : IOptions
///
public string LanguageCode
{
- get => LocaleNames.LocaleNameLanguageCodeMap[LocaleName];
+ get
+ {
+ if (LocaleNames.TryGetLanguageCodeFromLocaleName(LocaleName, out string? languageCode))
+ {
+ return languageCode;
+ }
+
+ throw new KeyNotFoundException($"Invalid localeName: '{LocaleName}'");
+ }
}
///
@@ -84,7 +92,7 @@ internal sealed partial class MetadataOptions : IOptions
{
while (true)
{
- if (LocaleNames.LanguageNameLocaleNameMap.TryGetValue(cultureInfo.Name, out string? localeName))
+ if (LocaleNames.TryGetLocaleNameFromLanguageName(cultureInfo.Name, out string? localeName))
{
return localeName;
}
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs
index 851db7a0..f2c8192e 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs
@@ -9,6 +9,7 @@ using Snap.Hutao.Core.ExceptionService;
using Snap.Hutao.Core.IO.Hashing;
using Snap.Hutao.Core.Setting;
using Snap.Hutao.Service.Notification;
+using System.Globalization;
using System.IO;
using System.Net;
using System.Net.Http;
@@ -90,13 +91,14 @@ internal sealed partial class MetadataService : IMetadataService, IMetadataServi
}
catch (HttpRequestException ex)
{
- if (ex.StatusCode is HttpStatusCode.Forbidden or HttpStatusCode.NotFound)
+ if (ex.StatusCode is (HttpStatusCode)418)
{
infoBarService.Error(SH.ServiceMetadataVersionNotSupported);
}
else
{
- infoBarService.Error(ex, SH.ServiceMetadataRequestFailed);
+ int code = (int)(ex.StatusCode ?? 0);
+ infoBarService.Error(SH.FormatServiceMetadataHttpRequestFailed(CultureInfo.CurrentCulture, code));
}
return false;