From 7af57118bcb2e124a45a5175d795d71356e3f851 Mon Sep 17 00:00:00 2001 From: DismissedLight <1686188646@qq.com> Date: Sun, 10 Sep 2023 17:38:18 +0800 Subject: [PATCH] improve db layer & homecard experience --- ...dsContentIntoTitleBarWorkaroundBehavior.cs | 55 ---- .../Core/LifeCycle/CurrentWindowReference.cs | 23 +- .../Snap.Hutao/Core/Setting/Feature.cs | 55 ---- .../Snap.Hutao/Core/Setting/FeatureOptions.cs | 41 --- .../Snap.Hutao/Core/Setting/SettingKeys.cs | 5 + .../Snap.Hutao/Core/Shell/ShellLinkInterop.cs | 7 +- .../Model/Calculable/CalculableWeapon.cs | 3 - .../Model/InterChange/Inventory/UIIFItem.cs | 30 +- .../InterChange/Inventory/UIIFMaterial.cs | 9 + .../Snap.Hutao/Resource/BlurBackground.png | Bin 0 -> 162323 bytes .../Resource/Localization/SH.Designer.cs | 101 ++++++- .../Snap.Hutao/Resource/Localization/SH.resx | 35 ++- .../Achievement/AchievementDbService.cs | 39 ++- .../Achievement/AchievementService.Archive.cs | 2 +- .../AchievementService.Interchange.cs | 7 +- .../AchievementStatisticsService.cs | 2 +- .../Achievement/IAchievementDbService.cs | 8 +- .../AvatarInfo/AvatarInfoDbBulkOperation.cs | 10 +- .../Service/AvatarInfo/AvatarInfoDbService.cs | 24 +- .../Service/AvatarInfo/AvatarInfoService.cs | 4 +- .../AvatarInfo/IAvatarInfoDbService.cs | 6 +- .../Cultivation/CultivationDbService.cs | 24 +- .../CultivationService.Collection.cs | 2 +- .../Service/Cultivation/CultivationService.cs | 8 +- .../Cultivation/ICultivationDbService.cs | 8 +- .../Service/DailyNote/DailyNoteDbService.cs | 27 +- .../Service/DailyNote/DailyNoteService.cs | 6 +- .../Service/DailyNote/IDailyNoteDbService.cs | 4 +- .../Service/GachaLog/GachaItemSaveContext.cs | 4 +- .../Service/GachaLog/GachaLogDbService.cs | 139 ++++++++- .../GachaLog/GachaLogHutaoCloudService.cs | 4 +- .../Service/GachaLog/GachaLogService.cs | 6 +- .../Service/GachaLog/IGachaLogDbService.cs | 18 +- .../Service/GachaLog/UIGFExportService.cs | 8 +- .../Snap.Hutao/Service/Game/GameDbService.cs | 20 +- .../Snap.Hutao/Service/Game/GameService.cs | 12 +- .../Snap.Hutao/Service/Game/IGameDbService.cs | 2 +- .../Service/Inventroy/IInventoryDbService.cs | 17 ++ .../Service/Inventroy/IInventoryService.cs | 8 + .../Service/Inventroy/InventoryDbService.cs | 61 ++++ .../Service/Inventroy/InventoryService.cs | 9 + .../SpiralAbyss/SpiralAbyssRecordDbService.cs | 2 +- .../Snap.Hutao/Service/User/IUserDbService.cs | 2 +- .../Snap.Hutao/Service/User/UserDbService.cs | 2 +- .../Snap.Hutao/Service/User/UserService.cs | 2 +- src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj | 14 +- .../Snap.Hutao/View/Card/CardReference.cs | 11 + .../Dialog/CultivatePromotionDeltaDialog.xaml | 2 +- .../Snap.Hutao/View/Page/AchievementPage.xaml | 6 +- .../View/Page/AnnouncementPage.xaml | 282 +++++++++--------- .../Snap.Hutao/View/Page/CultivationPage.xaml | 6 +- .../Snap.Hutao/View/Page/GachaLogPage.xaml | 6 +- .../Snap.Hutao/View/Page/SettingPage.xaml | 66 +++- .../AvatarProperty/AvatarPropertyViewModel.cs | 1 + .../ViewModel/Home/AnnouncementViewModel.cs | 33 ++ .../Snap.Hutao/ViewModel/HomeCardOptions.cs | 33 ++ .../Snap.Hutao/ViewModel/SettingViewModel.cs | 4 + 57 files changed, 860 insertions(+), 465 deletions(-) delete mode 100644 src/Snap.Hutao/Snap.Hutao/Control/Behavior/ComboBoxExtendsContentIntoTitleBarWorkaroundBehavior.cs delete mode 100644 src/Snap.Hutao/Snap.Hutao/Core/Setting/Feature.cs delete mode 100644 src/Snap.Hutao/Snap.Hutao/Core/Setting/FeatureOptions.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Model/InterChange/Inventory/UIIFMaterial.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/BlurBackground.png create mode 100644 src/Snap.Hutao/Snap.Hutao/Service/Inventroy/IInventoryDbService.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Service/Inventroy/IInventoryService.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Service/Inventroy/InventoryDbService.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/Service/Inventroy/InventoryService.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/View/Card/CardReference.cs create mode 100644 src/Snap.Hutao/Snap.Hutao/ViewModel/HomeCardOptions.cs diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Behavior/ComboBoxExtendsContentIntoTitleBarWorkaroundBehavior.cs b/src/Snap.Hutao/Snap.Hutao/Control/Behavior/ComboBoxExtendsContentIntoTitleBarWorkaroundBehavior.cs deleted file mode 100644 index 2f940eb7..00000000 --- a/src/Snap.Hutao/Snap.Hutao/Control/Behavior/ComboBoxExtendsContentIntoTitleBarWorkaroundBehavior.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) DGP Studio. All rights reserved. -// Licensed under the MIT license. - -using CommunityToolkit.Mvvm.Messaging; -using CommunityToolkit.WinUI.Behaviors; -using Microsoft.UI.Xaml.Controls; - -namespace Snap.Hutao.Control.Behavior; - -/// -/// AppTitleBar Workaround -/// https://github.com/microsoft/microsoft-ui-xaml/issues/7756 -/// -internal sealed class ComboBoxExtendsContentIntoTitleBarWorkaroundBehavior : BehaviorBase -{ - private readonly IMessenger messenger; - private readonly EventHandler dropDownOpenedHandler; - private readonly EventHandler dropDownClosedHandler; - - /// - /// AppTitleBar Workaround - /// - public ComboBoxExtendsContentIntoTitleBarWorkaroundBehavior() - { - messenger = Ioc.Default.GetRequiredService(); - dropDownOpenedHandler = OnDropDownOpened; - dropDownClosedHandler = OnDropDownClosed; - } - - /// - protected override bool Initialize() - { - AssociatedObject.DropDownOpened += dropDownOpenedHandler; - AssociatedObject.DropDownClosed += dropDownClosedHandler; - return true; - } - - /// - protected override bool Uninitialize() - { - AssociatedObject.DropDownOpened -= dropDownOpenedHandler; - AssociatedObject.DropDownClosed -= dropDownClosedHandler; - return true; - } - - private void OnDropDownOpened(object? sender, object e) - { - messenger.Send(Message.FlyoutStateChangedMessage.Open); - } - - private void OnDropDownClosed(object? sender, object e) - { - messenger.Send(Message.FlyoutStateChangedMessage.Close); - } -} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/CurrentWindowReference.cs b/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/CurrentWindowReference.cs index ce9cbdda..6c880a8b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/CurrentWindowReference.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/CurrentWindowReference.cs @@ -1,22 +1,23 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. -using CommunityToolkit.WinUI.Notifications; -using Microsoft.Extensions.Caching.Memory; using Microsoft.UI.Xaml; -using Microsoft.Windows.AppLifecycle; -using Snap.Hutao.Core.Setting; -using Snap.Hutao.Service.DailyNote; -using Snap.Hutao.Service.Hutao; -using Snap.Hutao.Service.Metadata; -using Snap.Hutao.Service.Navigation; -using Snap.Hutao.ViewModel.Guide; -using System.Diagnostics; namespace Snap.Hutao.Core.LifeCycle; [Injection(InjectAs.Singleton, typeof(ICurrentWindowReference))] internal sealed class CurrentWindowReference : ICurrentWindowReference { - public Window Window { get; set; } = default!; + private readonly WeakReference reference = new(default!); + + [SuppressMessage("", "SH007")] + public Window Window + { + get + { + reference.TryGetTarget(out Window? window); + return window!; + } + set => reference.SetTarget(value); + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Setting/Feature.cs b/src/Snap.Hutao/Snap.Hutao/Core/Setting/Feature.cs deleted file mode 100644 index 1731886c..00000000 --- a/src/Snap.Hutao/Snap.Hutao/Core/Setting/Feature.cs +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) DGP Studio. All rights reserved. -// Licensed under the MIT license. - -using CommunityToolkit.Mvvm.ComponentModel; - -namespace Snap.Hutao.Core.Setting; - -/// -/// 功能 -/// -internal sealed class Feature : ObservableObject -{ - private readonly string displayName; - private readonly string description; - private readonly string settingKey; - private readonly bool defaultValue; - - /// - /// 构造一个新的功能 - /// - /// 显示名称 - /// 描述 - /// 键 - /// 默认值 - public Feature(string displayName, string description, string settingKey, bool defaultValue) - { - this.displayName = displayName; - this.description = description; - this.settingKey = settingKey; - this.defaultValue = defaultValue; - } - - /// - /// 显示名称 - /// - public string DisplayName { get => displayName; } - - /// - /// 描述 - /// - public string Description { get => description; } - - /// - /// 值 - /// - public bool Value - { - get => LocalSetting.Get(settingKey, defaultValue); - set - { - LocalSetting.Set(settingKey, value); - OnPropertyChanged(); - } - } -} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Setting/FeatureOptions.cs b/src/Snap.Hutao/Snap.Hutao/Core/Setting/FeatureOptions.cs deleted file mode 100644 index 7039ecb2..00000000 --- a/src/Snap.Hutao/Snap.Hutao/Core/Setting/FeatureOptions.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) DGP Studio. All rights reserved. -// Licensed under the MIT license. - -using System.Collections; - -namespace Snap.Hutao.Core.Setting; - -/// -/// 功能选项 -/// -internal sealed class FeatureOptions : IReadOnlyCollection -{ - /// - /// 启用实时便笺无感验证 - /// - public Feature IsDailyNoteSilentVerificationEnabled { get; } = new( - "IsDailyNoteSilentVerificationEnabled", "启用实时便笺无感验证", "IsDailyNoteSilentVerificationEnabled", true); - - /// - /// 元数据检查是否忽略 - /// - public Feature IsMetadataUpdateCheckSuppressed { get; } = new( - "IsMetadataUpdateCheckSuppressed", "禁用元数据更新检查", "IsMetadataUpdateCheckSuppressed", false); - - /// - public int Count { get => 2; } - - /// - public IEnumerator GetEnumerator() - { - // TODO: Use source generator - yield return IsDailyNoteSilentVerificationEnabled; - yield return IsMetadataUpdateCheckSuppressed; - } - - /// - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } -} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Setting/SettingKeys.cs b/src/Snap.Hutao/Snap.Hutao/Core/Setting/SettingKeys.cs index 858545b0..6873e1fc 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Setting/SettingKeys.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Setting/SettingKeys.cs @@ -76,4 +76,9 @@ internal static class SettingKeys public const string CultivationWeapon90LevelTarget = "CultivationWeapon90LevelTarget"; public const string CultivationWeapon70LevelCurrent = "CultivationWeapon70LevelCurrent"; public const string CultivationWeapon70LevelTarget = "CultivationWeapon70LevelTarget"; + + public const string IsHomeCardLaunchGamePresented = "IsHomeCardLaunchGamePresented"; + public const string IsHomeCardGachaStatisticsPresented = "IsHomeCardGachaStatisticsPresented"; + public const string IsHomeCardAchievementPresented = "IsHomeCardAchievementPresented"; + public const string IsHomeCardDailyNotePresented = "IsHomeCardDailyNotePresented"; } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Shell/ShellLinkInterop.cs b/src/Snap.Hutao/Snap.Hutao/Core/Shell/ShellLinkInterop.cs index f5e6d5e1..59d49527 100644 --- a/src/Snap.Hutao/Snap.Hutao/Core/Shell/ShellLinkInterop.cs +++ b/src/Snap.Hutao/Snap.Hutao/Core/Shell/ShellLinkInterop.cs @@ -17,6 +17,10 @@ internal sealed partial class ShellLinkInterop : IShellLinkInterop public void CreateDesktopShoutcutForElevatedLaunch() { + string sourceLogoPath = Path.Combine(runtimeOptions.InstalledLocation, "Assets/Logo.ico"); + string targetLogoPath = Path.Combine(runtimeOptions.DataFolder, "ShellLinkLogo.ico"); + File.Copy(sourceLogoPath, targetLogoPath); + IShellLinkW shellLink = (IShellLinkW)new ShellLink(); shellLink.SetPath("powershell"); shellLink.SetArguments($""" @@ -24,8 +28,7 @@ internal sealed partial class ShellLinkInterop : IShellLinkInterop """); shellLink.SetShowCmd(SHOW_WINDOW_CMD.SW_SHOWMINNOACTIVE); - string iconPath = Path.Combine(runtimeOptions.InstalledLocation, "Snap.Hutao.exe"); - shellLink.SetIconLocation(iconPath, 0); + shellLink.SetIconLocation(targetLogoPath, 0); string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); string target = Path.Combine(desktop, $"{SH.AppNameAndVersion.Format(runtimeOptions.Version)}.lnk"); diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Calculable/CalculableWeapon.cs b/src/Snap.Hutao/Snap.Hutao/Model/Calculable/CalculableWeapon.cs index 4d6334ff..e6b06c89 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/Calculable/CalculableWeapon.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/Calculable/CalculableWeapon.cs @@ -22,9 +22,6 @@ internal sealed class CalculableWeapon IMappingFrom, IMappingFrom { - private uint levelCurrent; - private uint levelTarget; - /// /// 构造一个新的可计算武器 /// diff --git a/src/Snap.Hutao/Snap.Hutao/Model/InterChange/Inventory/UIIFItem.cs b/src/Snap.Hutao/Snap.Hutao/Model/InterChange/Inventory/UIIFItem.cs index 61b785ed..99ceee44 100644 --- a/src/Snap.Hutao/Snap.Hutao/Model/InterChange/Inventory/UIIFItem.cs +++ b/src/Snap.Hutao/Snap.Hutao/Model/InterChange/Inventory/UIIFItem.cs @@ -13,32 +13,8 @@ internal sealed class UIIFItem /// 物品Id /// [JsonPropertyName("itemId")] - public int ItemId { get; set; } + public uint ItemId { get; set; } - /// - /// 物品Id - /// - [JsonPropertyName("count")] - public int Count { get; set; } - - /// - /// 等级 - /// Reliquary/Weapon - /// - [JsonPropertyName("level")] - public int? Level { get; set; } - - /// - /// 副属性列表 - /// Reliquary - /// - [JsonPropertyName("appendPropIdList")] - public List? AppendPropIdList { get; set; } = default!; - - /// - /// 精炼等级 0-4 - /// Weapon - /// - [JsonPropertyName("promoteLevel")] - public int? PromoteLevel { get; set; } + [JsonPropertyName("material")] + public UIIFMaterial Material { get; set; } = default!; } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Model/InterChange/Inventory/UIIFMaterial.cs b/src/Snap.Hutao/Snap.Hutao/Model/InterChange/Inventory/UIIFMaterial.cs new file mode 100644 index 00000000..e4754492 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Model/InterChange/Inventory/UIIFMaterial.cs @@ -0,0 +1,9 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Model.InterChange.Inventory; + +internal sealed class UIIFMaterial +{ + public uint Count { get; set; } +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/BlurBackground.png b/src/Snap.Hutao/Snap.Hutao/Resource/BlurBackground.png new file mode 100644 index 0000000000000000000000000000000000000000..40fcf94e0c9d72e05ec74bbd29bb51caba340470 GIT binary patch literal 162323 zcmZU)WpEwMlCCSuwiqmCW?W)sW@fgSWid+@Gcz+Yvt%(dEb+3KnV0B%``$A%d(X*; zj;ij6uBsnTz1^9W8KI;gi3o=a2LS zmgtp;H<6Q-`3Z<_E zzq&G=d6)3-xMdi~J>}|DVre2%;9aBa7H0FTv>u@G+*Y46$%d3SgU~W)z}!8jQRO+ymRub zWlhVeYhB}!PZ-)6NNAdUCavJSHSw`74N2|T;_ieuykHv; zT|_SPVVdkT`2&bmzCIUN>}Og$ejpY`xJUTI@>BLTn_Cf8cN=!s@mtA7Ok@LYhDn0o z(pi4Vxasj$SlZ&lRJkeAKJCT!sIYCN8CzoNQuv6tHp2ASZQ3E3fdAafu;TQOpN|!m zOT@mvwk17rToEyf>j<1<)`^y^RXbcZtzVL(lsib*;-*48Zvz3pe=2fQWl32EjJJ3I zi}rfHVktAv&pSY7{1yy(|BT&x?jst#@&9oD2Y{QN=TB-Hb5e5~_eaYg9Qk@#vx5Om zZ-Tq${dKQe?;o@mSZG~ic|oylg;ty`?`$olj9jw=&+0|j=>{bf&tYKQlvR6zhq9@k z%b->w&EEOrq0eWojy*e;IQv2g-bp&88_FF(VNc!Fd&6gxT94pE-};4m3FS}FWTQj@ z(YRZpI>9kbN8;PhMuHR_<*P!3S>0z2ZATB^g@}f0l~a;aKayuGA@4JwPZ~kKWR)$r ziw8R@d+#-q)_UXCW+Gu5#S32qOw;Y^f3j!v<|Z^AOcKu-TI3(+yP;y=*J@$M@fd3q z=j(`(?%&=^N_V>(IRC=zO-LD)zJjmZ^1Fa)N56-*k=YE%Qs|P zRTX#&nTmM4o4(qYUfndS1-~44NpeM@jkZ!fPY||HSCp?x?3FW6jb}ORW8W|cLvx{@|0=FxRqMW2%mRU^Eu|4h0pSg zuo=HfuVT#klwt!aO}kF*lxh z8uS=0TJSY}gt(bp+$x`b^8BL#ZvR36( zfXPbHg6&s=v3QS%d)Ng*wZJ`T7rgU134`t8D&)_%Ce2Tr9`Rqcjz-KSk94-A6=onq zD7fXU4eQpJsUZF|;H8LF8eesB0s3<0s{LYQs>I&cM>lrvHHM3S!;6wZwU?rCuC@+Gj?1H}v!;-_%ouIy`^<);W+g+;y~!t*ua%`qPwuZw$M#XWoTL99B_!LX3Y@&2OPgg7!|a)U~GbB z7xSZ!!x|%;4^4-}(;DMKn$ES=Qu&&opNV}Sye$25USD!C!^=4b z^msoK@HjrD&^pzX%}9q;f|1z%iL$L_>sRViF-+) zhkpI9MKfW(T|)f@{KlG&yX_n7X?n(ZyL!C>EL&03;YI?KIW_`k+h!e3ES|7#cskzL zw-4zupy4__WwWf`e_3RyVxH)e9SYJ(%SF-A>eVVwqcAuRVuSS?8|MsD2T8k>>OQ&R zDw$i826|(Pgh%0A!LeTrWns$4(x7K2XFa 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 U6q$|r-(|I4>c9A@`a0}?0I~>ITL1t6 literal 0 HcmV?d00001 diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs index 6ba9a2fe..f5fe92d6 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs @@ -5245,7 +5245,7 @@ namespace Snap.Hutao.Resource.Localization { } ///

- /// 查找类似 在桌面上创建默认以管理员方式启动的快捷方式,更新后需要重新创建 的本地化字符串。 + /// 查找类似 在桌面上创建默认以管理员方式启动的快捷方式 的本地化字符串。 /// internal static string ViewPageSettingCreateDesktopShortcutDescription { get { @@ -5469,6 +5469,87 @@ namespace Snap.Hutao.Resource.Localization { } } + /// + /// 查找类似 管理主页仪表板中的卡片 的本地化字符串。 + /// + internal static string ViewpageSettingHomeCardDescription { + get { + return ResourceManager.GetString("ViewpageSettingHomeCardDescription", resourceCulture); + } + } + + /// + /// 查找类似 主页卡片 的本地化字符串。 + /// + internal static string ViewpageSettingHomeCardHeader { + get { + return ResourceManager.GetString("ViewpageSettingHomeCardHeader", resourceCulture); + } + } + + /// + /// 查找类似 成就管理 的本地化字符串。 + /// + internal static string ViewpageSettingHomeCardItemAchievementHeader { + get { + return ResourceManager.GetString("ViewpageSettingHomeCardItemAchievementHeader", resourceCulture); + } + } + + /// + /// 查找类似 实时便笺 的本地化字符串。 + /// + internal static string ViewpageSettingHomeCardItemDailyNoteHeader { + get { + return ResourceManager.GetString("ViewpageSettingHomeCardItemDailyNoteHeader", resourceCulture); + } + } + + /// + /// 查找类似 祈愿记录 的本地化字符串。 + /// + internal static string ViewpageSettingHomeCardItemgachaStatisticsHeader { + get { + return ResourceManager.GetString("ViewpageSettingHomeCardItemgachaStatisticsHeader", resourceCulture); + } + } + + /// + /// 查找类似 启动游戏 的本地化字符串。 + /// + internal static string ViewpageSettingHomeCardItemLaunchGameHeader { + get { + return ResourceManager.GetString("ViewpageSettingHomeCardItemLaunchGameHeader", resourceCulture); + } + } + + /// + /// 查找类似 隐藏 的本地化字符串。 + /// + internal static string ViewPageSettingHomeCardOff { + get { + return ResourceManager.GetString("ViewPageSettingHomeCardOff", resourceCulture); + } + } + + /// + /// 查找类似 显示 的本地化字符串。 + /// + internal static string ViewPageSettingHomeCardOn { + get { + return ResourceManager.GetString("ViewPageSettingHomeCardOn", resourceCulture); + } + } + + /// + /// 查找类似 主页 的本地化字符串。 + /// + internal static string ViewpageSettingHomeHeader { + get { + return ResourceManager.GetString("ViewpageSettingHomeHeader", resourceCulture); + } + } + /// /// 查找类似 胡桃账号 的本地化字符串。 /// @@ -5577,6 +5658,15 @@ namespace Snap.Hutao.Resource.Localization { } } + /// + /// 查找类似 胡桃使用 PowerShell 更改注册表中的信息以修改游戏内账号 的本地化字符串。 + /// + internal static string ViewPageSettingSetPowerShellDescription { + get { + return ResourceManager.GetString("ViewPageSettingSetPowerShellDescription", resourceCulture); + } + } + /// /// 查找类似 PowerShell 路径 的本地化字符串。 /// @@ -5586,6 +5676,15 @@ namespace Snap.Hutao.Resource.Localization { } } + /// + /// 查找类似 Shell 体验 的本地化字符串。 + /// + internal static string ViewPageSettingShellExperienceHeader { + get { + return ResourceManager.GetString("ViewPageSettingShellExperienceHeader", resourceCulture); + } + } + /// /// 查找类似 赞助我们 的本地化字符串。 /// diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx index 64cd1173..b2a94458 100644 --- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx +++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx @@ -1902,7 +1902,7 @@ 创建 - 在桌面上创建默认以管理员方式启动的快捷方式,更新后需要重新创建 + 在桌面上创建默认以管理员方式启动的快捷方式 创建快捷方式 @@ -1976,6 +1976,33 @@ 无感验证 + + 管理主页仪表板中的卡片 + + + 主页卡片 + + + 成就管理 + + + 实时便笺 + + + 祈愿记录 + + + 启动游戏 + + + 隐藏 + + + 显示 + + + 主页 + 胡桃账号 @@ -2012,9 +2039,15 @@ 设置游戏路径时,请选择游戏本体(YuanShen.exe 或 GenshinImpact.exe)而不是启动器(launcher.exe) + + 胡桃使用 PowerShell 更改注册表中的信息以修改游戏内账号 + PowerShell 路径 + + Shell 体验 + 赞助我们 diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementDbService.cs index 73726a78..1e7efec6 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementDbService.cs @@ -89,6 +89,21 @@ internal sealed partial class AchievementDbService : IAchievementDbService } } + public async ValueTask OverwriteAchievementAsync(EntityAchievement achievement) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + + // Delete exists one. + await appDbContext.Achievements.ExecuteDeleteWhereAsync(e => e.InnerId == achievement.InnerId).ConfigureAwait(false); + if (achievement.Status >= Model.Intrinsic.AchievementStatus.STATUS_FINISHED) + { + await appDbContext.Achievements.AddAndSaveAsync(achievement).ConfigureAwait(false); + } + } + } + public ObservableCollection GetAchievementArchiveCollection() { using (IServiceScope scope = serviceProvider.CreateScope()) @@ -98,7 +113,7 @@ internal sealed partial class AchievementDbService : IAchievementDbService } } - public async ValueTask DeleteAchievementArchiveAsync(AchievementArchive archive) + public async ValueTask RemoveAchievementArchiveAsync(AchievementArchive archive) { using (IServiceScope scope = serviceProvider.CreateScope()) { @@ -121,6 +136,19 @@ internal sealed partial class AchievementDbService : IAchievementDbService } } + public async ValueTask> GetAchievementListByArchiveIdAsync(Guid archiveId) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + return await appDbContext.Achievements + .AsNoTracking() + .Where(i => i.ArchiveId == archiveId) + .ToListAsync() + .ConfigureAwait(false); + } + } + public List GetAchievementArchiveList() { using (IServiceScope scope = serviceProvider.CreateScope()) @@ -129,4 +157,13 @@ internal sealed partial class AchievementDbService : IAchievementDbService return appDbContext.AchievementArchives.AsNoTracking().ToList(); } } + + public async ValueTask> GetAchievementArchiveListAsync() + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + return await appDbContext.AchievementArchives.AsNoTracking().ToListAsync().ConfigureAwait(false); + } + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.Archive.cs b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.Archive.cs index a2dd6936..347cbe40 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.Archive.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.Archive.cs @@ -74,6 +74,6 @@ internal sealed partial class AchievementService // Sync database await taskContext.SwitchToBackgroundAsync(); - await achievementDbService.DeleteAchievementArchiveAsync(archive).ConfigureAwait(false); + await achievementDbService.RemoveAchievementArchiveAsync(archive).ConfigureAwait(false); } } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.Interchange.cs b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.Interchange.cs index 7ffa0fa9..85b32656 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.Interchange.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementService.Interchange.cs @@ -50,9 +50,10 @@ internal sealed partial class AchievementService public async ValueTask ExportToUIAFAsync(AchievementArchive archive) { await taskContext.SwitchToBackgroundAsync(); - List list = achievementDbService - .GetAchievementListByArchiveId(archive.InnerId) - .SelectList(UIAFItem.From); + List entities = await achievementDbService + .GetAchievementListByArchiveIdAsync(archive.InnerId) + .ConfigureAwait(false); + List list = entities.SelectList(UIAFItem.From); return new() { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementStatisticsService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementStatisticsService.cs index 57968a34..d7cf8deb 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementStatisticsService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/AchievementStatisticsService.cs @@ -22,7 +22,7 @@ internal sealed partial class AchievementStatisticsService : IAchievementStatist await taskContext.SwitchToBackgroundAsync(); List results = new(); - foreach (AchievementArchive archive in achievementDbService.GetAchievementArchiveList()) + foreach (AchievementArchive archive in await achievementDbService.GetAchievementArchiveListAsync().ConfigureAwait(false)) { int finishedCount = await achievementDbService .GetFinishedAchievementCountByArchiveIdAsync(archive.InnerId) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/IAchievementDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/IAchievementDbService.cs index 0152f7be..ebb177df 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Achievement/IAchievementDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Achievement/IAchievementDbService.cs @@ -9,14 +9,18 @@ namespace Snap.Hutao.Service.Achievement; internal interface IAchievementDbService { - ValueTask DeleteAchievementArchiveAsync(Model.Entity.AchievementArchive archive); + ValueTask RemoveAchievementArchiveAsync(Model.Entity.AchievementArchive archive); ObservableCollection GetAchievementArchiveCollection(); List GetAchievementArchiveList(); + ValueTask> GetAchievementArchiveListAsync(); + List GetAchievementListByArchiveId(Guid archiveId); + ValueTask> GetAchievementListByArchiveIdAsync(Guid archiveId); + Dictionary GetAchievementMapByArchiveId(Guid archiveId); ValueTask GetFinishedAchievementCountByArchiveIdAsync(Guid archiveId); @@ -24,4 +28,6 @@ internal interface IAchievementDbService ValueTask> GetLatestFinishedAchievementListByArchiveIdAsync(Guid archiveId, int take); void OverwriteAchievement(EntityAchievement achievement); + + ValueTask OverwriteAchievementAsync(EntityAchievement achievement); } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoDbBulkOperation.cs b/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoDbBulkOperation.cs index 3a99e0ac..6b92c507 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoDbBulkOperation.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoDbBulkOperation.cs @@ -77,7 +77,7 @@ internal sealed partial class AvatarInfoDbBulkOperation { token.ThrowIfCancellationRequested(); string uid = userAndUid.Uid.Value; - List dbInfos = avatarInfoDbService.GetAvatarInfoListByUid(uid); + List dbInfos = await avatarInfoDbService.GetAvatarInfoListByUidAsync(uid).ConfigureAwait(false); EnsureItemsAvatarIdDistinct(ref dbInfos, uid); using (IServiceScope scope = serviceProvider.CreateScope()) @@ -121,7 +121,7 @@ internal sealed partial class AvatarInfoDbBulkOperation } } - return avatarInfoDbService.GetAvatarInfoListByUid(uid); + return await avatarInfoDbService.GetAvatarInfoListByUidAsync(uid).ConfigureAwait(false); } /// @@ -134,7 +134,7 @@ internal sealed partial class AvatarInfoDbBulkOperation { token.ThrowIfCancellationRequested(); string uid = userAndUid.Uid.Value; - List dbInfos = avatarInfoDbService.GetAvatarInfoListByUid(uid); + List dbInfos = await avatarInfoDbService.GetAvatarInfoListByUidAsync(uid).ConfigureAwait(false); EnsureItemsAvatarIdDistinct(ref dbInfos, uid); using (IServiceScope scope = serviceProvider.CreateScope()) @@ -173,7 +173,7 @@ internal sealed partial class AvatarInfoDbBulkOperation } } - return avatarInfoDbService.GetAvatarInfoListByUid(uid); + return await avatarInfoDbService.GetAvatarInfoListByUidAsync(uid).ConfigureAwait(false); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -243,7 +243,7 @@ internal sealed partial class AvatarInfoDbBulkOperation // This means that there are duplicate items. if (distinctCount < dbInfos.Count) { - avatarInfoDbService.DeleteAvatarInfoRangeByUid(uid); + avatarInfoDbService.RemoveAvatarInfoRangeByUid(uid); dbInfos = new(); } } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoDbService.cs index 1ae7fb4c..8a9cc150 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoDbService.cs @@ -24,7 +24,20 @@ internal sealed partial class AvatarInfoDbService : IAvatarInfoDbService } } - public void DeleteAvatarInfoRangeByUid(string uid) + public async ValueTask> GetAvatarInfoListByUidAsync(string uid) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + return await appDbContext.AvatarInfos + .AsNoTracking() + .Where(i => i.Uid == uid) + .ToListAsync() + .ConfigureAwait(false); + } + } + + public void RemoveAvatarInfoRangeByUid(string uid) { using (IServiceScope scope = serviceProvider.CreateScope()) { @@ -32,4 +45,13 @@ internal sealed partial class AvatarInfoDbService : IAvatarInfoDbService appDbContext.AvatarInfos.ExecuteDeleteWhere(i => i.Uid == uid); } } + + public async ValueTask RemoveAvatarInfoRangeByUidAsync(string uid) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + await appDbContext.AvatarInfos.ExecuteDeleteWhereAsync(i => i.Uid == uid).ConfigureAwait(false); + } + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoService.cs b/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoService.cs index ee1200d0..8e4a419d 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/AvatarInfoService.cs @@ -78,7 +78,7 @@ internal sealed partial class AvatarInfoService : IAvatarInfoService default: { - List list = avatarInfoDbService.GetAvatarInfoListByUid(userAndUid.Uid.Value); + List list = await avatarInfoDbService.GetAvatarInfoListByUidAsync(userAndUid.Uid.Value).ConfigureAwait(false); Summary summary = await GetSummaryCoreAsync(list, token).ConfigureAwait(false); token.ThrowIfCancellationRequested(); return new(RefreshResult.Ok, summary.Avatars.Count == 0 ? null : summary); @@ -97,7 +97,7 @@ internal sealed partial class AvatarInfoService : IAvatarInfoService ?? await enkaClient.GetDataAsync(uid, token).ConfigureAwait(false); } - private async ValueTask GetSummaryCoreAsync(IEnumerable avatarInfos, CancellationToken token) + private async ValueTask GetSummaryCoreAsync(IEnumerable avatarInfos, CancellationToken token) { using (ValueStopwatch.MeasureExecution(logger)) { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/IAvatarInfoDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/IAvatarInfoDbService.cs index ef7f9383..a2663cee 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/IAvatarInfoDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/AvatarInfo/IAvatarInfoDbService.cs @@ -7,7 +7,11 @@ namespace Snap.Hutao.Service.AvatarInfo; internal interface IAvatarInfoDbService { - void DeleteAvatarInfoRangeByUid(string uid); + void RemoveAvatarInfoRangeByUid(string uid); List GetAvatarInfoListByUid(string uid); + + ValueTask> GetAvatarInfoListByUidAsync(string uid); + + ValueTask RemoveAvatarInfoRangeByUidAsync(string uid); } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationDbService.cs index 5364956a..c73cc773 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationDbService.cs @@ -66,7 +66,7 @@ internal sealed partial class CultivationDbService : ICultivationDbService } } - public async ValueTask DeleteCultivateEntryByIdAsync(Guid entryId) + public async ValueTask RemoveCultivateEntryByIdAsync(Guid entryId) { using (IServiceScope scope = serviceProvider.CreateScope()) { @@ -77,15 +77,6 @@ internal sealed partial class CultivationDbService : ICultivationDbService } } - public void UpdateInventoryItem(InventoryItem item) - { - using (IServiceScope scope = serviceProvider.CreateScope()) - { - AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); - appDbContext.InventoryItems.UpdateAndSave(item); - } - } - public void UpdateCultivateItem(CultivateItem item) { using (IServiceScope scope = serviceProvider.CreateScope()) @@ -95,6 +86,15 @@ internal sealed partial class CultivationDbService : ICultivationDbService } } + public async ValueTask UpdateCultivateItemAsync(CultivateItem item) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + await appDbContext.CultivateItems.UpdateAndSaveAsync(item).ConfigureAwait(false); + } + } + public async ValueTask GetCultivateEntryByProjectIdAndItemIdAsync(Guid projectId, uint itemId) { using (IServiceScope scope = serviceProvider.CreateScope()) @@ -115,7 +115,7 @@ internal sealed partial class CultivationDbService : ICultivationDbService } } - public async ValueTask DeleteCultivateItemRangeByEntryIdAsync(Guid entryId) + public async ValueTask RemoveCultivateItemRangeByEntryIdAsync(Guid entryId) { using (IServiceScope scope = serviceProvider.CreateScope()) { @@ -144,7 +144,7 @@ internal sealed partial class CultivationDbService : ICultivationDbService } } - public async ValueTask DeleteCultivateProjectByIdAsync(Guid projectId) + public async ValueTask RemoveCultivateProjectByIdAsync(Guid projectId) { using (IServiceScope scope = serviceProvider.CreateScope()) { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.Collection.cs b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.Collection.cs index 4291d8de..39829039 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.Collection.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.Collection.cs @@ -75,6 +75,6 @@ internal sealed partial class CultivationService // Sync database await taskContext.SwitchToBackgroundAsync(); - await cultivationDbService.DeleteCultivateProjectByIdAsync(project.InnerId).ConfigureAwait(false); + await cultivationDbService.RemoveCultivateProjectByIdAsync(project.InnerId).ConfigureAwait(false); } } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs index 342ed306..dbe03ca3 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs @@ -8,6 +8,7 @@ using Snap.Hutao.Model.Entity.Database; using Snap.Hutao.Model.Entity.Primitive; using Snap.Hutao.Model.Metadata.Item; using Snap.Hutao.Model.Primitive; +using Snap.Hutao.Service.Inventroy; using Snap.Hutao.ViewModel.Cultivation; using System.Collections.ObjectModel; @@ -23,6 +24,7 @@ internal sealed partial class CultivationService : ICultivationService { private readonly ScopedDbCurrent dbCurrent; private readonly ICultivationDbService cultivationDbService; + private readonly IInventoryDbService inventoryDbService; private readonly IServiceProvider serviceProvider; private readonly ITaskContext taskContext; @@ -140,13 +142,13 @@ internal sealed partial class CultivationService : ICultivationService public async ValueTask RemoveCultivateEntryAsync(Guid entryId) { await taskContext.SwitchToBackgroundAsync(); - await cultivationDbService.DeleteCultivateEntryByIdAsync(entryId).ConfigureAwait(false); + await cultivationDbService.RemoveCultivateEntryByIdAsync(entryId).ConfigureAwait(false); } /// public void SaveInventoryItem(InventoryItemView item) { - cultivationDbService.UpdateInventoryItem(item.Entity); + inventoryDbService.UpdateInventoryItem(item.Entity); } /// @@ -181,7 +183,7 @@ internal sealed partial class CultivationService : ICultivationService } Guid entryId = entry.InnerId; - await cultivationDbService.DeleteCultivateItemRangeByEntryIdAsync(entryId).ConfigureAwait(false); + await cultivationDbService.RemoveCultivateItemRangeByEntryIdAsync(entryId).ConfigureAwait(false); IEnumerable toAdd = items.Select(item => CultivateItem.From(entryId, item)); await cultivationDbService.AddCultivateItemRangeAsync(toAdd).ConfigureAwait(false); diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationDbService.cs index 0e277b23..ffb2ed1f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationDbService.cs @@ -10,11 +10,11 @@ internal interface ICultivationDbService { ValueTask AddCultivateProjectAsync(CultivateProject project); - ValueTask DeleteCultivateEntryByIdAsync(Guid entryId); + ValueTask RemoveCultivateEntryByIdAsync(Guid entryId); - ValueTask DeleteCultivateItemRangeByEntryIdAsync(Guid entryId); + ValueTask RemoveCultivateItemRangeByEntryIdAsync(Guid entryId); - ValueTask DeleteCultivateProjectByIdAsync(Guid projectId); + ValueTask RemoveCultivateProjectByIdAsync(Guid projectId); ValueTask GetCultivateEntryByProjectIdAndItemIdAsync(Guid projectId, uint itemId); @@ -34,5 +34,5 @@ internal interface ICultivationDbService void UpdateCultivateItem(CultivateItem item); - void UpdateInventoryItem(InventoryItem item); + ValueTask UpdateCultivateItemAsync(CultivateItem item); } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteDbService.cs index 5829e0bb..c537e3d7 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteDbService.cs @@ -23,6 +23,15 @@ internal sealed partial class DailyNoteDbService : IDailyNoteDbService } } + public async ValueTask ContainsUidAsync(string uid) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + return await appDbContext.DailyNotes.AsNoTracking().AnyAsync(n => n.Uid == uid).ConfigureAwait(false); + } + } + public async ValueTask AddDailyNoteEntryAsync(DailyNoteEntry entry) { using (IServiceScope scope = serviceProvider.CreateScope()) @@ -50,15 +59,6 @@ internal sealed partial class DailyNoteDbService : IDailyNoteDbService } } - public List GetDailyNoteEntryList() - { - using (IServiceScope scope = serviceProvider.CreateScope()) - { - AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); - return appDbContext.DailyNotes.AsNoTracking().ToList(); - } - } - public List GetDailyNoteEntryIncludeUserList() { using (IServiceScope scope = serviceProvider.CreateScope()) @@ -67,4 +67,13 @@ internal sealed partial class DailyNoteDbService : IDailyNoteDbService return appDbContext.DailyNotes.AsNoTracking().Include(n => n.User).ToList(); } } + + public async ValueTask> GetDailyNoteEntryIncludeUserListAsync() + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + return await appDbContext.DailyNotes.AsNoTracking().Include(n => n.User).ToListAsync().ConfigureAwait(false); + } + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteService.cs b/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteService.cs index 968916f3..4d2cdf0b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/DailyNote/DailyNoteService.cs @@ -42,7 +42,7 @@ internal sealed partial class DailyNoteService : IDailyNoteService, IRecipient entryList = dailyNoteDbService.GetDailyNoteEntryIncludeUserList(); + List entryList = await dailyNoteDbService.GetDailyNoteEntryIncludeUserListAsync().ConfigureAwait(false); entryList.ForEach(entry => { entry.UserGameRole = userService.GetUserGameRoleByUid(entry.Uid); }); entries = new(entryList); } @@ -108,7 +108,7 @@ internal sealed partial class DailyNoteService : IDailyNoteService, IRecipient ContainsUidAsync(string uid); + ValueTask DeleteDailyNoteEntryByIdAsync(Guid entryId); List GetDailyNoteEntryIncludeUserList(); - List GetDailyNoteEntryList(); + ValueTask> GetDailyNoteEntryIncludeUserListAsync(); ValueTask UpdateDailyNoteEntryAsync(DailyNoteEntry entry); } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaItemSaveContext.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaItemSaveContext.cs index 9c031b2f..1e47e37a 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaItemSaveContext.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaItemSaveContext.cs @@ -49,10 +49,10 @@ internal readonly struct GachaItemSaveContext // 全量刷新 if (!IsLazy) { - GachaLogDbService.DeleteNewerGachaItemsByArchiveIdQueryTypeAndEndId(archive.InnerId, QueryType, EndId); + GachaLogDbService.RemoveNewerGachaItemRangeByArchiveIdQueryTypeAndEndId(archive.InnerId, QueryType, EndId); } - GachaLogDbService.AddGachaItems(ItemsToAdd); + GachaLogDbService.AddGachaItemRange(ItemsToAdd); } } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogDbService.cs index ed98e29a..dc4c3ce8 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogDbService.cs @@ -48,7 +48,21 @@ internal sealed partial class GachaLogDbService : IGachaLogDbService } } - public async ValueTask DeleteGachaArchiveByIdAsync(Guid archiveId) + public async ValueTask> GetGachaItemListByArchiveIdAsync(Guid archiveId) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + return await appDbContext.GachaItems + .AsNoTracking() + .Where(i => i.ArchiveId == archiveId) + .OrderBy(i => i.Id) + .ToListAsync() + .ConfigureAwait(false); + } + } + + public async ValueTask RemoveGachaArchiveByIdAsync(Guid archiveId) { using (IServiceScope scope = serviceProvider.CreateScope()) { @@ -118,6 +132,36 @@ internal sealed partial class GachaLogDbService : IGachaLogDbService return item?.Id ?? 0L; } + public async ValueTask GetNewestGachaItemIdByArchiveIdAndQueryTypeAsync(Guid archiveId, GachaConfigType queryType) + { + GachaItem? item = null; + + try + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + + // TODO: replace with MaxBy + // https://github.com/dotnet/efcore/issues/25566 + // .MaxBy(i => i.Id); + item = await appDbContext.GachaItems + .AsNoTracking() + .Where(i => i.ArchiveId == archiveId) + .Where(i => i.QueryType == queryType) + .OrderByDescending(i => i.Id) + .FirstOrDefaultAsync() + .ConfigureAwait(false); + } + } + catch (SqliteException ex) + { + ThrowHelper.UserdataCorrupted(SH.ServiceGachaLogEndIdUserdataCorruptedMessage, ex); + } + + return item?.Id ?? 0L; + } + public long GetOldestGachaItemIdByArchiveId(Guid archiveId) { GachaItem? item = null; @@ -139,6 +183,28 @@ internal sealed partial class GachaLogDbService : IGachaLogDbService return item?.Id ?? long.MaxValue; } + public async ValueTask GetOldestGachaItemIdByArchiveIdAsync(Guid archiveId) + { + GachaItem? item = null; + + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + + // TODO: replace with MaxBy + // https://github.com/dotnet/efcore/issues/25566 + // .MaxBy(i => i.Id); + item = await appDbContext.GachaItems + .AsNoTracking() + .Where(i => i.ArchiveId == archiveId) + .OrderBy(i => i.Id) + .FirstOrDefaultAsync() + .ConfigureAwait(false); + } + + return item?.Id ?? long.MaxValue; + } + public long GetOldestGachaItemIdByArchiveIdAndQueryType(Guid archiveId, GachaConfigType queryType) { GachaItem? item = null; @@ -182,15 +248,6 @@ internal sealed partial class GachaLogDbService : IGachaLogDbService return item?.Id ?? long.MaxValue; } - public async ValueTask AddGachaArchiveAsync(GachaArchive archive) - { - using (IServiceScope scope = serviceProvider.CreateScope()) - { - AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); - await appDbContext.GachaArchives.AddAndSaveAsync(archive).ConfigureAwait(false); - } - } - public void AddGachaArchive(GachaArchive archive) { using (IServiceScope scope = serviceProvider.CreateScope()) @@ -200,6 +257,15 @@ internal sealed partial class GachaLogDbService : IGachaLogDbService } } + public async ValueTask AddGachaArchiveAsync(GachaArchive archive) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + await appDbContext.GachaArchives.AddAndSaveAsync(archive).ConfigureAwait(false); + } + } + public List GetHutaoGachaItemList(Guid archiveId, GachaConfigType queryType, long endId) { using (IServiceScope scope = serviceProvider.CreateScope()) @@ -225,6 +291,32 @@ internal sealed partial class GachaLogDbService : IGachaLogDbService } } + public async ValueTask> GetHutaoGachaItemListAsync(Guid archiveId, GachaConfigType queryType, long endId) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + return await appDbContext.GachaItems + .AsNoTracking() + .Where(i => i.ArchiveId == archiveId) + .Where(i => i.QueryType == queryType) + .OrderByDescending(i => i.Id) + .Where(i => i.Id > endId) + + // Keep this to make SQL generates correctly + .Select(i => new Web.Hutao.GachaLog.GachaItem() + { + GachaType = i.GachaType, + QueryType = i.QueryType, + ItemId = i.ItemId, + Time = i.Time, + Id = i.Id, + }) + .ToListAsync() + .ConfigureAwait(false); + } + } + public async ValueTask GetGachaArchiveByIdAsync(Guid archiveId, CancellationToken token) { using (IServiceScope scope = serviceProvider.CreateScope()) @@ -258,7 +350,7 @@ internal sealed partial class GachaLogDbService : IGachaLogDbService } } - public void AddGachaItems(List items) + public void AddGachaItemRange(List items) { using (IServiceScope scope = serviceProvider.CreateScope()) { @@ -267,7 +359,16 @@ internal sealed partial class GachaLogDbService : IGachaLogDbService } } - public void DeleteNewerGachaItemsByArchiveIdQueryTypeAndEndId(Guid archiveId, GachaConfigType queryType, long endId) + public async ValueTask AddGachaItemRangeAsync(List items) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + await appDbContext.GachaItems.AddRangeAndSaveAsync(items).ConfigureAwait(false); + } + } + + public void RemoveNewerGachaItemRangeByArchiveIdQueryTypeAndEndId(Guid archiveId, GachaConfigType queryType, long endId) { using (IServiceScope scope = serviceProvider.CreateScope()) { @@ -279,4 +380,18 @@ internal sealed partial class GachaLogDbService : IGachaLogDbService .ExecuteDelete(); } } + + public async ValueTask RemoveNewerGachaItemRangeByArchiveIdQueryTypeAndEndIdAsync(Guid archiveId, GachaConfigType queryType, long endId) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + await appDbContext.GachaItems + .AsNoTracking() + .Where(i => i.ArchiveId == archiveId && i.QueryType == queryType) + .Where(i => i.Id >= endId) + .ExecuteDeleteAsync() + .ConfigureAwait(false); + } + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogHutaoCloudService.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogHutaoCloudService.cs index 92a94ab4..b23e5608 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogHutaoCloudService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogHutaoCloudService.cs @@ -41,7 +41,9 @@ internal sealed partial class GachaLogHutaoCloudService : IGachaLogHutaoCloudSer List items = new(); foreach ((GachaConfigType type, long endId) in endIds) { - List part = gachaLogDbService.GetHutaoGachaItemList(gachaArchive.InnerId, type, endId); + List part = await gachaLogDbService + .GetHutaoGachaItemListAsync(gachaArchive.InnerId, type, endId) + .ConfigureAwait(false); items.AddRange(part); } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogService.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogService.cs index dd9ae373..e6daeaf2 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/GachaLogService.cs @@ -88,7 +88,7 @@ internal sealed partial class GachaLogService : IGachaLogService // Return statistics using (ValueStopwatch.MeasureExecution(logger)) { - List items = gachaLogDbService.GetGachaItemListByArchiveId(archive.InnerId); + List items = await gachaLogDbService.GetGachaItemListByArchiveIdAsync(archive.InnerId).ConfigureAwait(false); return await gachaStatisticsFactory.CreateAsync(items, context).ConfigureAwait(false); } } @@ -102,7 +102,7 @@ internal sealed partial class GachaLogService : IGachaLogService List statistics = new(); foreach (GachaArchive archive in ArchiveCollection) { - List items = gachaLogDbService.GetGachaItemListByArchiveId(archive.InnerId); + List items = await gachaLogDbService.GetGachaItemListByArchiveIdAsync(archive.InnerId).ConfigureAwait(false); GachaStatisticsSlim slim = await gachaStatisticsSlimFactory.CreateAsync(context, items, archive.Uid).ConfigureAwait(false); statistics.Add(slim); } @@ -150,7 +150,7 @@ internal sealed partial class GachaLogService : IGachaLogService // Sync database await taskContext.SwitchToBackgroundAsync(); - await gachaLogDbService.DeleteGachaArchiveByIdAsync(archive.InnerId).ConfigureAwait(false); + await gachaLogDbService.RemoveGachaArchiveByIdAsync(archive.InnerId).ConfigureAwait(false); // Sync cache await taskContext.SwitchToMainThreadAsync(); diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/IGachaLogDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/IGachaLogDbService.cs index 1f55fe71..43fba695 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/IGachaLogDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/IGachaLogDbService.cs @@ -13,13 +13,13 @@ internal interface IGachaLogDbService ValueTask AddGachaArchiveAsync(GachaArchive archive); - void AddGachaItems(List items); + void AddGachaItemRange(List items); ValueTask AddGachaItemsAsync(List items); - ValueTask DeleteGachaArchiveByIdAsync(Guid archiveId); + ValueTask RemoveGachaArchiveByIdAsync(Guid archiveId); - void DeleteNewerGachaItemsByArchiveIdQueryTypeAndEndId(Guid archiveId, GachaConfigType queryType, long endId); + void RemoveNewerGachaItemRangeByArchiveIdQueryTypeAndEndId(Guid archiveId, GachaConfigType queryType, long endId); ValueTask GetGachaArchiveByIdAsync(Guid archiveId, CancellationToken token); @@ -29,6 +29,8 @@ internal interface IGachaLogDbService List GetGachaItemListByArchiveId(Guid archiveId); + ValueTask> GetGachaItemListByArchiveIdAsync(Guid archiveId); + List GetHutaoGachaItemList(Guid archiveId, GachaConfigType queryType, long endId); long GetNewestGachaItemIdByArchiveIdAndQueryType(Guid archiveId, GachaConfigType queryType); @@ -40,4 +42,14 @@ internal interface IGachaLogDbService long GetOldestGachaItemIdByArchiveIdAndQueryType(Guid archiveId, GachaConfigType queryType); ValueTask GetOldestGachaItemIdByArchiveIdAndQueryTypeAsync(Guid archiveId, GachaConfigType queryType, CancellationToken token); + + ValueTask GetNewestGachaItemIdByArchiveIdAndQueryTypeAsync(Guid archiveId, GachaConfigType queryType); + + ValueTask GetOldestGachaItemIdByArchiveIdAsync(Guid archiveId); + + ValueTask> GetHutaoGachaItemListAsync(Guid archiveId, GachaConfigType queryType, long endId); + + ValueTask AddGachaItemRangeAsync(List items); + + ValueTask RemoveNewerGachaItemRangeByArchiveIdQueryTypeAndEndIdAsync(Guid archiveId, GachaConfigType queryType, long endId); } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFExportService.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFExportService.cs index d0374cd7..a445785f 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFExportService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UIGFExportService.cs @@ -24,10 +24,10 @@ internal sealed partial class UIGFExportService : IUIGFExportService public async ValueTask ExportAsync(GachaLogServiceMetadataContext context, GachaArchive archive) { await taskContext.SwitchToBackgroundAsync(); - - List list = gachaLogDbService - .GetGachaItemListByArchiveId(archive.InnerId) - .SelectList(i => UIGFItem.From(i, context.GetNameQualityByItemId(i.ItemId))); + List entities = await gachaLogDbService + .GetGachaItemListByArchiveIdAsync(archive.InnerId) + .ConfigureAwait(false); + List list = entities.SelectList(i => UIGFItem.From(i, context.GetNameQualityByItemId(i.ItemId))); UIGF uigf = new() { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameDbService.cs index 7c4f10ed..220d5401 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameDbService.cs @@ -33,15 +33,6 @@ internal sealed partial class GameDbService : IGameDbService } } - public async ValueTask UpdateGameAccountAsync(GameAccount gameAccount) - { - using (IServiceScope scope = serviceProvider.CreateScope()) - { - AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); - await appDbContext.GameAccounts.UpdateAndSaveAsync(gameAccount).ConfigureAwait(false); - } - } - public void UpdateGameAccount(GameAccount gameAccount) { using (IServiceScope scope = serviceProvider.CreateScope()) @@ -51,7 +42,16 @@ internal sealed partial class GameDbService : IGameDbService } } - public async ValueTask DeleteGameAccountByIdAsync(Guid id) + public async ValueTask UpdateGameAccountAsync(GameAccount gameAccount) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + await appDbContext.GameAccounts.UpdateAndSaveAsync(gameAccount).ConfigureAwait(false); + } + } + + public async ValueTask RemoveGameAccountByIdAsync(Guid id) { using (IServiceScope scope = serviceProvider.CreateScope()) { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs index 75e280f7..f4660afc 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs @@ -386,16 +386,6 @@ internal sealed partial class GameService : IGameService gameAccounts.Remove(gameAccount); await taskContext.SwitchToBackgroundAsync(); - await gameDbService.DeleteGameAccountByIdAsync(gameAccount.InnerId).ConfigureAwait(false); - } - - private static bool LaunchSchemeMatchesExecutable(LaunchScheme launchScheme, string gameFileName) - { - return (launchScheme.IsOversea, gameFileName) switch - { - (true, GenshinImpactFileName) => true, - (false, YuanShenFileName) => true, - _ => false, - }; + await gameDbService.RemoveGameAccountByIdAsync(gameAccount.InnerId).ConfigureAwait(false); } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/IGameDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/IGameDbService.cs index 42f50de8..0ee216f5 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/IGameDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/IGameDbService.cs @@ -10,7 +10,7 @@ internal interface IGameDbService { ValueTask AddGameAccountAsync(GameAccount gameAccount); - ValueTask DeleteGameAccountByIdAsync(Guid id); + ValueTask RemoveGameAccountByIdAsync(Guid id); ObservableCollection GetGameAccountCollection(); diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/IInventoryDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/IInventoryDbService.cs new file mode 100644 index 00000000..74ed4288 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/IInventoryDbService.cs @@ -0,0 +1,17 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Snap.Hutao.Model.Entity; + +namespace Snap.Hutao.Service.Inventroy; + +internal interface IInventoryDbService +{ + ValueTask AddInventoryItemRangeByProjectId(List items); + + ValueTask RemoveInventoryItemRangeByProjectId(Guid projectId); + + void UpdateInventoryItem(InventoryItem item); + + ValueTask UpdateInventoryItemAsync(InventoryItem item); +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/IInventoryService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/IInventoryService.cs new file mode 100644 index 00000000..be6fdd89 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/IInventoryService.cs @@ -0,0 +1,8 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Service.Inventroy; + +internal interface IInventoryService +{ +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/InventoryDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/InventoryDbService.cs new file mode 100644 index 00000000..1bd4b181 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/InventoryDbService.cs @@ -0,0 +1,61 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Microsoft.EntityFrameworkCore; +using Snap.Hutao.Core.Database; +using Snap.Hutao.Model.Entity; +using Snap.Hutao.Model.Entity.Database; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Snap.Hutao.Service.Inventroy; + +[ConstructorGenerated] +[Injection(InjectAs.Singleton, typeof(IInventoryDbService))] +internal sealed partial class InventoryDbService : IInventoryDbService +{ + private readonly IServiceProvider serviceProvider; + + public async ValueTask RemoveInventoryItemRangeByProjectId(Guid projectId) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + await appDbContext.InventoryItems + .AsNoTracking() + .Where(a => a.ProjectId == projectId && a.ItemId != 202U) // 摩拉 + .ExecuteDeleteAsync() + .ConfigureAwait(false); + } + } + + public async ValueTask AddInventoryItemRangeByProjectId(List items) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + await appDbContext.InventoryItems.AddRangeAndSaveAsync(items).ConfigureAwait(false); + } + } + + public void UpdateInventoryItem(InventoryItem item) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + appDbContext.InventoryItems.UpdateAndSave(item); + } + } + + public async ValueTask UpdateInventoryItemAsync(InventoryItem item) + { + using (IServiceScope scope = serviceProvider.CreateScope()) + { + AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService(); + await appDbContext.InventoryItems.UpdateAndSaveAsync(item).ConfigureAwait(false); + } + } +} diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/InventoryService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/InventoryService.cs new file mode 100644 index 00000000..7904038d --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Service/Inventroy/InventoryService.cs @@ -0,0 +1,9 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Service.Inventroy; + +[Injection(InjectAs.Transient)] +internal sealed class InventoryService : IInventoryService +{ +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/SpiralAbyss/SpiralAbyssRecordDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/SpiralAbyss/SpiralAbyssRecordDbService.cs index 7e5833e2..2cdd5ef4 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/SpiralAbyss/SpiralAbyssRecordDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/SpiralAbyss/SpiralAbyssRecordDbService.cs @@ -48,4 +48,4 @@ internal sealed partial class SpiralAbyssRecordDbService : ISpiralAbyssRecordDbS await appDbContext.SpiralAbysses.AddAndSaveAsync(entry).ConfigureAwait(false); } } -} +} \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/IUserDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/IUserDbService.cs index 82274eb3..b0256188 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/User/IUserDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/User/IUserDbService.cs @@ -9,7 +9,7 @@ internal interface IUserDbService ValueTask DeleteUserByIdAsync(Guid id); - ValueTask DeleteUsersAsync(); + ValueTask RemoveUsersAsync(); ValueTask> GetUserListAsync(); diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/UserDbService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/UserDbService.cs index a407fac6..c3abc869 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/User/UserDbService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/User/UserDbService.cs @@ -49,7 +49,7 @@ internal sealed partial class UserDbService : IUserDbService } } - public async ValueTask DeleteUsersAsync() + public async ValueTask RemoveUsersAsync() { using (IServiceScope scope = serviceProvider.CreateScope()) { diff --git a/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs b/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs index 4abe839d..06a232e6 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/User/UserService.cs @@ -61,7 +61,7 @@ internal sealed partial class UserService : IUserService, IUserServiceUnsafe public async ValueTask UnsafeRemoveUsersAsync() { await taskContext.SwitchToBackgroundAsync(); - await userDbService.DeleteUsersAsync().ConfigureAwait(false); + await userDbService.RemoveUsersAsync().ConfigureAwait(false); } /// diff --git a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj index 7b191905..1e7a8fb3 100644 --- a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj +++ b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj @@ -79,6 +79,7 @@ + @@ -206,6 +207,7 @@ + @@ -239,12 +241,12 @@ - - - - - - + + + + + + diff --git a/src/Snap.Hutao/Snap.Hutao/View/Card/CardReference.cs b/src/Snap.Hutao/Snap.Hutao/View/Card/CardReference.cs new file mode 100644 index 00000000..2335bf3e --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/View/Card/CardReference.cs @@ -0,0 +1,11 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Microsoft.UI.Xaml.Controls; + +namespace Snap.Hutao.View.Card; + +internal sealed class CardReference +{ + public Button? Card { get; set; } +} diff --git a/src/Snap.Hutao/Snap.Hutao/View/Dialog/CultivatePromotionDeltaDialog.xaml b/src/Snap.Hutao/Snap.Hutao/View/Dialog/CultivatePromotionDeltaDialog.xaml index 9403b285..e017c747 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Dialog/CultivatePromotionDeltaDialog.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Dialog/CultivatePromotionDeltaDialog.xaml @@ -124,7 +124,7 @@ + Visibility="{x:Bind Weapon, Converter={StaticResource EmptyObjectToVisibilityConverter}}"> diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/AchievementPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/AchievementPage.xaml index 9887f549..434094f1 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/AchievementPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/AchievementPage.xaml @@ -76,11 +76,7 @@ Margin="2,6,3,6" DisplayMemberPath="Name" ItemsSource="{Binding Archives, Mode=OneWay}" - SelectedItem="{Binding SelectedArchive, Mode=TwoWay}"> - - - - + SelectedItem="{Binding SelectedArchive, Mode=TwoWay}"/> - - + + + + - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + - - - - - + + + Visibility="{Binding ShouldShowTimeDescription, Converter={StaticResource BoolToVisibilityConverter}}"> + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - - - - - - - - + Visibility="{Binding Cards.Count, Converter={StaticResource Int32ToVisibilityConverter}}"> + + + + + + + + + + + + + + diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/CultivationPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/CultivationPage.xaml index 012ee9ae..e1c644d2 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/CultivationPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/CultivationPage.xaml @@ -66,11 +66,7 @@ Margin="6,6,6,6" DisplayMemberPath="Name" ItemsSource="{Binding Projects}" - SelectedItem="{Binding SelectedProject, Mode=TwoWay}"> - - - - + SelectedItem="{Binding SelectedProject, Mode=TwoWay}"/> - - - - + SelectedItem="{Binding SelectedArchive, Mode=TwoWay}"/> diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml index c525e592..0f78a8bc 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/Page/SettingPage.xaml @@ -23,9 +23,9 @@ - + Source="ms-appx:///Resource/BlurBackground.png" + Stretch="Fill"/> + @@ -91,6 +91,8 @@ Description="{Binding HutaoOptions.WebView2Version}" Header="{shcm:ResourceString Name=ViewPageSettingWebview2Header}" HeaderIcon="{shcm:FontIcon Glyph=}"/> + + + + + + + + + + + + + + + + + + + + - + IsClickEnabled="True"> + + + + + + + + IsClickEnabled="True"> + + + + + + + ? hutaoAnnouncements; + private List? cards; /// /// 公告 @@ -43,8 +46,11 @@ internal sealed partial class AnnouncementViewModel : Abstraction.ViewModel /// public string GreetingText { get => greetingText; set => SetProperty(ref greetingText, value); } + public List? Cards { get => cards; set => SetProperty(ref cards, value); } + protected override ValueTask InitializeUIAsync() { + InitializeDashboard(); InitializeInGameAnnouncementAsync().SafeForget(); InitializeHutaoAnnouncementAsync().SafeForget(); UpdateGreetingText(); @@ -105,4 +111,31 @@ internal sealed partial class AnnouncementViewModel : Abstraction.ViewModel } } } + + private void InitializeDashboard() + { + List result = new(); + + if (LocalSetting.Get(SettingKeys.IsHomeCardLaunchGamePresented, true)) + { + result.Add(new() { Card = new LaunchGameCard() }); + } + + if (LocalSetting.Get(SettingKeys.IsHomeCardGachaStatisticsPresented, true)) + { + result.Add(new() { Card = new GachaStatisticsCard() }); + } + + if (LocalSetting.Get(SettingKeys.IsHomeCardAchievementPresented, true)) + { + result.Add(new() { Card = new AchievementCard() }); + } + + if (LocalSetting.Get(SettingKeys.IsHomeCardDailyNotePresented, true)) + { + result.Add(new() { Card = new DailyNoteCard() }); + } + + Cards = result; + } } \ No newline at end of file diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/HomeCardOptions.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/HomeCardOptions.cs new file mode 100644 index 00000000..4aa00d26 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/HomeCardOptions.cs @@ -0,0 +1,33 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Snap.Hutao.Core.Setting; + +namespace Snap.Hutao.ViewModel; + +internal sealed class HomeCardOptions +{ + public bool IsHomeCardLaunchGamePresented + { + get => LocalSetting.Get(SettingKeys.IsHomeCardLaunchGamePresented, true); + set => LocalSetting.Set(SettingKeys.IsHomeCardLaunchGamePresented, value); + } + + public bool IsHomeCardGachaStatisticsPresented + { + get => LocalSetting.Get(SettingKeys.IsHomeCardGachaStatisticsPresented, true); + set => LocalSetting.Set(SettingKeys.IsHomeCardGachaStatisticsPresented, value); + } + + public bool IsHomeCardAchievementPresented + { + get => LocalSetting.Get(SettingKeys.IsHomeCardAchievementPresented, true); + set => LocalSetting.Set(SettingKeys.IsHomeCardAchievementPresented, value); + } + + public bool IsHomeCardDailyNotePresented + { + get => LocalSetting.Get(SettingKeys.IsHomeCardDailyNotePresented, true); + set => LocalSetting.Set(SettingKeys.IsHomeCardDailyNotePresented, value); + } +} \ 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 896123c8..e507753a 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs @@ -37,6 +37,8 @@ namespace Snap.Hutao.ViewModel; [Injection(InjectAs.Scoped)] internal sealed partial class SettingViewModel : Abstraction.ViewModel { + private readonly HomeCardOptions homeCardOptions = new(); + private readonly IContentDialogFactory contentDialogFactory; private readonly IGameLocatorFactory gameLocatorFactory; private readonly INavigationService navigationService; @@ -68,6 +70,8 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel /// public HutaoUserOptions UserOptions { get => hutaoUserOptions; } + public HomeCardOptions HomeCardOptions { get => homeCardOptions; } + /// /// 选中的背景类型 ///