From 00f083608eaded24e69da6f576e06145c18a438c Mon Sep 17 00:00:00 2001
From: DismissedLight <1686188646@qq.com>
Date: Sun, 27 Aug 2023 15:57:39 +0800
Subject: [PATCH] refine navigation icons
---
README.md | 1 -
.../Behavior/SelectedItemInViewBehavior.cs | 2 -
.../Control/Markup/BitmapIconExtension.cs | 2 +-
.../Core/Annotation/HighQualityAttribute.cs | 3 +
.../Snap.Hutao/Core/LifeCycle/Activation.cs | 5 +
...435_AddRefreshTimeOnAvatarInfo.Designer.cs | 546 ++++++++++++++++++
...230827040435_AddRefreshTimeOnAvatarInfo.cs | 52 ++
.../Migrations/AppDbContextModelSnapshot.cs | 9 +
.../Snap.Hutao/Model/Entity/AvatarInfo.cs | 6 +
.../Metadata/Weapon/Weapon.Implementation.cs | 7 +
.../Model/Metadata/Weapon/Weapon.cs | 5 +
.../Resource/Navigation/Achievement.png | Bin 0 -> 43908 bytes
.../Resource/Navigation/Announcement.png | Bin 0 -> 28359 bytes
.../Resource/Navigation/AvatarProperty.png | Bin 0 -> 7963 bytes
.../Resource/Navigation/Cultivation.png | Bin 0 -> 5708 bytes
.../Resource/Navigation/DailyNote.png | Bin 0 -> 38853 bytes
.../Resource/Navigation/Database.png | Bin 0 -> 16466 bytes
.../Resource/Navigation/GachaLog.png | Bin 0 -> 11487 bytes
.../Resource/Navigation/LaunchGame.png | Bin 0 -> 5585 bytes
.../Resource/Navigation/SpiralAbyss.png | Bin 0 -> 5201 bytes
.../Resource/Navigation/WikiAvatar.png | Bin 0 -> 9315 bytes
.../Resource/Navigation/WikiMonster.png | Bin 0 -> 10785 bytes
.../Resource/Navigation/WikiWeapon.png | Bin 0 -> 8795 bytes
.../AvatarInfo/AvatarInfoDbBulkOperation.cs | 54 +-
.../Service/AvatarInfo/AvatarInfoService.cs | 2 +-
.../Factory/SummaryReliquaryFactory.cs | 2 -
...maryReliquarySubPropertyCompositionInfo.cs | 7 -
src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj | 24 +
.../View/Control/BottomTextControl.xaml | 7 +-
.../View/Control/BottomTextControl.xaml.cs | 2 +-
.../Control/BottomTextSmallControl.xaml.cs | 2 +-
.../UInt32ToGradientColorConverter.cs | 1 -
src/Snap.Hutao/Snap.Hutao/View/MainView.xaml | 34 +-
.../Snap.Hutao/View/Page/SettingPage.xaml | 17 -
.../Snap.Hutao/View/Page/WikiWeaponPage.xaml | 232 ++++----
.../ViewModel/Wiki/WikiWeaponViewModel.cs | 13 +-
.../Event/BbsSignReward/SignInClient.cs | 1 -
37 files changed, 861 insertions(+), 175 deletions(-)
create mode 100644 src/Snap.Hutao/Snap.Hutao/Migrations/20230827040435_AddRefreshTimeOnAvatarInfo.Designer.cs
create mode 100644 src/Snap.Hutao/Snap.Hutao/Migrations/20230827040435_AddRefreshTimeOnAvatarInfo.cs
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/Achievement.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/Announcement.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/AvatarProperty.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/Cultivation.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/DailyNote.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/Database.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/GachaLog.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/LaunchGame.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/SpiralAbyss.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/WikiAvatar.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/WikiMonster.png
create mode 100644 src/Snap.Hutao/Snap.Hutao/Resource/Navigation/WikiWeapon.png
diff --git a/README.md b/README.md
index 96550b17..943728fc 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,6 @@ Snap Hutao is an open-source Genshin Impact toolbox on Windows platform, aim to
* [dotnet/runtime](https://github.com/dotnet/runtime)
* [DotNetAnalyzers/StyleCopAnalyzers](https://github.com/DotNetAnalyzers/StyleCopAnalyzers)
* [microsoft/CsWin32](https://github.com/microsoft/CsWin32)
-* [microsoft/vs-threading](https://github.com/microsoft/vs-threading)
* [microsoft/vs-validation](https://github.com/microsoft/vs-validation)
* [microsoft/WindowsAppSDK](https://github.com/microsoft/WindowsAppSDK)
* [microsoft/microsoft-ui-xaml](https://github.com/microsoft/microsoft-ui-xaml)
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Behavior/SelectedItemInViewBehavior.cs b/src/Snap.Hutao/Snap.Hutao/Control/Behavior/SelectedItemInViewBehavior.cs
index 74df6403..89d8034d 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/Behavior/SelectedItemInViewBehavior.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Control/Behavior/SelectedItemInViewBehavior.cs
@@ -2,9 +2,7 @@
// Licensed under the MIT license.
using CommunityToolkit.WinUI.Behaviors;
-using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
-using Microsoft.UI.Xaml.Controls.Primitives;
namespace Snap.Hutao.Control.Behavior;
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Markup/BitmapIconExtension.cs b/src/Snap.Hutao/Snap.Hutao/Control/Markup/BitmapIconExtension.cs
index b8751a52..be542e67 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/Markup/BitmapIconExtension.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Control/Markup/BitmapIconExtension.cs
@@ -21,7 +21,7 @@ internal sealed class BitmapIconExtension : MarkupExtension
///
/// Gets or sets a value indicating whether to display the icon as monochrome.
///
- public bool ShowAsMonochrome { get; set; } = true;
+ public bool ShowAsMonochrome { get; set; }
///
protected override object ProvideValue()
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Annotation/HighQualityAttribute.cs b/src/Snap.Hutao/Snap.Hutao/Core/Annotation/HighQualityAttribute.cs
index 0757aaf0..901ae9ec 100644
--- a/src/Snap.Hutao/Snap.Hutao/Core/Annotation/HighQualityAttribute.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Core/Annotation/HighQualityAttribute.cs
@@ -1,12 +1,15 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
+using System.Diagnostics;
+
namespace Snap.Hutao.Core.Annotation;
///
/// 高质量代码
///
[AttributeUsage(AttributeTargets.All, Inherited = false)]
+[Conditional("DEBUG")]
internal sealed class HighQualityAttribute : Attribute
{
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/Activation.cs b/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/Activation.cs
index 52346413..c53a38cb 100644
--- a/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/Activation.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Core/LifeCycle/Activation.cs
@@ -243,6 +243,11 @@ internal sealed class Activation : IActivation
{
try
{
+ if (serviceProvider.GetRequiredService() is IHutaoUserServiceInitialization hutaoUserServiceInitialization)
+ {
+ await hutaoUserServiceInitialization.InitializeInternalAsync().ConfigureAwait(false);
+ }
+
await serviceProvider
.GetRequiredService()
.RefreshDailyNotesAsync()
diff --git a/src/Snap.Hutao/Snap.Hutao/Migrations/20230827040435_AddRefreshTimeOnAvatarInfo.Designer.cs b/src/Snap.Hutao/Snap.Hutao/Migrations/20230827040435_AddRefreshTimeOnAvatarInfo.Designer.cs
new file mode 100644
index 00000000..52928b03
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Migrations/20230827040435_AddRefreshTimeOnAvatarInfo.Designer.cs
@@ -0,0 +1,546 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Snap.Hutao.Model.Entity.Database;
+
+#nullable disable
+
+namespace Snap.Hutao.Migrations
+{
+ [DbContext(typeof(AppDbContext))]
+ [Migration("20230827040435_AddRefreshTimeOnAvatarInfo")]
+ partial class AddRefreshTimeOnAvatarInfo
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder.HasAnnotation("ProductVersion", "7.0.10");
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.Achievement", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("ArchiveId")
+ .HasColumnType("TEXT");
+
+ b.Property("Current")
+ .HasColumnType("INTEGER");
+
+ b.Property("Id")
+ .HasColumnType("INTEGER");
+
+ b.Property("Status")
+ .HasColumnType("INTEGER");
+
+ b.Property("Time")
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.HasIndex("ArchiveId");
+
+ b.ToTable("achievements");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.AchievementArchive", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("IsSelected")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.ToTable("achievement_archives");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.AvatarInfo", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("CalculatorRefreshTime")
+ .HasColumnType("TEXT");
+
+ b.Property("GameRecordRefreshTime")
+ .HasColumnType("TEXT");
+
+ b.Property("Info")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("ShowcaseRefreshTime")
+ .HasColumnType("TEXT");
+
+ b.Property("Uid")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.ToTable("avatar_infos");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.CultivateEntry", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("Id")
+ .HasColumnType("INTEGER");
+
+ b.Property("ProjectId")
+ .HasColumnType("TEXT");
+
+ b.Property("Type")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("InnerId");
+
+ b.HasIndex("ProjectId");
+
+ b.ToTable("cultivate_entries");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.CultivateItem", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("Count")
+ .HasColumnType("INTEGER");
+
+ b.Property("EntryId")
+ .HasColumnType("TEXT");
+
+ b.Property("IsFinished")
+ .HasColumnType("INTEGER");
+
+ b.Property("ItemId")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("InnerId");
+
+ b.HasIndex("EntryId");
+
+ b.ToTable("cultivate_items");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.CultivateProject", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("AttachedUid")
+ .HasColumnType("TEXT");
+
+ b.Property("IsSelected")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.ToTable("cultivate_projects");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.DailyNoteEntry", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("DailyNote")
+ .HasColumnType("TEXT");
+
+ b.Property("DailyTaskNotify")
+ .HasColumnType("INTEGER");
+
+ b.Property("DailyTaskNotifySuppressed")
+ .HasColumnType("INTEGER");
+
+ b.Property("ExpeditionNotify")
+ .HasColumnType("INTEGER");
+
+ b.Property("ExpeditionNotifySuppressed")
+ .HasColumnType("INTEGER");
+
+ b.Property("HomeCoinNotifySuppressed")
+ .HasColumnType("INTEGER");
+
+ b.Property("HomeCoinNotifyThreshold")
+ .HasColumnType("INTEGER");
+
+ b.Property("RefreshTime")
+ .HasColumnType("TEXT");
+
+ b.Property("ResinNotifySuppressed")
+ .HasColumnType("INTEGER");
+
+ b.Property("ResinNotifyThreshold")
+ .HasColumnType("INTEGER");
+
+ b.Property("TransformerNotify")
+ .HasColumnType("INTEGER");
+
+ b.Property("TransformerNotifySuppressed")
+ .HasColumnType("INTEGER");
+
+ b.Property("Uid")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("UserId")
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("daily_notes");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.GachaArchive", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("IsSelected")
+ .HasColumnType("INTEGER");
+
+ b.Property("Uid")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.ToTable("gacha_archives");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.GachaItem", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("ArchiveId")
+ .HasColumnType("TEXT");
+
+ b.Property("GachaType")
+ .HasColumnType("INTEGER");
+
+ b.Property("Id")
+ .HasColumnType("INTEGER");
+
+ b.Property("ItemId")
+ .HasColumnType("INTEGER");
+
+ b.Property("QueryType")
+ .HasColumnType("INTEGER");
+
+ b.Property("Time")
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.HasIndex("ArchiveId");
+
+ b.ToTable("gacha_items");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.GameAccount", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("AttachUid")
+ .HasColumnType("TEXT");
+
+ b.Property("MihoyoSDK")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Type")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("InnerId");
+
+ b.ToTable("game_accounts");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.InventoryItem", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("Count")
+ .HasColumnType("INTEGER");
+
+ b.Property("ItemId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ProjectId")
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.HasIndex("ProjectId");
+
+ b.ToTable("inventory_items");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.InventoryReliquary", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("AppendPropIdList")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("ItemId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Level")
+ .HasColumnType("INTEGER");
+
+ b.Property("MainPropId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ProjectId")
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.HasIndex("ProjectId");
+
+ b.ToTable("inventory_reliquaries");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.InventoryWeapon", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("ItemId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Level")
+ .HasColumnType("INTEGER");
+
+ b.Property("ProjectId")
+ .HasColumnType("TEXT");
+
+ b.Property("PromoteLevel")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("InnerId");
+
+ b.HasIndex("ProjectId");
+
+ b.ToTable("inventory_weapons");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.ObjectCacheEntry", b =>
+ {
+ b.Property("Key")
+ .HasColumnType("TEXT");
+
+ b.Property("ExpireTime")
+ .HasColumnType("TEXT");
+
+ b.Property("Value")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Key");
+
+ b.ToTable("object_cache");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.SettingEntry", b =>
+ {
+ b.Property("Key")
+ .HasColumnType("TEXT");
+
+ b.Property("Value")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Key");
+
+ b.ToTable("settings");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.SpiralAbyssEntry", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("ScheduleId")
+ .HasColumnType("INTEGER");
+
+ b.Property("SpiralAbyss")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Uid")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("InnerId");
+
+ b.ToTable("spiral_abysses");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.User", b =>
+ {
+ b.Property("InnerId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("Aid")
+ .HasColumnType("TEXT");
+
+ b.Property("CookieToken")
+ .HasColumnType("TEXT");
+
+ b.Property("IsOversea")
+ .HasColumnType("INTEGER");
+
+ b.Property("IsSelected")
+ .HasColumnType("INTEGER");
+
+ b.Property("LToken")
+ .HasColumnType("TEXT")
+ .HasColumnName("Ltoken");
+
+ b.Property("Mid")
+ .HasColumnType("TEXT");
+
+ b.Property("SToken")
+ .HasColumnType("TEXT")
+ .HasColumnName("Stoken");
+
+ b.HasKey("InnerId");
+
+ b.ToTable("users");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.Achievement", b =>
+ {
+ b.HasOne("Snap.Hutao.Model.Entity.AchievementArchive", "Archive")
+ .WithMany()
+ .HasForeignKey("ArchiveId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Archive");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.CultivateEntry", b =>
+ {
+ b.HasOne("Snap.Hutao.Model.Entity.CultivateProject", "Project")
+ .WithMany()
+ .HasForeignKey("ProjectId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Project");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.CultivateItem", b =>
+ {
+ b.HasOne("Snap.Hutao.Model.Entity.CultivateEntry", "Entry")
+ .WithMany()
+ .HasForeignKey("EntryId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Entry");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.DailyNoteEntry", b =>
+ {
+ b.HasOne("Snap.Hutao.Model.Entity.User", "User")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.GachaItem", b =>
+ {
+ b.HasOne("Snap.Hutao.Model.Entity.GachaArchive", "Archive")
+ .WithMany()
+ .HasForeignKey("ArchiveId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Archive");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.InventoryItem", b =>
+ {
+ b.HasOne("Snap.Hutao.Model.Entity.CultivateProject", "Project")
+ .WithMany()
+ .HasForeignKey("ProjectId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Project");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.InventoryReliquary", b =>
+ {
+ b.HasOne("Snap.Hutao.Model.Entity.CultivateProject", "Project")
+ .WithMany()
+ .HasForeignKey("ProjectId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Project");
+ });
+
+ modelBuilder.Entity("Snap.Hutao.Model.Entity.InventoryWeapon", b =>
+ {
+ b.HasOne("Snap.Hutao.Model.Entity.CultivateProject", "Project")
+ .WithMany()
+ .HasForeignKey("ProjectId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Project");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/Snap.Hutao/Snap.Hutao/Migrations/20230827040435_AddRefreshTimeOnAvatarInfo.cs b/src/Snap.Hutao/Snap.Hutao/Migrations/20230827040435_AddRefreshTimeOnAvatarInfo.cs
new file mode 100644
index 00000000..0e1f87e4
--- /dev/null
+++ b/src/Snap.Hutao/Snap.Hutao/Migrations/20230827040435_AddRefreshTimeOnAvatarInfo.cs
@@ -0,0 +1,52 @@
+//
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace Snap.Hutao.Migrations
+{
+ ///
+ public partial class AddRefreshTimeOnAvatarInfo : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ name: "CalculatorRefreshTime",
+ table: "avatar_infos",
+ type: "TEXT",
+ nullable: false,
+ defaultValue: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
+
+ migrationBuilder.AddColumn(
+ name: "GameRecordRefreshTime",
+ table: "avatar_infos",
+ type: "TEXT",
+ nullable: false,
+ defaultValue: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
+
+ migrationBuilder.AddColumn(
+ name: "ShowcaseRefreshTime",
+ table: "avatar_infos",
+ type: "TEXT",
+ nullable: false,
+ defaultValue: new DateTimeOffset(new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)));
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ name: "CalculatorRefreshTime",
+ table: "avatar_infos");
+
+ migrationBuilder.DropColumn(
+ name: "GameRecordRefreshTime",
+ table: "avatar_infos");
+
+ migrationBuilder.DropColumn(
+ name: "ShowcaseRefreshTime",
+ table: "avatar_infos");
+ }
+ }
+}
diff --git a/src/Snap.Hutao/Snap.Hutao/Migrations/AppDbContextModelSnapshot.cs b/src/Snap.Hutao/Snap.Hutao/Migrations/AppDbContextModelSnapshot.cs
index dac00816..646ae427 100644
--- a/src/Snap.Hutao/Snap.Hutao/Migrations/AppDbContextModelSnapshot.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Migrations/AppDbContextModelSnapshot.cs
@@ -69,10 +69,19 @@ namespace Snap.Hutao.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
+ b.Property("CalculatorRefreshTime")
+ .HasColumnType("TEXT");
+
+ b.Property("GameRecordRefreshTime")
+ .HasColumnType("TEXT");
+
b.Property("Info")
.IsRequired()
.HasColumnType("TEXT");
+ b.Property("ShowcaseRefreshTime")
+ .HasColumnType("TEXT");
+
b.Property("Uid")
.IsRequired()
.HasColumnType("TEXT");
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/AvatarInfo.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/AvatarInfo.cs
index 9d1ecbd0..aff34126 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/AvatarInfo.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/AvatarInfo.cs
@@ -31,6 +31,12 @@ internal sealed class AvatarInfo : IMappingFrom
public Web.Enka.Model.AvatarInfo Info { get; set; } = default!;
+ public DateTimeOffset ShowcaseRefreshTime { get; set; }
+
+ public DateTimeOffset GameRecordRefreshTime { get; set; }
+
+ public DateTimeOffset CalculatorRefreshTime { get; set; }
+
///
/// 创建一个新的实体角色信息
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.Implementation.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.Implementation.cs
index c9f863a2..86a4465c 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.Implementation.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.Implementation.cs
@@ -5,6 +5,7 @@ using Snap.Hutao.Model.Calculable;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Metadata.Abstraction;
using Snap.Hutao.Model.Metadata.Converter;
+using Snap.Hutao.Model.Metadata.Item;
using Snap.Hutao.ViewModel.Complex;
using Snap.Hutao.ViewModel.GachaLog;
@@ -22,6 +23,12 @@ internal sealed partial class Weapon : IStatisticsItemSource, ISummaryItemSource
[JsonIgnore]
public WeaponCollocationView? Collocation { get; set; }
+ ///
+ /// [非元数据] 养成物品视图
+ ///
+ [JsonIgnore]
+ public List? CultivationItemsView { get; set; }
+
///
[JsonIgnore]
public QualityType Quality
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.cs
index 01cc7e55..19136d47 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Weapon/Weapon.cs
@@ -61,4 +61,9 @@ internal sealed partial class Weapon
/// 被动信息, 无被动的武器为
///
public NameDescriptions? Affix { get; set; } = default!;
+
+ ///
+ /// 养成物品
+ ///
+ public List CultivationItems { get; set; } = default!;
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Navigation/Achievement.png b/src/Snap.Hutao/Snap.Hutao/Resource/Navigation/Achievement.png
new file mode 100644
index 0000000000000000000000000000000000000000..9935dd917f0807338a97334a1984b5ad1114f932
GIT binary patch
literal 43908
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