From 390b89fc8283495bf28bf975a6d4927c646e142f Mon Sep 17 00:00:00 2001 From: Lightczx <1686188646@qq.com> Date: Wed, 27 Sep 2023 17:12:32 +0800 Subject: [PATCH] fix multiple channel/subchannel crash & setting clear invalid cache path crash --- .../Control/{ => Brush}/ColorSegment.cs | 2 +- .../Control/{ => Brush}/IColorSegment.cs | 2 +- .../Control/{ => Brush}/SegmentedBar.cs | 2 +- .../Alternating/AlternatingItemsControl.cs | 5 ++-- .../Alternating/IAlternatingItem.cs | 6 ++--- .../Control/Collection/Selector/ComboBox2.cs | 26 +++++++++++++++++++ .../GachaLogQueryWebCacheProvider.cs | 21 ++++++++++----- .../Service/Game/LaunchScheme.KnownSchemes.cs | 21 +++++++++++++++ .../Snap.Hutao/Service/Game/LaunchScheme.cs | 2 ++ .../View/Page/AvatarPropertyPage.xaml | 10 +++---- .../Snap.Hutao/View/Page/LaunchGamePage.xaml | 4 ++- .../AvatarProperty/AvatarProperty.cs | 2 +- 12 files changed, 79 insertions(+), 24 deletions(-) rename src/Snap.Hutao/Snap.Hutao/Control/{ => Brush}/ColorSegment.cs (90%) rename src/Snap.Hutao/Snap.Hutao/Control/{ => Brush}/IColorSegment.cs (84%) rename src/Snap.Hutao/Snap.Hutao/Control/{ => Brush}/SegmentedBar.cs (97%) rename src/Snap.Hutao/Snap.Hutao/Control/{ => Collection}/Alternating/AlternatingItemsControl.cs (88%) rename src/Snap.Hutao/Snap.Hutao/Control/{ => Collection}/Alternating/IAlternatingItem.cs (51%) create mode 100644 src/Snap.Hutao/Snap.Hutao/Control/Collection/Selector/ComboBox2.cs diff --git a/src/Snap.Hutao/Snap.Hutao/Control/ColorSegment.cs b/src/Snap.Hutao/Snap.Hutao/Control/Brush/ColorSegment.cs similarity index 90% rename from src/Snap.Hutao/Snap.Hutao/Control/ColorSegment.cs rename to src/Snap.Hutao/Snap.Hutao/Control/Brush/ColorSegment.cs index bc7d70c4..848720e0 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/ColorSegment.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Brush/ColorSegment.cs @@ -3,7 +3,7 @@ using Windows.UI; -namespace Snap.Hutao.Control; +namespace Snap.Hutao.Control.Brush; internal sealed class ColorSegment : IColorSegment { diff --git a/src/Snap.Hutao/Snap.Hutao/Control/IColorSegment.cs b/src/Snap.Hutao/Snap.Hutao/Control/Brush/IColorSegment.cs similarity index 84% rename from src/Snap.Hutao/Snap.Hutao/Control/IColorSegment.cs rename to src/Snap.Hutao/Snap.Hutao/Control/Brush/IColorSegment.cs index 9c4146f0..84f8b935 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/IColorSegment.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Brush/IColorSegment.cs @@ -3,7 +3,7 @@ using Windows.UI; -namespace Snap.Hutao.Control; +namespace Snap.Hutao.Control.Brush; internal interface IColorSegment { diff --git a/src/Snap.Hutao/Snap.Hutao/Control/SegmentedBar.cs b/src/Snap.Hutao/Snap.Hutao/Control/Brush/SegmentedBar.cs similarity index 97% rename from src/Snap.Hutao/Snap.Hutao/Control/SegmentedBar.cs rename to src/Snap.Hutao/Snap.Hutao/Control/Brush/SegmentedBar.cs index be3c3c27..b5982db1 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/SegmentedBar.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Brush/SegmentedBar.cs @@ -7,7 +7,7 @@ using Microsoft.UI.Xaml.Media; using Microsoft.UI.Xaml.Shapes; using System.Runtime.InteropServices; -namespace Snap.Hutao.Control; +namespace Snap.Hutao.Control.Brush; [DependencyProperty("Source", typeof(List), default!, nameof(OnSourceChanged))] internal sealed partial class SegmentedBar : ContentControl diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Alternating/AlternatingItemsControl.cs b/src/Snap.Hutao/Snap.Hutao/Control/Collection/Alternating/AlternatingItemsControl.cs similarity index 88% rename from src/Snap.Hutao/Snap.Hutao/Control/Alternating/AlternatingItemsControl.cs rename to src/Snap.Hutao/Snap.Hutao/Control/Collection/Alternating/AlternatingItemsControl.cs index da031a04..1883b18c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Alternating/AlternatingItemsControl.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Collection/Alternating/AlternatingItemsControl.cs @@ -2,12 +2,11 @@ // Licensed under the MIT license. using Microsoft.UI.Xaml.Controls; -using Microsoft.UI.Xaml.Media; using Windows.Foundation.Collections; -namespace Snap.Hutao.Control.Alternating; +namespace Snap.Hutao.Control.Collection.Alternating; -[DependencyProperty("ItemAlternateBackground", typeof(Brush))] +[DependencyProperty("ItemAlternateBackground", typeof(Microsoft.UI.Xaml.Media.Brush))] internal sealed partial class AlternatingItemsControl : ItemsControl { private readonly VectorChangedEventHandler itemsVectorChangedEventHandler; diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Alternating/IAlternatingItem.cs b/src/Snap.Hutao/Snap.Hutao/Control/Collection/Alternating/IAlternatingItem.cs similarity index 51% rename from src/Snap.Hutao/Snap.Hutao/Control/Alternating/IAlternatingItem.cs rename to src/Snap.Hutao/Snap.Hutao/Control/Collection/Alternating/IAlternatingItem.cs index a3336fb1..e1da17ec 100644 --- a/src/Snap.Hutao/Snap.Hutao/Control/Alternating/IAlternatingItem.cs +++ b/src/Snap.Hutao/Snap.Hutao/Control/Collection/Alternating/IAlternatingItem.cs @@ -1,11 +1,9 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -using Microsoft.UI.Xaml.Media; - -namespace Snap.Hutao.Control.Alternating; +namespace Snap.Hutao.Control.Collection.Alternating; internal interface IAlternatingItem { - public Brush? Background { get; set; } + public Microsoft.UI.Xaml.Media.Brush? Background { get; set; } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Collection/Selector/ComboBox2.cs b/src/Snap.Hutao/Snap.Hutao/Control/Collection/Selector/ComboBox2.cs new file mode 100644 index 00000000..0516c5ac --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Control/Collection/Selector/ComboBox2.cs @@ -0,0 +1,26 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Data; +using Microsoft.UI.Xaml.Media; +using Microsoft.UI.Xaml.Shapes; +using System.Runtime.InteropServices; + +namespace Snap.Hutao.Control.Collection.Selector; + +[DependencyProperty("EnableMemberPath", typeof(string))] +internal sealed partial class ComboBox2 : ComboBox +{ + protected override void PrepareContainerForItemOverride(DependencyObject element, object item) + { + if (element is ComboBoxItem comboBoxItem) + { + Binding binding = new() { Path = new(EnableMemberPath) }; + comboBoxItem.SetBinding(IsEnabledProperty, binding); + } + + base.PrepareContainerForItemOverride(element, item); + } +} \ No newline at end of file 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 4a1400a2..45d02c9c 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQueryWebCacheProvider.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/QueryProvider/GachaLogQueryWebCacheProvider.cs @@ -37,14 +37,21 @@ internal sealed partial class GachaLogQueryWebCacheProvider : IGachaLogQueryProv string? directory = Path.GetDirectoryName(path); ArgumentNullException.ThrowIfNull(directory); DirectoryInfo webCacheFolder = new(Path.Combine(directory, dataFolder, "webCaches")); - Regex versionRegex = VersionRegex(); - DirectoryInfo? lastestVersionCacheFolder = webCacheFolder - .EnumerateDirectories() - .Where(dir => versionRegex.IsMatch(dir.Name)) - .MaxBy(dir => new Version(dir.Name)); + if (webCacheFolder.Exists) + { + Regex versionRegex = VersionRegex(); + DirectoryInfo? lastestVersionCacheFolder = webCacheFolder + .EnumerateDirectories() + .Where(dir => versionRegex.IsMatch(dir.Name)) + .MaxBy(dir => new Version(dir.Name)); - lastestVersionCacheFolder ??= webCacheFolder; - return Path.Combine(lastestVersionCacheFolder.FullName, @"Cache\Cache_Data\data_2"); + lastestVersionCacheFolder ??= webCacheFolder; + return Path.Combine(lastestVersionCacheFolder.FullName, @"Cache\Cache_Data\data_2"); + } + else + { + return string.Empty; + } } /// diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.KnownSchemes.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.KnownSchemes.cs index 7b6b2702..25ea9614 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.KnownSchemes.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.KnownSchemes.cs @@ -18,6 +18,15 @@ internal sealed partial class LaunchScheme private const string SdkStaticLauncherBilibiliKey = "KAtdSsoQ"; private const string SdkStaticLauncherGlobalKey = "gcStgarh"; + private static readonly LaunchScheme ServerChineseChannelDefaultSubChannelDefaultCompatOnly = new() + { + LauncherId = SdkStaticLauncherChineseId, + Key = SdkStaticLauncherChineseKey, + Channel = ChannelType.Default, + SubChannel = SubChannelType.Default, + IsOversea = false, + }; + private static readonly LaunchScheme ServerChineseChannelOfficialSubChannelDefault = new() { LauncherId = SdkStaticLauncherChineseId, @@ -63,6 +72,16 @@ internal sealed partial class LaunchScheme IsOversea = false, }; + private static readonly LaunchScheme ServerGlobalChannelDefaultSubChannelDefaultCompatOnly = new() + { + LauncherId = SdkStaticLauncherGlobalId, + Key = SdkStaticLauncherGlobalKey, + Channel = ChannelType.Default, + SubChannel = SubChannelType.Default, + IsOversea = true, + IsCompatOnly = true, + }; + private static readonly LaunchScheme ServerGlobalChannelOfficialSubChannelDefault = new() { LauncherId = SdkStaticLauncherGlobalId, @@ -99,6 +118,7 @@ internal sealed partial class LaunchScheme return new List() { // 官服 + ServerChineseChannelDefaultSubChannelDefaultCompatOnly, ServerChineseChannelOfficialSubChannelDefault, ServerChineseChannelOfficialSubChannelOfficial, ServerChineseChannelOfficialSubChannelNoTapTap, @@ -108,6 +128,7 @@ internal sealed partial class LaunchScheme ServerChineseChannelBilibiliSubChannelOfficial, // 国际服 + ServerGlobalChannelDefaultSubChannelDefaultCompatOnly, ServerGlobalChannelOfficialSubChannelDefault, ServerGlobalChannelOfficialSubChannelEpic, ServerGlobalChannelOfficialSubChannelGoogle, diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.cs index 69b9eff9..ec5fe0c9 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/LaunchScheme.cs @@ -55,6 +55,8 @@ internal sealed partial class LaunchScheme /// public bool IsOversea { get; private set; } + public bool IsCompatOnly { get; private set; } + /// /// 多通道相等 /// diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/AvatarPropertyPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/AvatarPropertyPage.xaml index 24ce1699..789706ae 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/AvatarPropertyPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/AvatarPropertyPage.xaml @@ -10,8 +10,8 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mxi="using:Microsoft.Xaml.Interactivity" xmlns:shc="using:Snap.Hutao.Control" - xmlns:shca="using:Snap.Hutao.Control.Alternating" xmlns:shcb="using:Snap.Hutao.Control.Behavior" + xmlns:shcca="using:Snap.Hutao.Control.Collection.Alternating" xmlns:shci="using:Snap.Hutao.Control.Image" xmlns:shcm="using:Snap.Hutao.Control.Markup" xmlns:shcp="using:Snap.Hutao.Control.Panel" @@ -612,11 +612,11 @@ Background="{x:Null}" Header="{shcm:ResourceString Name=ViewPageAvatarPropertyHeader}"> - - + @@ -653,8 +653,8 @@ Text="{Binding AddValue}"/> - - + + diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml index 7f43cca7..672afcdf 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml @@ -10,6 +10,7 @@ xmlns:mxim="using:Microsoft.Xaml.Interactions.Media" xmlns:shc="using:Snap.Hutao.Control" xmlns:shcb="using:Snap.Hutao.Control.Behavior" + xmlns:shccs="using:Snap.Hutao.Control.Collection.Selector" xmlns:shcm="using:Snap.Hutao.Control.Markup" xmlns:shvc="using:Snap.Hutao.View.Control" xmlns:shvg="using:Snap.Hutao.ViewModel.Game" @@ -72,8 +73,9 @@ IsEnabled="{Binding HutaoOptions.IsElevated}"> - diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarProperty/AvatarProperty.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarProperty/AvatarProperty.cs index e94ccd04..fd4ad553 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarProperty/AvatarProperty.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/AvatarProperty/AvatarProperty.cs @@ -3,7 +3,7 @@ using CommunityToolkit.Mvvm.ComponentModel; using Microsoft.UI.Xaml.Media; -using Snap.Hutao.Control.Alternating; +using Snap.Hutao.Control.Collection.Alternating; using Snap.Hutao.Model; using Snap.Hutao.Model.Intrinsic; using System.Collections.Immutable;