From b5579aef6e3419b33f77137a0a1f8d5504e80fd1 Mon Sep 17 00:00:00 2001
From: Lightczx <1686188646@qq.com>
Date: Fri, 22 Sep 2023 16:47:08 +0800
Subject: [PATCH] static resouce download refactor and ui/ux improvement
---
src/Snap.Hutao/Snap.Hutao/App.xaml | 48 +-
.../Control/Markup/Int32Extension.cs | 3 +-
.../Snap.Hutao/Core/LifeCycle/Activation.cs | 5 +
.../Snap.Hutao/Core/Setting/StaticResource.cs | 84 ---
src/Snap.Hutao/Snap.Hutao/GuideWindow.xaml.cs | 4 +-
src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj | 7 -
.../View/Control/BaseValueSlider.xaml | 20 +-
.../View/Control/BottomTextControl.xaml | 9 +-
.../View/Control/BottomTextControl.xaml.cs | 4 +-
.../View/Control/BottomTextSmallControl.xaml | 23 -
.../Control/BottomTextSmallControl.xaml.cs | 19 -
.../View/Control/DescParamComboBox.xaml | 35 +-
.../View/Control/HutaoStatisticsCard.xaml | 129 +++--
.../Snap.Hutao/View/Control/ItemIcon.xaml | 3 +-
.../Control/LaunchGameResourceExpander.xaml | 93 ++--
.../Snap.Hutao/View/Control/SkillPivot.xaml | 29 +-
.../View/Control/StatisticsCard.xaml | 477 ++++++++----------
.../Dialog/CultivatePromotionDeltaDialog.xaml | 277 +++++-----
.../Dialog/GachaLogRefreshProgressDialog.xaml | 13 +-
.../CoreWebView2EnvironmentExtension.cs | 33 --
.../Snap.Hutao/View/Guide/GuideView.xaml | 74 ++-
.../Snap.Hutao/View/Guide/GuideView.xaml.cs | 1 -
.../ViewModel/Guide/DownloadSummary.cs | 8 +-
.../ViewModel/Guide/GuideViewModel.cs | 55 +-
.../ViewModel/Guide/StaticResource.cs | 124 +++++
.../Snap.Hutao/ViewModel/SettingViewModel.cs | 2 +-
26 files changed, 734 insertions(+), 845 deletions(-)
delete mode 100644 src/Snap.Hutao/Snap.Hutao/Core/Setting/StaticResource.cs
delete mode 100644 src/Snap.Hutao/Snap.Hutao/View/Control/BottomTextSmallControl.xaml
delete mode 100644 src/Snap.Hutao/Snap.Hutao/View/Control/BottomTextSmallControl.xaml.cs
delete mode 100644 src/Snap.Hutao/Snap.Hutao/View/Extension/CoreWebView2EnvironmentExtension.cs
create mode 100644 src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/StaticResource.cs
diff --git a/src/Snap.Hutao/Snap.Hutao/App.xaml b/src/Snap.Hutao/Snap.Hutao/App.xaml
index 4b364433..98d24da7 100644
--- a/src/Snap.Hutao/Snap.Hutao/App.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/App.xaml
@@ -2,8 +2,8 @@
x:Class="Snap.Hutao.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:cwc="using:CommunityToolkit.WinUI.Converters"
- xmlns:cwcw="using:CommunityToolkit.WinUI.Controls"
+ xmlns:cwcont="using:CommunityToolkit.WinUI.Controls"
+ xmlns:cwconv="using:CommunityToolkit.WinUI.Converters"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
xmlns:shci="using:Snap.Hutao.Control.Image"
xmlns:shmmc="using:Snap.Hutao.Model.Metadata.Converter"
@@ -120,9 +120,9 @@
-
-
-
+
+
+
@@ -178,11 +178,25 @@
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+ Style="{StaticResource DefaultPivotStyle}"/>
+
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Control/StatisticsCard.xaml b/src/Snap.Hutao/Snap.Hutao/View/Control/StatisticsCard.xaml
index 43ff0e45..692de146 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Control/StatisticsCard.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Control/StatisticsCard.xaml
@@ -12,6 +12,7 @@
xmlns:shcp="using:Snap.Hutao.Control.Panel"
xmlns:shvcont="using:Snap.Hutao.View.Control"
xmlns:shvconv="using:Snap.Hutao.View.Converter"
+ xmlns:shvcp="using:Snap.Hutao.View.Card.Primitive"
xmlns:shvg="using:Snap.Hutao.ViewModel.GachaLog"
d:DataContext="{d:DesignInstance shvg:TypedWishSummary}"
mc:Ignorable="d">
@@ -84,287 +85,235 @@
TrueValue="{ThemeResource CardBackgroundFillColorDefaultBrush}"/>
-
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
- 0,0,0,1
-
-
-
+
+
+
+
+
+
+
+
+
+ 0,0,0,1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
-
-
-
+ MinHeight="32"
+ Description="{Binding LastPurplePull}"
+ Header="{shcm:ResourceString Name=ViewControlStatisticsCardToLastPurpleText}"
+ Maximum="{Binding GuaranteePurpleThreshold}"
+ ProgressForeground="{StaticResource PurpleBrush}"
+ TextForeground="{StaticResource PurpleBrush}"
+ Value="{Binding LastPurplePull}"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Dialog/CultivatePromotionDeltaDialog.xaml b/src/Snap.Hutao/Snap.Hutao/View/Dialog/CultivatePromotionDeltaDialog.xaml
index e017c747..7d0de834 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Dialog/CultivatePromotionDeltaDialog.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Dialog/CultivatePromotionDeltaDialog.xaml
@@ -16,159 +16,162 @@
180
1200
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Dialog/GachaLogRefreshProgressDialog.xaml b/src/Snap.Hutao/Snap.Hutao/View/Dialog/GachaLogRefreshProgressDialog.xaml
index 72bdb8e6..82f8417c 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Dialog/GachaLogRefreshProgressDialog.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Dialog/GachaLogRefreshProgressDialog.xaml
@@ -27,15 +27,8 @@
-
-
-
-
-
-
+ ItemsPanel="{StaticResource UniformGridColumns5Spacing4Template}"
+ ItemsSource="{x:Bind Status.Items, Mode=OneWay}"/>
+
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Extension/CoreWebView2EnvironmentExtension.cs b/src/Snap.Hutao/Snap.Hutao/View/Extension/CoreWebView2EnvironmentExtension.cs
deleted file mode 100644
index caea081b..00000000
--- a/src/Snap.Hutao/Snap.Hutao/View/Extension/CoreWebView2EnvironmentExtension.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-using Microsoft.Web.WebView2.Core;
-using System.Diagnostics;
-
-namespace Snap.Hutao.View.Extension;
-
-///
-/// 扩展
-///
-[HighQuality]
-internal static class CoreWebView2EnvironmentExtension
-{
- ///
- /// 退出
- ///
- /// 环境
- public static void Exit(this CoreWebView2Environment environment)
- {
- // 暂不支持
- IReadOnlyList processInfos = environment.GetProcessInfos();
-
- foreach (CoreWebView2ProcessInfo processInfo in processInfos)
- {
- Process p = Process.GetProcessById(processInfo.ProcessId);
- if (p.ProcessName == "msedgewebview2.exe")
- {
- p.Kill();
- }
- }
- }
-}
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml b/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml
index 745358f3..191332ae 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml
@@ -16,6 +16,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -26,17 +54,10 @@
-
-
-
-
-
-
-
-
+ SelectionMode="Single"/>
@@ -157,37 +178,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ ItemContainerTransitions="{StaticResource ListViewLikeThemeTransitions}"
+ ItemTemplate="{StaticResource DownloadSummaryTemplate}"
+ ItemsPanel="{StaticResource WrapPanelSpacing0Template}"
+ ItemsSource="{Binding DownloadSummaries}"/>
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml.cs
index 4996d50f..fc098367 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Guide/GuideView.xaml.cs
@@ -15,6 +15,5 @@ internal sealed partial class GuideView : UserControl
{
InitializeComponent();
DataContext = Ioc.Default.GetRequiredService();
- _ = 1;
}
}
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/DownloadSummary.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/DownloadSummary.cs
index 25ec43a2..26ff4e8a 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/DownloadSummary.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/DownloadSummary.cs
@@ -121,7 +121,13 @@ internal sealed class DownloadSummary : ObservableObject
foreach (ZipArchiveEntry entry in archive.Entries)
{
string destPath = imageCacheFilePathOperation.GetFileFromCategoryAndName(fileName, entry.FullName);
- entry.ExtractToFile(destPath, true);
+ try
+ {
+ entry.ExtractToFile(destPath, true);
+ }
+ catch
+ {
+ }
}
}
}
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/GuideViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/GuideViewModel.cs
index 6f993bdd..3832b069 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/GuideViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/GuideViewModel.cs
@@ -160,7 +160,14 @@ internal sealed partial class GuideViewModel : Abstraction.ViewModel
private async ValueTask DownloadStaticResourceAsync()
{
- IEnumerable downloadSummaries = GenerateStaticResourceDownloadTasks();
+ HashSet downloadSummaries = new();
+
+ HashSet categories = StaticResource.GetUnfulfilledCategorySet();
+
+ foreach (string category in categories)
+ {
+ downloadSummaries.Add(new(serviceProvider, category));
+ }
DownloadSummaries = downloadSummaries.ToObservableCollection();
@@ -172,53 +179,9 @@ internal sealed partial class GuideViewModel : Abstraction.ViewModel
}
}).ConfigureAwait(false);
- StaticResource.FulfillAllContracts();
+ StaticResource.FulfillAll();
LocalSetting.Set(SettingKeys.Major1Minor7Revision0GuideState, (uint)GuideState.Completed);
AppInstance.Restart(string.Empty);
}
-
- private IEnumerable GenerateStaticResourceDownloadTasks()
- {
- Dictionary downloadSummaries = new();
-
- if (StaticResource.IsContractUnfulfilled(StaticResource.V1Contract))
- {
- downloadSummaries.TryAdd("Bg", new(serviceProvider, "Bg"));
- downloadSummaries.TryAdd("AvatarIcon", new(serviceProvider, "AvatarIcon"));
- downloadSummaries.TryAdd("GachaAvatarIcon", new(serviceProvider, "GachaAvatarIcon"));
- downloadSummaries.TryAdd("GachaAvatarImg", new(serviceProvider, "GachaAvatarImg"));
- downloadSummaries.TryAdd("EquipIcon", new(serviceProvider, "EquipIcon"));
- downloadSummaries.TryAdd("GachaEquipIcon", new(serviceProvider, "GachaEquipIcon"));
- downloadSummaries.TryAdd("NameCardPic", new(serviceProvider, "NameCardPic"));
- downloadSummaries.TryAdd("Skill", new(serviceProvider, "Skill"));
- downloadSummaries.TryAdd("Talent", new(serviceProvider, "Talent"));
- }
-
- if (StaticResource.IsContractUnfulfilled(StaticResource.V2Contract))
- {
- downloadSummaries.TryAdd("AchievementIcon", new(serviceProvider, "AchievementIcon"));
- downloadSummaries.TryAdd("ItemIcon", new(serviceProvider, "ItemIcon"));
- downloadSummaries.TryAdd("IconElement", new(serviceProvider, "IconElement"));
- downloadSummaries.TryAdd("RelicIcon", new(serviceProvider, "RelicIcon"));
- }
-
- if (StaticResource.IsContractUnfulfilled(StaticResource.V3Contract))
- {
- downloadSummaries.TryAdd("Skill", new(serviceProvider, "Skill"));
- downloadSummaries.TryAdd("Talent", new(serviceProvider, "Talent"));
- }
-
- if (StaticResource.IsContractUnfulfilled(StaticResource.V4Contract))
- {
- downloadSummaries.TryAdd("AvatarIcon", new(serviceProvider, "AvatarIcon"));
- }
-
- if (StaticResource.IsContractUnfulfilled(StaticResource.V5Contract))
- {
- downloadSummaries.TryAdd("MonsterIcon", new(serviceProvider, "MonsterIcon"));
- }
-
- return downloadSummaries.Select(x => x.Value);
- }
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/StaticResource.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/StaticResource.cs
new file mode 100644
index 00000000..cca61c94
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Guide/StaticResource.cs
@@ -0,0 +1,124 @@
+// Copyright (c) DGP Studio. All rights reserved.
+// Licensed under the MIT license.
+
+using Snap.Hutao.Core.Setting;
+using Windows.Storage;
+
+namespace Snap.Hutao.ViewModel.Guide;
+
+///
+/// 静态资源
+///
+[HighQuality]
+internal static class StaticResource
+{
+ private const string ContractMap = "StaticResourceContractMap";
+
+ private static readonly ApplicationDataCompositeValue DefaultResourceVersionMap = new()
+ {
+ { "AchievementIcon", 0 },
+ { "AvatarCard", 0 },
+ { "AvatarIcon", 0 },
+ { "Bg", 0 },
+ { "ChapterIcon", 0 },
+ { "CodexMonster", 0 },
+ { "Costume", 0 },
+ { "EmotionIcon", 0 },
+ { "EquipIcon", 0 },
+ { "GachaAvatarIcon", 0 },
+ { "GachaAvatarImg", 0 },
+ { "GachaEquipIcon", 0 },
+ { "GcgCharAvatarIcon", 0 },
+ { "IconElement", 0 },
+ { "ItemIcon", 0 },
+ { "LoadingPic", 0 },
+ { "MonsterIcon", 0 },
+ { "MonsterSmallIcon", 0 },
+ { "NameCardIcon", 0 },
+ { "NameCardPic", 0 },
+ { "NameCardPicAlpha", 0 },
+ { "Property", 0 },
+ { "RelicIcon", 0 },
+ { "Skill", 0 },
+ { "Talent", 0 },
+ };
+
+ private static readonly ApplicationDataCompositeValue LatestResourceVersionMap = new()
+ {
+ { "AchievementIcon", 1 },
+ { "AvatarCard", 0 },
+ { "AvatarIcon", 1 },
+ { "Bg", 1 },
+ { "ChapterIcon", 0 },
+ { "CodexMonster", 0 },
+ { "Costume", 0 },
+ { "EmotionIcon", 0 },
+ { "EquipIcon", 1 },
+ { "GachaAvatarIcon", 1 },
+ { "GachaAvatarImg", 1 },
+ { "GachaEquipIcon", 1 },
+ { "GcgCharAvatarIcon", 0 },
+ { "IconElement", 1 },
+ { "ItemIcon", 1 },
+ { "LoadingPic", 0 },
+ { "MonsterIcon", 1 },
+ { "MonsterSmallIcon", 0 },
+ { "NameCardIcon", 0 },
+ { "NameCardPic", 1 },
+ { "NameCardPicAlpha", 0 },
+ { "Property", 1 },
+ { "RelicIcon", 1 },
+ { "Skill", 1 },
+ { "Talent", 1 },
+ };
+
+ public static void FulfillAll()
+ {
+ LocalSetting.Set(ContractMap, LatestResourceVersionMap);
+ }
+
+ public static void FailAll()
+ {
+ LocalSetting.Set(ContractMap, DefaultResourceVersionMap);
+ }
+
+ [Obsolete]
+ public static bool IsContractUnfulfilled(string contractKey)
+ {
+ return !LocalSetting.Get(contractKey, false);
+ }
+
+ public static bool IsAnyUnfulfilledCategoryPresent()
+ {
+ ApplicationDataCompositeValue map = LocalSetting.Get(ContractMap, DefaultResourceVersionMap);
+ if (map.Count < LatestResourceVersionMap.Count)
+ {
+ return true;
+ }
+
+ foreach ((string key, object value) in map)
+ {
+ if ((int)value < (int)LatestResourceVersionMap[key])
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public static HashSet GetUnfulfilledCategorySet()
+ {
+ HashSet result = new();
+ ApplicationDataCompositeValue map = LocalSetting.Get(ContractMap, DefaultResourceVersionMap);
+ foreach ((string key, object value) in LatestResourceVersionMap)
+ {
+ if ((int)value > (int)map[key])
+ {
+ result.Add(key);
+ }
+ }
+
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
index a937c793..1968646e 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
@@ -106,7 +106,7 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel
[Command("ResetStaticResourceCommand")]
private static void ResetStaticResource()
{
- StaticResource.FailAllContracts();
+ StaticResource.FailAll();
LocalSetting.Set(SettingKeys.Major1Minor7Revision0GuideState, (uint)GuideState.StaticResourceBegin);
AppInstance.Restart(string.Empty);
}