diff --git a/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/BackgroundImageService.cs b/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/BackgroundImageService.cs index 074c2628..abfcdfcd 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/BackgroundImageService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/BackgroundImage/BackgroundImageService.cs @@ -3,6 +3,12 @@ using Snap.Hutao.Control.Media; using Snap.Hutao.Core; +using Snap.Hutao.Core.Caching; +using Snap.Hutao.Core.IO; +using Snap.Hutao.Service.Game.Scheme; +using Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +using Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Content; +using Snap.Hutao.Web.Response; using System.IO; using Windows.Graphics.Imaging; @@ -14,14 +20,15 @@ internal sealed partial class BackgroundImageService : IBackgroundImageService { private static readonly HashSet AllowedFormats = [".bmp", ".gif", ".ico", ".jpg", ".jpeg", ".png", ".tiff", ".webp"]; - private readonly ITaskContext taskContext; + private readonly IServiceProvider serviceProvider; private readonly RuntimeOptions runtimeOptions; + private readonly ITaskContext taskContext; - private HashSet backgroundPathMap; + private HashSet backgroundPathSet; public async ValueTask> GetNextBackgroundImageAsync() { - HashSet backgroundSet = SkipOrInitBackground(); + HashSet backgroundSet = await SkipOrInitBackgroundAsync().ConfigureAwait(false); if (backgroundSet.Count <= 0) { @@ -49,18 +56,34 @@ internal sealed partial class BackgroundImageService : IBackgroundImageService } } - private HashSet SkipOrInitBackground() + private async ValueTask> SkipOrInitBackgroundAsync() { - if (backgroundPathMap is null || backgroundPathMap.Count <= 0) + if (backgroundPathSet is null || backgroundPathSet.Count <= 0) { string backgroundFolder = runtimeOptions.GetDataFolderBackgroundFolder(); Directory.CreateDirectory(backgroundFolder); - backgroundPathMap = Directory + backgroundPathSet = Directory .GetFiles(backgroundFolder, "*.*", SearchOption.AllDirectories) .Where(path => AllowedFormats.Contains(Path.GetExtension(path))) .ToHashSet(); + + // No image found + if (backgroundPathSet.Count <= 0) + { + ResourceClient resourceClient = serviceProvider.GetRequiredService(); + string launguageCode = serviceProvider.GetRequiredService().LanguageCode; + LaunchScheme scheme = launguageCode is "zh-cn" + ? KnownLaunchSchemes.Get().First(scheme => !scheme.IsOversea && scheme.IsNotCompatOnly) + : KnownLaunchSchemes.Get().First(scheme => scheme.IsOversea && scheme.IsNotCompatOnly); + Response response = await resourceClient.GetContentAsync(scheme, launguageCode).ConfigureAwait(false); + if (response is { Data.Advertisement.Background: string url }) + { + ValueFile file = await serviceProvider.GetRequiredService().GetFileFromCacheAsync(url.ToUri()).ConfigureAwait(false); + backgroundPathSet = [file]; + } + } } - return backgroundPathMap; + return backgroundPathSet; } } \ No newline at end of file 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 28c746a1..9ed8ad27 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 @@ -10,6 +10,7 @@ using Snap.Hutao.Model.Intrinsic; using Snap.Hutao.Service.Game.Package; using Snap.Hutao.View.Dialog; using Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +using Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; using Snap.Hutao.Web.Response; using System.IO; diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/PackageConverter.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/PackageConverter.cs index 0cb55eb5..f04c3177 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/PackageConverter.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Package/PackageConverter.cs @@ -8,7 +8,7 @@ using Snap.Hutao.Core.IO; using Snap.Hutao.Core.IO.Hashing; using Snap.Hutao.Core.IO.Http.Sharding; using Snap.Hutao.Service.Game.Scheme; -using Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +using Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; using System.Globalization; using System.IO; using System.IO.Compression; diff --git a/src/Snap.Hutao/Snap.Hutao/View/Control/LaunchGameResourceExpander.xaml b/src/Snap.Hutao/Snap.Hutao/View/Control/LaunchGameResourceExpander.xaml index 771446fb..b937a820 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Control/LaunchGameResourceExpander.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Control/LaunchGameResourceExpander.xaml @@ -6,10 +6,10 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:shcm="using:Snap.Hutao.Control.Markup" - xmlns:shwhshl="using:Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher" + xmlns:shwhshlr="using:Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" - d:DataContext="{d:DesignInstance shwhshl:Package}" + d:DataContext="{d:DesignInstance shwhshlr:Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource.Package}" IsExpanded="True" ItemsSource="{Binding VoicePacks}" mc:Ignorable="d"> @@ -24,7 +24,7 @@ - + - /// 启动器资源 - /// - /// 启动方案 - /// 启动器资源字符串 public static string SdkOsStaticLauncherResource(LaunchScheme scheme) { return $"{SdkOsStaticLauncherApi}/resource?key={scheme.Key}&launcher_id={scheme.LauncherId}&channel_id={scheme.Channel:D}&sub_channel_id={scheme.SubChannel:D}"; } + + public static string SdkOsStaticLauncherContent(LaunchScheme scheme, string languageCode, bool advOnly = true) + { + return advOnly + ? $"{SdkOsStaticLauncherApi}/content?filter_adv=true&key={scheme.Key}&launcher_id={scheme.LauncherId}&language={languageCode}" + : $"{SdkOsStaticLauncherApi}/content?key={scheme.Key}&launcher_id={scheme.LauncherId}&language={languageCode}"; + } #endregion #region WebApiOsAccountApi diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Advertisement.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Advertisement.cs new file mode 100644 index 00000000..e71f6d41 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Advertisement.cs @@ -0,0 +1,22 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Content; + +internal sealed class Advertisement +{ + [JsonPropertyName("background")] + public string Background { get; set; } = default!; + + [JsonPropertyName("icon")] + public string Icon { get; set; } = default!; + + [JsonPropertyName("url")] + public string Url { get; set; } = default!; + + [JsonPropertyName("version")] + public string Version { get; set; } = default!; + + [JsonPropertyName("bg_checksum")] + public string BackgroundChecksum { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Banner.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Banner.cs new file mode 100644 index 00000000..08fc5bd8 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Banner.cs @@ -0,0 +1,22 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Content; + +internal sealed class Banner +{ + [JsonPropertyName("banner_id")] + public string BannerId { get; set; } = default!; + + [JsonPropertyName("name")] + public string Name { get; set; } = default!; + + [JsonPropertyName("img")] + public string Image { get; set; } = default!; + + [JsonPropertyName("url")] + public string Url { get; set; } = default!; + + [JsonPropertyName("order")] + public string Order { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/GameContent.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/GameContent.cs new file mode 100644 index 00000000..5138eb54 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/GameContent.cs @@ -0,0 +1,28 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Content; + +internal sealed class GameContent +{ + [JsonPropertyName("adv")] + public Advertisement? Advertisement { get; set; } = default!; + + [JsonPropertyName("banner")] + public List Banners { get; set; } = default!; + + [JsonPropertyName("icon")] + public List Icons { get; set; } = default!; + + [JsonPropertyName("post")] + public List Posts { get; set; } = default!; + + [JsonPropertyName("qq")] + public List QQs { get; set; } = default!; + + [JsonPropertyName("more")] + public More More { get; set; } = default!; + + [JsonPropertyName("links")] + public Link Links { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Icon.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Icon.cs new file mode 100644 index 00000000..6d3378c5 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Icon.cs @@ -0,0 +1,43 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Content; + +internal sealed class Icon +{ + [JsonPropertyName("icon_id")] + public string IconId { get; set; } = default!; + + [JsonPropertyName("img")] + public string Image { get; set; } = default!; + + [JsonPropertyName("url")] + public string Url { get; set; } = default!; + + [JsonPropertyName("qr_img")] + public string QrImage { get; set; } = default!; + + [JsonPropertyName("qr_desc")] + public string QrDescription { get; set; } = default!; + + [JsonPropertyName("img_hover")] + public string ImageHover { get; set; } = default!; + + [JsonPropertyName("other_links")] + public List OtherLinks { get; set; } = default!; + + [JsonPropertyName("title")] + public string Title { get; set; } = default!; + + [JsonPropertyName("icon_link")] + public string IconLink { get; set; } = default!; + + [JsonPropertyName("links")] + public List Links { get; set; } = default!; + + [JsonPropertyName("enable_red_dot")] + public bool EnableRedDot { get; set; } + + [JsonPropertyName("red_dot_content")] + public string RedDotContent { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/IconLink.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/IconLink.cs new file mode 100644 index 00000000..ac438093 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/IconLink.cs @@ -0,0 +1,23 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient; +using Snap.Hutao.Service.Game.Scheme; +using Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; +using Snap.Hutao.Web.Request.Builder; +using Snap.Hutao.Web.Request.Builder.Abstraction; +using Snap.Hutao.Web.Response; +using System.IO; +using System.Net.Http; +using System.Text; + +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; + +internal sealed class IconLink +{ + [JsonPropertyName("title")] + public string Title { get; set; } = default!; + + [JsonPropertyName("url")] + public string Url { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Link.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Link.cs new file mode 100644 index 00000000..f2569131 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Link.cs @@ -0,0 +1,13 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Content; + +internal sealed class Link +{ + [JsonPropertyName("faq")] + public string FAQ { get; set; } = default!; + + [JsonPropertyName("version")] + public string Version { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/More.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/More.cs new file mode 100644 index 00000000..89c60cda --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/More.cs @@ -0,0 +1,28 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Content; + +internal sealed class More +{ + [JsonPropertyName("activity_link")] + public string ActivityLink { get; set; } = default!; + + [JsonPropertyName("announce_link")] + public string AnnounceLink { get; set; } = default!; + + [JsonPropertyName("info_link")] + public string InfoLink { get; set; } = default!; + + [JsonPropertyName("news_link")] + public string NewsLink { get; set; } = default!; + + [JsonPropertyName("trends_link")] + public string TrendsLink { get; set; } = default!; + + [JsonPropertyName("supply_link")] + public string SupplyLink { get; set; } = default!; + + [JsonPropertyName("tools_link")] + public string ToolsLink { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Post.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Post.cs new file mode 100644 index 00000000..b3de80e6 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/Post.cs @@ -0,0 +1,31 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Content; + +internal sealed class Post +{ + [JsonPropertyName("post_id")] + public string PostId { get; set; } = default!; + + /// + /// POST_TYPE_ACTIVITY|POST_TYPE_ANNOUNCE|POST_TYPE_INFO + /// + [JsonPropertyName("type")] + public string Type { get; set; } = default!; + + [JsonPropertyName("url")] + public string Url { get; set; } = default!; + + /// + /// MM/dd format + /// + [JsonPropertyName("show_time")] + public string ShowTime { get; set; } = default!; + + [JsonPropertyName("order")] + public string Order { get; set; } = default!; + + [JsonPropertyName("title")] + public string Title { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/QQ.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/QQ.cs new file mode 100644 index 00000000..61af5e28 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Content/QQ.cs @@ -0,0 +1,19 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Content; + +internal sealed class QQ +{ + [JsonPropertyName("qq_id")] + public string QQId { get; set; } = default!; + + [JsonPropertyName("name")] + public string Name { get; set; } = default!; + + [JsonPropertyName("number")] + public string Number { get; set; } = default!; + + [JsonPropertyName("code")] + public string Code { get; set; } = default!; +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/DiffPackage.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/DiffPackage.cs similarity index 84% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/DiffPackage.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/DiffPackage.cs index f0109179..7e1e5624 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/DiffPackage.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/DiffPackage.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; /// /// 差异文件 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Game.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Game.cs similarity index 88% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Game.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Game.cs index 0fe77bbe..678cf2c8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Game.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Game.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; /// /// 游戏 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/GameResource.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/GameResource.cs similarity index 95% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/GameResource.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/GameResource.cs index 84913ea9..36bcae0f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/GameResource.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/GameResource.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; /// /// 游戏资源 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/LatestPackage.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/LatestPackage.cs similarity index 81% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/LatestPackage.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/LatestPackage.cs index 78b72060..f07250ff 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/LatestPackage.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/LatestPackage.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; internal sealed class LatestPackage : Package { diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/NameMd5.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/NameMd5.cs similarity index 88% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/NameMd5.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/NameMd5.cs index 18fc46c0..e31202c0 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/NameMd5.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/NameMd5.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; /// /// 资源文件 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Package.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Package.cs similarity index 94% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Package.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Package.cs index 200522f5..722f9c05 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Package.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Package.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; /// /// 最新客户端 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/PackageSegment.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/PackageSegment.cs similarity index 81% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/PackageSegment.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/PackageSegment.cs index 77acd3a4..9b8a59fc 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/PackageSegment.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/PackageSegment.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; internal sealed class PackageSegment : PathMd5 { diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/PathMd5.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/PathMd5.cs similarity index 93% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/PathMd5.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/PathMd5.cs index f1cf5fde..1c355f28 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/PathMd5.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/PathMd5.cs @@ -4,7 +4,7 @@ using Snap.Hutao.Core.IO.DataTransfer; using Snap.Hutao.Service.Notification; -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; /// /// 下载的文件 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Plugin.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Plugin.cs similarity index 87% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Plugin.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Plugin.cs index 7a920832..b55f3741 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Plugin.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Plugin.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; /// /// 插件 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/PluginItem.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/PluginItem.cs similarity index 91% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/PluginItem.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/PluginItem.cs index 52f14be5..2f757786 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/PluginItem.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/PluginItem.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; /// /// 插件项 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Sdk.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Sdk.cs similarity index 90% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Sdk.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Sdk.cs index f47aeac7..447dd279 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Sdk.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/Sdk.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; /// /// Sdk diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/VoicePackage.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/VoicePackage.cs similarity index 91% rename from src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/VoicePackage.cs rename to src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/VoicePackage.cs index 5329b291..7a71c6e8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/VoicePackage.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/Resource/VoicePackage.cs @@ -1,7 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher; +namespace Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; /// /// 语音包 diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/ResourceClient.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/ResourceClient.cs index 2b294d50..94c7c03d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/ResourceClient.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/SdkStatic/Hk4e/Launcher/ResourceClient.cs @@ -3,6 +3,8 @@ using Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient; using Snap.Hutao.Service.Game.Scheme; +using Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Content; +using Snap.Hutao.Web.Hoyolab.SdkStatic.Hk4e.Launcher.Resource; using Snap.Hutao.Web.Request.Builder; using Snap.Hutao.Web.Request.Builder.Abstraction; using Snap.Hutao.Web.Response; @@ -60,4 +62,21 @@ internal sealed partial class ResourceClient return Response.Response.DefaultIfNull(resp); } + + public async ValueTask> GetContentAsync(LaunchScheme scheme, string languageCode, bool advOnly = true, CancellationToken token = default) + { + string url = scheme.IsOversea + ? ApiOsEndpoints.SdkOsStaticLauncherContent(scheme, languageCode, advOnly) + : ApiEndpoints.SdkStaticLauncherContent(scheme, languageCode, advOnly); + + HttpRequestMessageBuilder builder = httpRequestMessageBuilderFactory.Create() + .SetRequestUri(url) + .Get(); + + Response? resp = await builder + .TryCatchSendAsync>(httpClient, logger, token) + .ConfigureAwait(false); + + return Response.Response.DefaultIfNull(resp); + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Response/KnownReturnCode.cs b/src/Snap.Hutao/Snap.Hutao/Web/Response/KnownReturnCode.cs index a41b0f3b..8a735f2d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Web/Response/KnownReturnCode.cs +++ b/src/Snap.Hutao/Snap.Hutao/Web/Response/KnownReturnCode.cs @@ -80,6 +80,11 @@ internal enum KnownReturnCode /// InvalidKey = -205, + /// + /// 无效的参数 + /// + ParameterError = -201, + /// /// 访问过于频繁 ///