From 1ebcc2fc89a828c50e1594525b3bbeea319ee7c4 Mon Sep 17 00:00:00 2001 From: DismissedLight <1686188646@qq.com> Date: Sun, 7 Jan 2024 14:49:02 +0800 Subject: [PATCH] add documentation client --- .../DependencyInjection.cs | 6 +-- .../DependencyInjection/IocConfiguration.cs | 4 +- .../IocHttpClientConfiguration.cs | 4 +- .../Core/Windowing/WindowController.cs | 6 +-- .../Model/InterChange/GachaLog/UIGFInfo.cs | 7 +-- .../Model/InterChange/Inventory/UIIFInfo.cs | 4 +- .../Snap.Hutao/Service/AppOptions.cs | 12 ----- .../Snap.Hutao/Service/AppOptionsExtension.cs | 6 --- .../Snap.Hutao/Service/CultureOptions.cs | 43 +++++++++++++++++ ...xtension.cs => CultureOptionsExtension.cs} | 17 +++---- .../GachaLogQueryManualInputProvider.cs | 6 +-- .../GachaLogQuerySTokenProvider.cs | 4 +- .../GachaLogQueryWebCacheProvider.cs | 6 +-- .../Service/GachaLog/UIGFExportService.cs | 4 +- .../Service/GachaLog/UIGFImportService.cs | 6 +-- ...aunchExecutionEnsureGameResourceHandler.cs | 2 - .../Service/{Metadata => }/LocaleNames.cs | 2 +- .../Service/Metadata/MetadataOptions.cs | 26 ++++------- .../Snap.Hutao/View/Guide/GuideView.xaml | 2 +- .../Snap.Hutao/View/Page/SettingPage.xaml | 14 +++--- .../ViewModel/Guide/DownloadSummary.cs | 4 +- .../ViewModel/Guide/GuideViewModel.cs | 8 ++-- .../ViewModel/Home/AnnouncementViewModel.cs | 4 +- .../ViewModel/Setting/SettingViewModel.cs | 11 +++-- .../Snap.Hutao/Web/Bridge/MiHoYoJSBridge.cs | 5 +- .../Event/BbsSignReward/SignInClient.cs | 9 ++-- .../Web/Hutao/Algolia/AlgoliaHierarchy.cs | 34 ++++++++++++++ .../Web/Hutao/Algolia/AlgoliaHit.cs | 19 ++++++++ .../Web/Hutao/Algolia/AlgoliaRequest.cs | 22 +++++++++ .../Hutao/Algolia/AlgoliaRequestsWrapper.cs | 10 ++++ .../Web/Hutao/Algolia/AlgoliaResponse.cs | 9 ++++ .../Web/Hutao/Algolia/AlgoliaResult.cs | 16 +++++++ .../Hutao/Algolia/HutaoDocumentationClient.cs | 46 +++++++++++++++++++ .../HutaoAsAService/HutaoAsAServiceClient.cs | 5 +- 34 files changed, 278 insertions(+), 105 deletions(-) create mode 100644 src/Snap.Hutao/Snap.Hutao/Service/CultureOptions.cs rename src/Snap.Hutao/Snap.Hutao/Service/{Metadata/MetadataOptionsExtension.cs => CultureOptionsExtension.cs} (58%) rename src/Snap.Hutao/Snap.Hutao/Service/{Metadata => }/LocaleNames.cs (98%) create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hutao/Algolia/AlgoliaHierarchy.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hutao/Algolia/AlgoliaHit.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hutao/Algolia/AlgoliaRequest.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hutao/Algolia/AlgoliaRequestsWrapper.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hutao/Algolia/AlgoliaResponse.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hutao/Algolia/AlgoliaResult.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Web/Hutao/Algolia/HutaoDocumentationClient.cs diff --git a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/DependencyInjection.cs b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/DependencyInjection.cs index 7799061a..4e778855 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/DependencyInjection.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/DependencyInjection.cs @@ -48,10 +48,10 @@ internal static class DependencyInjection [MethodImpl(MethodImplOptions.AggressiveInlining)] private static void InitializeCulture(this IServiceProvider serviceProvider) { - AppOptions appOptions = serviceProvider.GetRequiredService(); - appOptions.PreviousCulture = CultureInfo.CurrentCulture; + CultureOptions cultureOptions = serviceProvider.GetRequiredService(); + cultureOptions.SystemCulture = CultureInfo.CurrentCulture; - CultureInfo cultureInfo = appOptions.CurrentCulture; + CultureInfo cultureInfo = cultureOptions.CurrentCulture; CultureInfo.DefaultThreadCurrentCulture = cultureInfo; CultureInfo.DefaultThreadCurrentUICulture = cultureInfo; diff --git a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocConfiguration.cs b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocConfiguration.cs index 1d01bcf7..13e7329d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocConfiguration.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocConfiguration.cs @@ -38,8 +38,8 @@ internal static class IocConfiguration private static void AddDbContextCore(IServiceProvider provider, DbContextOptionsBuilder builder) { - RuntimeOptions hutaoOptions = provider.GetRequiredService(); - string dbFile = System.IO.Path.Combine(hutaoOptions.DataFolder, "Userdata.db"); + RuntimeOptions runtimeOptions = provider.GetRequiredService(); + string dbFile = System.IO.Path.Combine(runtimeOptions.DataFolder, "Userdata.db"); string sqlConnectionString = $"Data Source={dbFile}"; // Temporarily create a context diff --git a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs index 1d091b32..debe28d1 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocHttpClientConfiguration.cs @@ -29,10 +29,10 @@ internal static partial class IocHttpClientConfiguration /// 配置后的客户端 private static void DefaultConfiguration(IServiceProvider serviceProvider, HttpClient client) { - RuntimeOptions hutaoOptions = serviceProvider.GetRequiredService(); + RuntimeOptions runtimeOptions = serviceProvider.GetRequiredService(); client.Timeout = Timeout.InfiniteTimeSpan; - client.DefaultRequestHeaders.UserAgent.ParseAdd(hutaoOptions.UserAgent); + client.DefaultRequestHeaders.UserAgent.ParseAdd(runtimeOptions.UserAgent); } /// diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowController.cs b/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowController.cs index 40bfc52b..72aeb090 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowController.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Windowing/WindowController.cs @@ -53,10 +53,10 @@ internal sealed class WindowController private void InitializeCore() { - RuntimeOptions hutaoOptions = serviceProvider.GetRequiredService(); + RuntimeOptions runtimeOptions = serviceProvider.GetRequiredService(); - window.AppWindow.Title = SH.FormatAppNameAndVersion(hutaoOptions.Version); - window.AppWindow.SetIcon(Path.Combine(hutaoOptions.InstalledLocation, "Assets/Logo.ico")); + window.AppWindow.Title = SH.FormatAppNameAndVersion(runtimeOptions.Version); + window.AppWindow.SetIcon(Path.Combine(runtimeOptions.InstalledLocation, "Assets/Logo.ico")); ExtendsContentIntoTitleBar(); RecoverOrInitWindowSize(); diff --git a/src/Snap.Hutao/Snap.Hutao/Model/InterChange/GachaLog/UIGFInfo.cs b/src/Snap.Hutao/Snap.Hutao/Model/InterChange/GachaLog/UIGFInfo.cs index f0eeae6e..00bb5a22 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/InterChange/GachaLog/UIGFInfo.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/InterChange/GachaLog/UIGFInfo.cs @@ -3,6 +3,7 @@ using Snap.Hutao.Core; using Snap.Hutao.Core.Abstraction; +using Snap.Hutao.Service; using Snap.Hutao.Service.Metadata; using Snap.Hutao.Web.Hoyolab; @@ -12,7 +13,7 @@ namespace Snap.Hutao.Model.InterChange.GachaLog; /// UIGF格式的信息 /// [HighQuality] -internal sealed class UIGFInfo : IMappingFrom +internal sealed class UIGFInfo : IMappingFrom { /// /// 用户Uid @@ -65,12 +66,12 @@ internal sealed class UIGFInfo : IMappingFrom专用 UIGF 信息 public static UIIFInfo From(IServiceProvider serviceProvider, string uid) { - RuntimeOptions hutaoOptions = serviceProvider.GetRequiredService(); + RuntimeOptions runtimeOptions = serviceProvider.GetRequiredService(); return new() { Uid = uid, ExportTimestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(), ExportApp = SH.AppName, - ExportAppVersion = hutaoOptions.Version.ToString(), + ExportAppVersion = runtimeOptions.Version.ToString(), UIIFVersion = UIIF.CurrentVersion, }; } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs index db07e9c5..e2baa3f4 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs @@ -6,7 +6,6 @@ using Snap.Hutao.Model; using Snap.Hutao.Model.Entity; using Snap.Hutao.Service.Abstraction; using Snap.Hutao.Web.Hoyolab; -using System.Globalization; namespace Snap.Hutao.Service; @@ -16,7 +15,6 @@ internal sealed partial class AppOptions : DbStoreOptions { private bool? isEmptyHistoryWishVisible; private BackdropType? backdropType; - private CultureInfo? currentCulture; private Region? region; private string? geetestCustomCompositeUrl; @@ -34,14 +32,6 @@ internal sealed partial class AppOptions : DbStoreOptions set => SetOption(ref backdropType, SettingEntry.SystemBackdropType, value, value => value.ToStringOrEmpty()); } - public List> Cultures { get; } = SupportedCultures.Get(); - - public CultureInfo CurrentCulture - { - get => GetOption(ref currentCulture, SettingEntry.Culture, CultureInfo.GetCultureInfo, CultureInfo.CurrentCulture); - set => SetOption(ref currentCulture, SettingEntry.Culture, value, value => value.Name); - } - public Lazy>> LazyRegions { get; } = new(KnownRegions.Get); public Region Region @@ -55,6 +45,4 @@ internal sealed partial class AppOptions : DbStoreOptions get => GetOption(ref geetestCustomCompositeUrl, SettingEntry.GeetestCustomCompositeUrl); set => SetOption(ref geetestCustomCompositeUrl, SettingEntry.GeetestCustomCompositeUrl, value); } - - internal CultureInfo PreviousCulture { get; set; } = default!; } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AppOptionsExtension.cs b/src/Snap.Hutao/Snap.Hutao/Service/AppOptionsExtension.cs index ff06c942..4d3866b3 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/AppOptionsExtension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/AppOptionsExtension.cs @@ -3,17 +3,11 @@ using Snap.Hutao.Model; using Snap.Hutao.Web.Hoyolab; -using System.Globalization; namespace Snap.Hutao.Service; internal static class AppOptionsExtension { - public static NameValue? GetCurrentCultureForSelectionOrDefault(this AppOptions appOptions) - { - return appOptions.Cultures.SingleOrDefault(c => c.Value == appOptions.CurrentCulture); - } - public static NameValue? GetCurrentRegionForSelectionOrDefault(this AppOptions appOptions) { return appOptions.LazyRegions.Value.SingleOrDefault(c => c.Value.Value == appOptions.Region.Value); diff --git a/src/Snap.Hutao/Snap.Hutao/Service/CultureOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/CultureOptions.cs new file mode 100644 index 00000000..76663493 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Service/CultureOptions.cs @@ -0,0 +1,43 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Snap.Hutao.Model; +using Snap.Hutao.Model.Entity; +using Snap.Hutao.Service.Abstraction; +using System.Globalization; + +namespace Snap.Hutao.Service; + +[ConstructorGenerated(CallBaseConstructor = true)] +[Injection(InjectAs.Singleton)] +internal sealed partial class CultureOptions : DbStoreOptions +{ + private CultureInfo? currentCulture; + private string? localeName; + private string? languageCode; + + public List> Cultures { get; } = SupportedCultures.Get(); + + public CultureInfo CurrentCulture + { + get => GetOption(ref currentCulture, SettingEntry.Culture, CultureInfo.GetCultureInfo, CultureInfo.CurrentCulture); + set => SetOption(ref currentCulture, SettingEntry.Culture, value, value => value.Name); + } + + public CultureInfo SystemCulture { get; set; } = default!; + + public string LocaleName { get => localeName ??= CultureOptionsExtension.GetLocaleName(CurrentCulture); } + + public string LanguageCode + { + get + { + if (languageCode is null && !LocaleNames.TryGetLanguageCodeFromLocaleName(LocaleName, out languageCode)) + { + throw new KeyNotFoundException($"Invalid localeName: '{LocaleName}'"); + } + + return languageCode; + } + } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptionsExtension.cs b/src/Snap.Hutao/Snap.Hutao/Service/CultureOptionsExtension.cs similarity index 58% rename from src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptionsExtension.cs rename to src/Snap.Hutao/Snap.Hutao/Service/CultureOptionsExtension.cs index 59c17e93..9f1b85d7 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptionsExtension.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/CultureOptionsExtension.cs @@ -1,24 +1,19 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. +using Snap.Hutao.Model; using System.Globalization; -using System.IO; -namespace Snap.Hutao.Service.Metadata; +namespace Snap.Hutao.Service; -internal static class MetadataOptionsExtension +internal static class CultureOptionsExtension { - public static string GetLocalizedLocalFile(this MetadataOptions options, string fileNameWithExtension) + public static NameValue? GetCurrentCultureForSelectionOrDefault(this CultureOptions options) { - return Path.Combine(options.LocalizedDataFolder, fileNameWithExtension); + return options.Cultures.SingleOrDefault(c => c.Value == options.CurrentCulture); } - public static string GetLocalizedRemoteFile(this MetadataOptions options, string fileNameWithExtension) - { - return Web.HutaoEndpoints.Metadata(options.LocaleName, fileNameWithExtension); - } - - public static bool LanguageCodeFitsCurrentLocale(this MetadataOptions options, string? languageCode) + public static bool LanguageCodeFitsCurrentLocale(this CultureOptions options, string? languageCode) { if (string.IsNullOrEmpty(languageCode)) { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQueryManualInputProvider.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQueryManualInputProvider.cs index 45be4b6b..e58c3ebb 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQueryManualInputProvider.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQueryManualInputProvider.cs @@ -18,7 +18,7 @@ namespace Snap.Hutao.Service.GachaLog.QueryProvider; internal sealed partial class GachaLogQueryManualInputProvider : IGachaLogQueryProvider { private readonly IContentDialogFactory contentDialogFactory; - private readonly MetadataOptions metadataOptions; + private readonly CultureOptions cultureOptions; /// public async ValueTask> GetQueryAsync() @@ -33,13 +33,13 @@ internal sealed partial class GachaLogQueryManualInputProvider : IGachaLogQueryP if (query.TryGetSingleValue("auth_appid", out string? appId) && appId is "webview_gacha") { string? queryLanguageCode = query["lang"]; - if (metadataOptions.LanguageCodeFitsCurrentLocale(queryLanguageCode)) + if (cultureOptions.LanguageCodeFitsCurrentLocale(queryLanguageCode)) { return new(true, new(queryString)); } else { - string message = SH.FormatServiceGachaLogUrlProviderUrlLanguageNotMatchCurrentLocale(queryLanguageCode, metadataOptions.LanguageCode); + string message = SH.FormatServiceGachaLogUrlProviderUrlLanguageNotMatchCurrentLocale(queryLanguageCode, cultureOptions.LanguageCode); return new(false, message); } } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQuerySTokenProvider.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQuerySTokenProvider.cs index 32e1c549..4e381988 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQuerySTokenProvider.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQuerySTokenProvider.cs @@ -20,7 +20,7 @@ namespace Snap.Hutao.Service.GachaLog.QueryProvider; internal sealed partial class GachaLogQuerySTokenProvider : IGachaLogQueryProvider { private readonly BindingClient2 bindingClient2; - private readonly MetadataOptions metadataOptions; + private readonly CultureOptions cultureOptions; private readonly IUserService userService; /// @@ -38,7 +38,7 @@ internal sealed partial class GachaLogQuerySTokenProvider : IGachaLogQueryProvid if (authkeyResponse.IsOk()) { - return new(true, new(ComposeQueryString(data, authkeyResponse.Data, metadataOptions.LanguageCode))); + return new(true, new(ComposeQueryString(data, authkeyResponse.Data, cultureOptions.LanguageCode))); } else { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQueryWebCacheProvider.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQueryWebCacheProvider.cs index 247fe149..f33f1d58 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQueryWebCacheProvider.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQueryWebCacheProvider.cs @@ -22,7 +22,7 @@ namespace Snap.Hutao.Service.GachaLog.QueryProvider; internal sealed partial class GachaLogQueryWebCacheProvider : IGachaLogQueryProvider { private readonly IGameServiceFacade gameService; - private readonly MetadataOptions metadataOptions; + private readonly CultureOptions cultureOptions; /// /// 获取缓存文件路径 @@ -90,12 +90,12 @@ internal sealed partial class GachaLogQueryWebCacheProvider : IGachaLogQueryProv NameValueCollection query = HttpUtility.ParseQueryString(result.TrimEnd("#/log")); string? queryLanguageCode = query["lang"]; - if (metadataOptions.LanguageCodeFitsCurrentLocale(queryLanguageCode)) + if (cultureOptions.LanguageCodeFitsCurrentLocale(queryLanguageCode)) { return new(true, new(result)); } - string message = SH.FormatServiceGachaLogUrlProviderUrlLanguageNotMatchCurrentLocale(queryLanguageCode, metadataOptions.LanguageCode); + string message = SH.FormatServiceGachaLogUrlProviderUrlLanguageNotMatchCurrentLocale(queryLanguageCode, cultureOptions.LanguageCode); return new(false, message); } } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFExportService.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFExportService.cs index a445785f..0b2fca1d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFExportService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFExportService.cs @@ -17,7 +17,7 @@ internal sealed partial class UIGFExportService : IUIGFExportService { private readonly IGachaLogDbService gachaLogDbService; private readonly RuntimeOptions runtimeOptions; - private readonly MetadataOptions metadataOptions; + private readonly CultureOptions cultureOptions; private readonly ITaskContext taskContext; /// @@ -31,7 +31,7 @@ internal sealed partial class UIGFExportService : IUIGFExportService UIGF uigf = new() { - Info = UIGFInfo.From(runtimeOptions, metadataOptions, archive.Uid), + Info = UIGFInfo.From(runtimeOptions, cultureOptions, archive.Uid), List = list, }; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFImportService.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFImportService.cs index 6f82560e..f196a2eb 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFImportService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFImportService.cs @@ -18,7 +18,7 @@ namespace Snap.Hutao.Service.GachaLog; internal sealed partial class UIGFImportService : IUIGFImportService { private readonly ILogger logger; - private readonly MetadataOptions metadataOptions; + private readonly CultureOptions cultureOptions; private readonly IGachaLogDbService gachaLogDbService; private readonly ITaskContext taskContext; @@ -37,9 +37,9 @@ internal sealed partial class UIGFImportService : IUIGFImportService // v2.1 only support CHS if (version is UIGFVersion.Major2Minor2OrLower) { - if (!metadataOptions.LanguageCodeFitsCurrentLocale(uigf.Info.Language)) + if (!cultureOptions.LanguageCodeFitsCurrentLocale(uigf.Info.Language)) { - string message = SH.FormatServiceGachaUIGFImportLanguageNotMatch(uigf.Info.Language, metadataOptions.LanguageCode); + string message = SH.FormatServiceGachaUIGFImportLanguageNotMatch(uigf.Info.Language, cultureOptions.LanguageCode); ThrowHelper.InvalidOperation(message); } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Launching/Handler/LaunchExecutionEnsureGameResourceHandler.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Launching/Handler/LaunchExecutionEnsureGameResourceHandler.cs index 7b30c8e9..7d5d2da3 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Launching/Handler/LaunchExecutionEnsureGameResourceHandler.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Launching/Handler/LaunchExecutionEnsureGameResourceHandler.cs @@ -7,11 +7,9 @@ using Snap.Hutao.Factory.ContentDialog; using Snap.Hutao.Factory.Progress; using Snap.Hutao.Model.Intrinsic; using Snap.Hutao.Service.Game.Package; -using Snap.Hutao.Service.Game.PathAbstraction; using Snap.Hutao.View.Dialog; using Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; using Snap.Hutao.Web.Response; -using System.Collections.Immutable; using System.IO; namespace Snap.Hutao.Service.Game.Launching.Handler; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/LocaleNames.cs b/src/Snap.Hutao/Snap.Hutao/Service/LocaleNames.cs similarity index 98% rename from src/Snap.Hutao/Snap.Hutao/Service/Metadata/LocaleNames.cs rename to src/Snap.Hutao/Snap.Hutao/Service/LocaleNames.cs index 86b29ebe..46dd508a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/LocaleNames.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/LocaleNames.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Service.Metadata; +namespace Snap.Hutao.Service; /// /// 本地化名称 diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs index 3bb1b91c..081ff303 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataOptions.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. using Snap.Hutao.Core; +using System.Globalization; using System.IO; namespace Snap.Hutao.Service.Metadata; @@ -10,10 +11,9 @@ namespace Snap.Hutao.Service.Metadata; [Injection(InjectAs.Singleton)] internal sealed partial class MetadataOptions { - private readonly AppOptions appOptions; - private readonly RuntimeOptions hutaoOptions; + private readonly CultureOptions cultureOptions; + private readonly RuntimeOptions runtimeOptions; - private string? localeName; private string? fallbackDataFolder; private string? localizedDataFolder; @@ -23,7 +23,7 @@ internal sealed partial class MetadataOptions { if (fallbackDataFolder is null) { - fallbackDataFolder = Path.Combine(hutaoOptions.DataFolder, "Metadata", "CHS"); + fallbackDataFolder = Path.Combine(runtimeOptions.DataFolder, "Metadata", "CHS"); Directory.CreateDirectory(fallbackDataFolder); } @@ -37,7 +37,7 @@ internal sealed partial class MetadataOptions { if (localizedDataFolder is null) { - localizedDataFolder = Path.Combine(hutaoOptions.DataFolder, "Metadata", LocaleName); + localizedDataFolder = Path.Combine(runtimeOptions.DataFolder, "Metadata", cultureOptions.LocaleName); Directory.CreateDirectory(localizedDataFolder); } @@ -45,21 +45,13 @@ internal sealed partial class MetadataOptions } } - public string LocaleName + public string GetLocalizedLocalFile(string fileNameWithExtension) { - get => localeName ??= MetadataOptionsExtension.GetLocaleName(appOptions.CurrentCulture); + return Path.Combine(LocalizedDataFolder, fileNameWithExtension); } - public string LanguageCode + public string GetLocalizedRemoteFile(string fileNameWithExtension) { - get - { - if (LocaleNames.TryGetLanguageCodeFromLocaleName(LocaleName, out string? languageCode)) - { - return languageCode; - } - - throw new KeyNotFoundException($"Invalid localeName: '{LocaleName}'"); - } + return Web.HutaoEndpoints.Metadata(cultureOptions.LocaleName, fileNameWithExtension); } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml b/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml index 191332ae..2ef8d89f 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml @@ -55,7 +55,7 @@ diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml index 0444f4ab..4f7412e6 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml @@ -97,7 +97,7 @@ Description="{shcm:ResourceString Name=ViewPageSettingElevatedModeDescription}" Header="{shcm:ResourceString Name=ViewPageSettingElevatedModeRestartAction}" IsClickEnabled="True" - IsEnabled="{Binding HutaoOptions.IsElevated, Converter={StaticResource BoolNegationConverter}}"/> + IsEnabled="{Binding RuntimeOptions.IsElevated, Converter={StaticResource BoolNegationConverter}}"/> @@ -121,11 +121,11 @@ ActionIcon="{shcm:FontIcon Glyph=}" ActionIconToolTip="{shcm:ResourceString Name=ViewPageSettingCopyDeviceIdAction}" Command="{Binding CopyDeviceIdCommand}" - Description="{Binding HutaoOptions.DeviceId}" + Description="{Binding RuntimeOptions.DeviceId}" Header="{shcm:ResourceString Name=ViewPageSettingDeviceIdHeader}" IsClickEnabled="True"/> - +