diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.cs
index 6bda9d53..b57a6458 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/SettingEntry.cs
@@ -31,6 +31,11 @@ internal sealed class SettingEntry
///
public const string SystemBackdropType = "SystemBackdropType";
+ ///
+ /// 启用高级功能
+ ///
+ public const string IsAdvancedLaunchOptionsEnabled = "IsAdvancedLaunchOptionsEnabled";
+
///
/// 实时便笺刷新时间
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Avatar/Avatar.Implementation.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Avatar/Avatar.Implementation.cs
index ea1ae0ba..bc14e22d 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Avatar/Avatar.Implementation.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Avatar/Avatar.Implementation.cs
@@ -1,13 +1,13 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
-using Snap.Hutao.Model.Binding.Hutao;
using Snap.Hutao.Model.Calculable;
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;
+using Snap.Hutao.ViewModel.Wiki;
namespace Snap.Hutao.Model.Metadata.Avatar;
@@ -36,6 +36,7 @@ internal partial class Avatar : IStatisticsItemSource, ISummaryItemSource, IName
///
/// 最大等级
///
+ [SuppressMessage("", "CA1822")]
public int MaxLevel { get => 90; }
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Item/Material.cs b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Item/Material.cs
index 1a2906a7..b6a041a1 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Item/Material.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Metadata/Item/Material.cs
@@ -3,6 +3,7 @@
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Primitive;
+using Snap.Hutao.ViewModel.Cultivation;
using System.Collections.Immutable;
namespace Snap.Hutao.Model.Metadata.Item;
@@ -81,6 +82,7 @@ internal sealed class Material : Display
return true;
}
+ // TODO: Currently only support CN
return TypeDescription switch
{
"角色与武器培养素材" => true,
@@ -114,23 +116,23 @@ internal sealed class Material : Display
/// 获取物品对应的 DaysOfWeek
///
/// DaysOfWeek
- public Binding.Cultivation.DaysOfWeek GetDaysOfWeek()
+ public DaysOfWeek GetDaysOfWeek()
{
if (MondayThursdayItems.Contains(Id))
{
- return Binding.Cultivation.DaysOfWeek.MondayAndThursday;
+ return DaysOfWeek.MondayAndThursday;
}
if (TuesdayFridayItems.Contains(Id))
{
- return Binding.Cultivation.DaysOfWeek.TuesdayAndFriday;
+ return DaysOfWeek.TuesdayAndFriday;
}
if (WednesdaySaturdayItems.Contains(Id))
{
- return Binding.Cultivation.DaysOfWeek.WednesdayAndSaturday;
+ return DaysOfWeek.WednesdayAndSaturday;
}
- return Binding.Cultivation.DaysOfWeek.Any;
+ return DaysOfWeek.Any;
}
}
\ No newline at end of file
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 737cbf0c..baecfbb4 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.Designer.cs
@@ -3561,6 +3561,15 @@ namespace Snap.Hutao.Resource.Localization {
}
}
+ ///
+ /// 查找类似 启用「启动游戏-高级功能」的任意功能 您需要在设置里解锁它 的本地化字符串。
+ ///
+ internal static string ViewPageLaunchGameAdvancedFeatureElevationHint {
+ get {
+ return ResourceManager.GetString("ViewPageLaunchGameAdvancedFeatureElevationHint", resourceCulture);
+ }
+ }
+
///
/// 查找类似 高级功能 的本地化字符串。
///
@@ -4191,6 +4200,33 @@ namespace Snap.Hutao.Resource.Localization {
}
}
+ ///
+ /// 查找类似 在完整阅读原神和胡桃工具箱用户协议后,我选择启用「启动游戏-高级功能」 的本地化字符串。
+ ///
+ internal static string ViewPageSettingIsAdvancedLaunchOptionsEnabledDescription {
+ get {
+ return ResourceManager.GetString("ViewPageSettingIsAdvancedLaunchOptionsEnabledDescription", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 启动高级功能 的本地化字符串。
+ ///
+ internal static string ViewPageSettingIsAdvancedLaunchOptionsEnabledHeader {
+ get {
+ return ResourceManager.GetString("ViewPageSettingIsAdvancedLaunchOptionsEnabledHeader", resourceCulture);
+ }
+ }
+
+ ///
+ /// 查找类似 您解锁了「启动游戏-高级功能」!其含有潜在违反原神服务条款的风险,一旦启用,您将咨询承担可能的后果。慎重选择! 的本地化字符串。
+ ///
+ internal static string ViewPageSettingFeaturesDangerousHint {
+ get {
+ return ResourceManager.GetString("ViewPageSettingFeaturesDangerousHint", resourceCulture);
+ }
+ }
+
///
/// 查找类似 Github 上反馈的问题会优先处理 的本地化字符串。
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
index 29cf45c9..16e664c4 100644
--- a/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
+++ b/src/Snap.Hutao/Snap.Hutao/Resource/Localization/SH.resx
@@ -1284,6 +1284,9 @@
启动游戏
+
+ 启用「启动游戏-高级功能」的任意功能 您需要在设置里解锁它
+
高级功能
@@ -1494,6 +1497,15 @@
显示
+
+ 在完整阅读原神和胡桃工具箱用户协议后,我选择启用「启动游戏-高级功能」
+
+
+ 启动高级功能
+
+
+ 您解锁了「启动游戏-高级功能」!其含有潜在违反原神服务条款的风险,一旦启用,您将咨询承担可能的后果。慎重选择!
+
Github 上反馈的问题会优先处理
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs b/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs
index fa0dd172..b76dfb3e 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/AppOptions.cs
@@ -6,6 +6,7 @@ using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Snap.Hutao.Core.Database;
+using Snap.Hutao.Core.LifeCycle;
using Snap.Hutao.Model.Entity;
using Snap.Hutao.Model.Entity.Database;
using System.Globalization;
@@ -24,6 +25,7 @@ internal sealed class AppOptions : ObservableObject, IOptions
private bool? isEmptyHistoryWishVisible;
private Core.Windowing.BackdropType? backdropType;
private CultureInfo? currentCulture;
+ private bool? isAdvancedLaunchOptionsEnabled;
///
/// 构造一个新的应用程序选项
@@ -171,6 +173,40 @@ internal sealed class AppOptions : ObservableObject, IOptions
}
}
+ ///
+ /// 是否启用高级功能
+ ///
+ public bool IsAdvancedLaunchOptionsEnabled
+ {
+ get
+ {
+ if (isAdvancedLaunchOptionsEnabled == null)
+ {
+ using (IServiceScope scope = serviceScopeFactory.CreateScope())
+ {
+ AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService();
+ string? value = appDbContext.Settings.SingleOrDefault(e => e.Key == SettingEntry.IsAdvancedLaunchOptionsEnabled)?.Value;
+ isAdvancedLaunchOptionsEnabled = value != null && bool.Parse(value);
+ }
+ }
+
+ return isAdvancedLaunchOptionsEnabled.Value;
+ }
+
+ set
+ {
+ if (SetProperty(ref isAdvancedLaunchOptionsEnabled, value))
+ {
+ using (IServiceScope scope = serviceScopeFactory.CreateScope())
+ {
+ AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService();
+ appDbContext.Settings.ExecuteDeleteWhere(e => e.Key == SettingEntry.IsAdvancedLaunchOptionsEnabled);
+ appDbContext.Settings.AddAndSave(new(SettingEntry.IsAdvancedLaunchOptionsEnabled, value.ToString()));
+ }
+ }
+ }
+ }
+
///
public AppOptions Value { get => this; }
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs
index 9f3d22fc..beb0d7c0 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/CultivationService.cs
@@ -13,11 +13,8 @@ using Snap.Hutao.Model.Entity.Primitive;
using Snap.Hutao.Model.Metadata.Item;
using Snap.Hutao.Model.Primitive;
using Snap.Hutao.Service.Metadata;
+using Snap.Hutao.ViewModel.Cultivation;
using System.Collections.ObjectModel;
-using BindingCultivateEntry = Snap.Hutao.Model.Binding.Cultivation.CultivateEntryView;
-using BindingCultivateItem = Snap.Hutao.Model.Binding.Cultivation.CultivateItem;
-using BindingInventoryItem = Snap.Hutao.Model.Binding.Inventory.InventoryItem;
-using BindingStatisticsItem = Snap.Hutao.Model.Binding.Cultivation.StatisticsCultivateItem;
namespace Snap.Hutao.Service.Cultivation;
@@ -64,7 +61,7 @@ internal sealed class CultivationService : ICultivationService
try
{
- Current ??= projects.SingleOrDefault(proj => proj.IsSelected);
+ Current ??= projects.SelectedOrDefault();
}
catch (DbUpdateConcurrencyException ex)
{
@@ -129,7 +126,7 @@ internal sealed class CultivationService : ICultivationService
}
///
- public List GetInventoryItems(CultivateProject cultivateProject, List metadata, ICommand saveCommand)
+ public List GetInventoryItems(CultivateProject cultivateProject, List metadata, ICommand saveCommand)
{
Guid projectId = cultivateProject.InnerId;
using (IServiceScope scope = scopeFactory.CreateScope())
@@ -139,7 +136,7 @@ internal sealed class CultivationService : ICultivationService
.Where(a => a.ProjectId == projectId)
.ToList();
- List results = new();
+ List results = new();
foreach (Material meta in metadata.Where(m => m.IsInventoryItem()).OrderBy(m => m.Id))
{
InventoryItem entity = entities.SingleOrDefault(e => e.ItemId == meta.Id) ?? InventoryItem.Create(projectId, meta.Id);
@@ -151,7 +148,7 @@ internal sealed class CultivationService : ICultivationService
}
///
- public async Task> GetCultivateEntriesAsync(CultivateProject cultivateProject)
+ public async Task> GetCultivateEntriesAsync(CultivateProject cultivateProject)
{
await ThreadHelper.SwitchToBackgroundAsync();
using (IServiceScope scope = scopeFactory.CreateScope())
@@ -163,7 +160,7 @@ internal sealed class CultivationService : ICultivationService
Dictionary idAvatarMap = await metadataService.GetIdToAvatarMapAsync().ConfigureAwait(false);
Dictionary idWeaponMap = await metadataService.GetIdToWeaponMapAsync().ConfigureAwait(false);
- List results = new();
+ List results = new();
List entries = await appDbContext.CultivateEntries
.Where(e => e.ProjectId == cultivateProject.InnerId)
.ToListAsync()
@@ -173,7 +170,7 @@ internal sealed class CultivationService : ICultivationService
{
Guid entryId = entry.InnerId;
- List resultItems = new();
+ List resultItems = new();
foreach (CultivateItem item in await GetEntryItemsAsync(appDbContext, entryId).ConfigureAwait(false))
{
@@ -197,11 +194,11 @@ internal sealed class CultivationService : ICultivationService
}
///
- public async Task> GetStatisticsCultivateItemCollectionAsync(CultivateProject cultivateProject, CancellationToken token)
+ public async Task> GetStatisticsCultivateItemCollectionAsync(CultivateProject cultivateProject, CancellationToken token)
{
using (IServiceScope scope = scopeFactory.CreateScope())
{
- List resultItems = new();
+ List resultItems = new();
AppDbContext appDbContext = scope.ServiceProvider.GetRequiredService();
List materials = await scope.ServiceProvider
@@ -222,7 +219,7 @@ internal sealed class CultivationService : ICultivationService
continue;
}
- if (resultItems.SingleOrDefault(i => i.Inner.Id == item.ItemId) is BindingStatisticsItem existedItem)
+ if (resultItems.SingleOrDefault(i => i.Inner.Id == item.ItemId) is StatisticsCultivateItem existedItem)
{
existedItem.Count += item.Count;
}
@@ -237,7 +234,7 @@ internal sealed class CultivationService : ICultivationService
foreach (InventoryItem inventoryItem in await GetProjectInventoryAsync(appDbContext, projectId).ConfigureAwait(false))
{
- if (resultItems.SingleOrDefault(i => i.Inner.Id == inventoryItem.ItemId) is BindingStatisticsItem existedItem)
+ if (resultItems.SingleOrDefault(i => i.Inner.Id == inventoryItem.ItemId) is StatisticsCultivateItem existedItem)
{
existedItem.TotalCount += inventoryItem.Count;
}
@@ -264,7 +261,7 @@ internal sealed class CultivationService : ICultivationService
}
///
- public void SaveInventoryItem(BindingInventoryItem item)
+ public void SaveInventoryItem(InventoryItemView item)
{
using (IServiceScope scope = scopeFactory.CreateScope())
{
@@ -295,7 +292,7 @@ internal sealed class CultivationService : ICultivationService
try
{
- Current ??= appDbContext.CultivateProjects.AsNoTracking().SingleOrDefault(proj => proj.IsSelected);
+ Current ??= appDbContext.CultivateProjects.AsNoTracking().SelectedOrDefault();
}
catch (InvalidOperationException ex)
{
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationService.cs
index 324c20fe..b7fbc887 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Cultivation/ICultivationService.cs
@@ -1,10 +1,10 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
-using Snap.Hutao.Model.Binding.Cultivation;
using Snap.Hutao.Model.Entity;
using Snap.Hutao.Model.Entity.Primitive;
using Snap.Hutao.Model.Metadata.Item;
+using Snap.Hutao.ViewModel.Cultivation;
using Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate;
using System.Collections.ObjectModel;
@@ -35,7 +35,7 @@ internal interface ICultivationService
/// 元数据
/// 保存命令
/// 物品列表
- List GetInventoryItems(CultivateProject cultivateProject, List metadata, ICommand saveCommand);
+ List GetInventoryItems(CultivateProject cultivateProject, List metadata, ICommand saveCommand);
///
/// 获取用于绑定的项目集合
@@ -84,7 +84,7 @@ internal interface ICultivationService
/// 保存单个物品
///
/// 物品
- void SaveInventoryItem(Model.Binding.Inventory.InventoryItem item);
+ void SaveInventoryItem(InventoryItemView item);
///
/// 异步尝试添加新的项目
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs
index 6c7d14ac..adc7a248 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs
@@ -301,15 +301,16 @@ internal sealed class GameService : IGameService
try
{
Interlocked.Increment(ref runningGamesCounter);
- bool isElevated = Activation.GetElevated();
game.Start();
- if (isElevated && launchOptions.MultipleInstances)
+
+ bool isAdvancedOptionsAllowed = Activation.GetElevated() && appOptions.IsAdvancedLaunchOptionsEnabled;
+ if (isAdvancedOptionsAllowed && launchOptions.MultipleInstances)
{
- await ProcessInterop.DisableProtectionAsync(game, gamePath).ConfigureAwait(false);
+ ProcessInterop.DisableProtection(game, gamePath);
}
- if (isElevated && launchOptions.UnlockFps)
+ if (isAdvancedOptionsAllowed && launchOptions.UnlockFps)
{
await ProcessInterop.UnlockFpsAsync(game, launchOptions).ConfigureAwait(false);
}
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/ProcessInterop.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/ProcessInterop.cs
index ee12a971..a01101ac 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Game/ProcessInterop.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/ProcessInterop.cs
@@ -2,11 +2,9 @@
// Licensed under the MIT license.
using Snap.Hutao.Core;
-using Snap.Hutao.Core.IO;
using Snap.Hutao.Service.Game.Unlocker;
using System.Diagnostics;
using System.IO;
-using System.Runtime.InteropServices;
namespace Snap.Hutao.Service.Game;
@@ -69,21 +67,17 @@ internal static class ProcessInterop
/// 游戏进程
/// 游戏路径
/// 是否禁用成功
- public static async Task DisableProtectionAsync(Process game, string gamePath)
+ public static bool DisableProtection(Process game, string gamePath)
{
string? gameFolder = Path.GetDirectoryName(gamePath);
if (!string.IsNullOrEmpty(gameFolder))
{
- string pbasePath = Path.Combine(gameFolder, "mhypbase.dll");
- SafeHandle handle = File.OpenHandle(pbasePath, share: FileShare.None);
- while (true) {
- if (game.MainWindowHandle != nint.Zero) {
- handle.Close();
- break;
- }
- await Task.Delay(100).ConfigureAwait(false);
+ string mhypbaseDll = Path.Combine(gameFolder, "mhypbase.dll");
+ using (File.OpenHandle(mhypbaseDll, share: FileShare.None))
+ {
+ SpinWait.SpinUntil(() => game.MainWindowHandle != 0);
+ return true;
}
- return true;
}
return false;
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Control/BaseValueSlider.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Control/BaseValueSlider.xaml.cs
index 4f7e6567..15318fa6 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Control/BaseValueSlider.xaml.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Control/BaseValueSlider.xaml.cs
@@ -4,7 +4,7 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Snap.Hutao.Control;
-using Snap.Hutao.Model.Binding.BaseValue;
+using Snap.Hutao.ViewModel.Wiki;
namespace Snap.Hutao.View.Control;
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml
index 05972186..2c285939 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/LaunchGamePage.xaml
@@ -251,12 +251,18 @@
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml.cs
index ab04e179..a3ad6ff2 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiAvatarPage.xaml.cs
@@ -2,7 +2,7 @@
// Licensed under the MIT license.
using Snap.Hutao.Control;
-using Snap.Hutao.ViewModel;
+using Snap.Hutao.ViewModel.Wiki;
namespace Snap.Hutao.View.Page;
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiMonsterPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiMonsterPage.xaml
index 834af513..25f83b4f 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiMonsterPage.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiMonsterPage.xaml
@@ -12,10 +12,10 @@
xmlns:shci="using:Snap.Hutao.Control.Image"
xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shcp="using:Snap.Hutao.Control.Panel"
- xmlns:shv="using:Snap.Hutao.ViewModel"
xmlns:shvc="using:Snap.Hutao.View.Control"
+ xmlns:shvw="using:Snap.Hutao.ViewModel.Wiki"
xmlns:wsc="using:WinUICommunity.SettingsUI.Controls"
- d:DataContext="{d:DesignInstance Type=shv:WikiMonsterViewModel}"
+ d:DataContext="{d:DesignInstance Type=shvw:WikiMonsterViewModel}"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiMonsterPage.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiMonsterPage.xaml.cs
index 7f04b2dd..2610c647 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiMonsterPage.xaml.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiMonsterPage.xaml.cs
@@ -2,7 +2,7 @@
// Licensed under the MIT license.
using Snap.Hutao.Control;
-using Snap.Hutao.ViewModel;
+using Snap.Hutao.ViewModel.Wiki;
namespace Snap.Hutao.View.Page;
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml
index a06b11d7..8b62d175 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml
@@ -13,9 +13,9 @@
xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shcp="using:Snap.Hutao.Control.Panel"
xmlns:shct="using:Snap.Hutao.Control.Text"
- xmlns:shv="using:Snap.Hutao.ViewModel"
xmlns:shvc="using:Snap.Hutao.View.Control"
- d:DataContext="{d:DesignInstance Type=shv:WikiWeaponViewModel}"
+ xmlns:shvw="using:Snap.Hutao.ViewModel.Wiki"
+ d:DataContext="{d:DesignInstance Type=shvw:WikiWeaponViewModel}"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml.cs b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml.cs
index f8829cfd..1f76afab 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Page/WikiWeaponPage.xaml.cs
@@ -2,7 +2,7 @@
// Licensed under the MIT license.
using Snap.Hutao.Control;
-using Snap.Hutao.ViewModel;
+using Snap.Hutao.ViewModel.Wiki;
namespace Snap.Hutao.View.Page;
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivateEntryView.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivateEntryView.cs
index 72644e00..1a9f411a 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivateEntryView.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivateEntryView.cs
@@ -1,7 +1,9 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
-namespace Snap.Hutao.Model.Binding.Cultivation;
+using Snap.Hutao.Model.Binding;
+
+namespace Snap.Hutao.ViewModel.Cultivation;
///
/// 养成物品
@@ -15,7 +17,7 @@ internal sealed class CultivateEntryView : Item
/// 实体入口
/// 对应物品
/// 物品列表
- public CultivateEntryView(Entity.CultivateEntry entry, Item item, List items)
+ public CultivateEntryView(Model.Entity.CultivateEntry entry, Item item, List items)
{
Id = entry.Id;
EntryId = entry.InnerId;
@@ -39,7 +41,7 @@ internal sealed class CultivateEntryView : Item
///
/// 实体
///
- public List Items { get; set; } = default!;
+ public List Items { get; set; } = default!;
///
/// 是否为今日的材料
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivateItem.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivateItemView.cs
similarity index 77%
rename from src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivateItem.cs
rename to src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivateItemView.cs
index 37078db8..24ce847d 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivateItem.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivateItemView.cs
@@ -2,22 +2,23 @@
// Licensed under the MIT license.
using CommunityToolkit.Mvvm.ComponentModel;
+using Snap.Hutao.Model.Binding;
using Snap.Hutao.Model.Metadata.Item;
-namespace Snap.Hutao.Model.Binding.Cultivation;
+namespace Snap.Hutao.ViewModel.Cultivation;
///
/// 养成物品
///
[HighQuality]
-internal sealed class CultivateItem : ObservableObject, IEntityWithMetadata
+internal sealed class CultivateItemView : ObservableObject, IEntityWithMetadata
{
///
/// 养成物品
///
/// 实体
/// 元数据
- public CultivateItem(Entity.CultivateItem entity, Material inner)
+ public CultivateItemView(Model.Entity.CultivateItem entity, Material inner)
{
Entity = entity;
Inner = inner;
@@ -31,7 +32,7 @@ internal sealed class CultivateItem : ObservableObject, IEntityWithMetadata
/// 实体
///
- public Entity.CultivateItem Entity { get; }
+ public Model.Entity.CultivateItem Entity { get; }
///
/// 是否完成此项
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivationViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivationViewModel.cs
index 0fe833e7..8e9c543c 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivationViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/CultivationViewModel.cs
@@ -3,7 +3,6 @@
using CommunityToolkit.Mvvm.Input;
using Microsoft.Extensions.DependencyInjection;
-using Snap.Hutao.Model.Binding.Cultivation;
using Snap.Hutao.Model.Entity;
using Snap.Hutao.Model.Metadata.Item;
using Snap.Hutao.Service.Abstraction;
@@ -31,7 +30,7 @@ internal sealed class CultivationViewModel : Abstraction.ViewModel
private ObservableCollection? projects;
private CultivateProject? selectedProject;
- private List? inventoryItems;
+ private List? inventoryItems;
private ObservableCollection? cultivateEntries;
private ObservableCollection? statisticsItems;
@@ -39,8 +38,6 @@ internal sealed class CultivationViewModel : Abstraction.ViewModel
/// 构造一个新的养成视图模型
///
/// 服务提供器
- /// 元数据服务
- /// 日志器
public CultivationViewModel(IServiceProvider serviceProvider)
{
cultivationService = serviceProvider.GetRequiredService();
@@ -51,9 +48,9 @@ internal sealed class CultivationViewModel : Abstraction.ViewModel
AddProjectCommand = new AsyncRelayCommand(AddProjectAsync);
RemoveProjectCommand = new AsyncRelayCommand(RemoveProjectAsync);
RemoveEntryCommand = new AsyncRelayCommand(RemoveEntryAsync);
- SaveInventoryItemCommand = new RelayCommand(SaveInventoryItem);
+ SaveInventoryItemCommand = new RelayCommand(SaveInventoryItem);
NavigateToPageCommand = new RelayCommand(NavigateToPage);
- FinishStateCommand = new RelayCommand(UpdateFinishedState);
+ FinishStateCommand = new RelayCommand(UpdateFinishedState);
}
///
@@ -79,7 +76,7 @@ internal sealed class CultivationViewModel : Abstraction.ViewModel
///
/// 物品列表
///
- public List? InventoryItems { get => inventoryItems; set => SetProperty(ref inventoryItems, value); }
+ public List? InventoryItems { get => inventoryItems; set => SetProperty(ref inventoryItems, value); }
///
/// 养成列表
@@ -203,7 +200,7 @@ internal sealed class CultivationViewModel : Abstraction.ViewModel
}
}
- private void SaveInventoryItem(Model.Binding.Inventory.InventoryItem? inventoryItem)
+ private void SaveInventoryItem(InventoryItemView? inventoryItem)
{
if (inventoryItem != null)
{
@@ -212,7 +209,7 @@ internal sealed class CultivationViewModel : Abstraction.ViewModel
}
}
- private void UpdateFinishedState(Model.Binding.Cultivation.CultivateItem? item)
+ private void UpdateFinishedState(CultivateItemView? item)
{
if (item != null)
{
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/DaysOfWeek.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/DaysOfWeek.cs
index 58d4640a..4749aaf0 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/DaysOfWeek.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/DaysOfWeek.cs
@@ -1,7 +1,7 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
-namespace Snap.Hutao.Model.Binding.Cultivation;
+namespace Snap.Hutao.ViewModel.Cultivation;
///
/// 游戏内星期中的天
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Binding/Inventory/InventoryItem.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/InventoryItemView.cs
similarity index 76%
rename from src/Snap.Hutao/Snap.Hutao/Model/Binding/Inventory/InventoryItem.cs
rename to src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/InventoryItemView.cs
index 2a570dfc..807f0e82 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Binding/Inventory/InventoryItem.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/InventoryItemView.cs
@@ -2,15 +2,16 @@
// Licensed under the MIT license.
using CommunityToolkit.Mvvm.ComponentModel;
+using Snap.Hutao.Model.Binding;
using Snap.Hutao.Model.Metadata.Item;
-namespace Snap.Hutao.Model.Binding.Inventory;
+namespace Snap.Hutao.ViewModel.Cultivation;
///
/// 背包物品
///
[HighQuality]
-internal sealed class InventoryItem : ObservableObject, IEntityWithMetadata
+internal sealed class InventoryItemView : ObservableObject, IEntityWithMetadata
{
///
/// 创建一个新的背包物品
@@ -18,7 +19,7 @@ internal sealed class InventoryItem : ObservableObject, IEntityWithMetadata实体
/// 元数据
/// 保存命令
- public InventoryItem(Entity.InventoryItem entity, Material inner, ICommand saveCommand)
+ public InventoryItemView(Model.Entity.InventoryItem entity, Material inner, ICommand saveCommand)
{
Entity = entity;
Inner = inner;
@@ -28,7 +29,7 @@ internal sealed class InventoryItem : ObservableObject, IEntityWithMetadata
/// 实体
///
- public Entity.InventoryItem Entity { get; set; }
+ public Model.Entity.InventoryItem Entity { get; set; }
///
/// 元数据
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/StatisticsCultivateItem.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/StatisticsCultivateItem.cs
index cbfb324c..ea004849 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/StatisticsCultivateItem.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Cultivation/StatisticsCultivateItem.cs
@@ -3,7 +3,7 @@
using Snap.Hutao.Model.Metadata.Item;
-namespace Snap.Hutao.Model.Binding.Cultivation;
+namespace Snap.Hutao.ViewModel.Cultivation;
///
/// 仅用于统计总数的养成物品
@@ -16,7 +16,7 @@ internal sealed class StatisticsCultivateItem
///
/// 材料
/// 实体
- public StatisticsCultivateItem(Material inner, Entity.CultivateItem entity)
+ public StatisticsCultivateItem(Material inner, Model.Entity.CultivateItem entity)
{
Inner = inner;
Count = entity.Count;
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/LaunchGameViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/LaunchGameViewModel.cs
index d3b072ca..3affcae9 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/LaunchGameViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/LaunchGameViewModel.cs
@@ -53,6 +53,7 @@ internal sealed class LaunchGameViewModel : Abstraction.ViewModel
gameService = serviceProvider.GetRequiredService();
memoryCache = serviceProvider.GetRequiredService();
Options = serviceProvider.GetRequiredService();
+ AppOptions = serviceProvider.GetRequiredService();
this.serviceProvider = serviceProvider;
LaunchCommand = new AsyncRelayCommand(LaunchAsync, AsyncRelayCommandOptions.AllowConcurrentExecutions);
@@ -100,6 +101,11 @@ internal sealed class LaunchGameViewModel : Abstraction.ViewModel
///
public LaunchOptions Options { get; }
+ ///
+ /// 应用选项
+ ///
+ public AppOptions AppOptions { get; }
+
///
/// 游戏资源
///
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/Screenshot.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/Screenshot.cs
deleted file mode 100644
index 9c3594bd..00000000
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/Screenshot.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-using Snap.Hutao.Model.Binding;
-using Snap.Hutao.Service.Game;
-using System.IO;
-using System.Text;
-
-namespace Snap.Hutao.ViewModel.Game;
-
-///
-/// 截图
-///
-internal sealed class Screenshot : INameIcon
-{
- ///
- /// 构造一个新的截图
- ///
- /// 路径
- public Screenshot(string path)
- {
- Name = $"{new FileInfo(path).CreationTime}";
- Icon = path.ToUri();
- }
-
- ///
- public string Name { get; }
-
- ///
- public Uri Icon { get; }
-}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/ScreenshotViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/ScreenshotViewModel.cs
deleted file mode 100644
index dd5b1228..00000000
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Game/ScreenshotViewModel.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-using Snap.Hutao.Service.Game;
-
-namespace Snap.Hutao.ViewModel.Game;
-
-///
-/// 截图视图模型
-///
-[Injection(InjectAs.Scoped)]
-internal sealed class ScreenshotViewModel : Abstraction.ViewModel
-{
- ///
- /// 构造一个新的截图视图模型
- ///
- /// 游戏服务
- public ScreenshotViewModel(IGameService gameService)
- {
-
- }
-
- ///
- protected override async Task OpenUIAsync()
- {
-
- }
-}
\ 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 c41b6039..2af84939 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
@@ -8,6 +8,7 @@ using Microsoft.Windows.AppLifecycle;
using Snap.Hutao.Core.Database;
using Snap.Hutao.Core.IO;
using Snap.Hutao.Core.IO.DataTransfer;
+using Snap.Hutao.Core.LifeCycle;
using Snap.Hutao.Core.Setting;
using Snap.Hutao.Core.Windowing;
using Snap.Hutao.Factory.Abstraction;
@@ -162,6 +163,11 @@ internal sealed class SettingViewModel : Abstraction.ViewModel
///
public ExperimentalFeaturesViewModel Experimental { get; }
+ ///
+ /// 是否提权
+ ///
+ public bool IsElevated { get => Activation.GetElevated(); }
+
///
/// 设置游戏路径命令
///
@@ -272,15 +278,16 @@ internal sealed class SettingViewModel : Abstraction.ViewModel
private async Task SetDataFolderAsync()
{
- IPickerFactory pickerFactory = serviceProvider.GetRequiredService();
- FolderPicker picker = pickerFactory.GetFolderPicker();
- (bool isOk, string folder) = await picker.TryPickSingleFolderAsync().ConfigureAwait(false);
+ (bool isOk, string folder) = await serviceProvider
+ .GetRequiredService()
+ .GetFolderPicker()
+ .TryPickSingleFolderAsync()
+ .ConfigureAwait(false);
- IInfoBarService infoBarService = serviceProvider.GetRequiredService();
if (isOk)
{
LocalSetting.Set(SettingKeys.DataFolderPath, folder);
- infoBarService.Success(SH.ViewModelSettingSetDataFolderSuccess);
+ serviceProvider.GetRequiredService().Success(SH.ViewModelSettingSetDataFolderSuccess);
}
}
@@ -292,8 +299,7 @@ internal sealed class SettingViewModel : Abstraction.ViewModel
private void CopyDeviceId()
{
- IInfoBarService infoBarService = serviceProvider.GetRequiredService();
Clipboard.SetText(DeviceId);
- infoBarService.Success(SH.ViewModelSettingCopyDeviceIdSuccess);
+ serviceProvider.GetRequiredService().Success(SH.ViewModelSettingCopyDeviceIdSuccess);
}
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Binding/BaseValue/BaseValueInfo.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/BaseValueInfo.cs
similarity index 96%
rename from src/Snap.Hutao/Snap.Hutao/Model/Binding/BaseValue/BaseValueInfo.cs
rename to src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/BaseValueInfo.cs
index 525af597..f1b6704e 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Binding/BaseValue/BaseValueInfo.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/BaseValueInfo.cs
@@ -2,10 +2,11 @@
// Licensed under the MIT license.
using CommunityToolkit.Mvvm.ComponentModel;
+using Snap.Hutao.Model;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Metadata;
-namespace Snap.Hutao.Model.Binding.BaseValue;
+namespace Snap.Hutao.ViewModel.Wiki;
///
/// 基础数值信息
@@ -101,7 +102,7 @@ internal sealed class BaseValueInfo : ObservableObject
value += addValue;
}
- values.Add(Metadata.Converter.PropertyDescriptor.FormatNameValue(propValue.Property, value));
+ values.Add(Model.Metadata.Converter.PropertyDescriptor.FormatNameValue(propValue.Property, value));
}
Values = values;
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Binding/Hutao/CookBonusView.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/CookBonusView.cs
similarity index 96%
rename from src/Snap.Hutao/Snap.Hutao/Model/Binding/Hutao/CookBonusView.cs
rename to src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/CookBonusView.cs
index 1de3aa6b..8337de49 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Binding/Hutao/CookBonusView.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/CookBonusView.cs
@@ -5,7 +5,7 @@ using Snap.Hutao.Model.Metadata.Avatar;
using Snap.Hutao.Model.Metadata.Item;
using Snap.Hutao.Model.Primitive;
-namespace Snap.Hutao.Model.Binding.Hutao;
+namespace Snap.Hutao.ViewModel.Wiki;
///
/// 料理奖励视图
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Binding/BaseValue/PropertyCurveValue.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/PropertyCurveValue.cs
similarity index 95%
rename from src/Snap.Hutao/Snap.Hutao/Model/Binding/BaseValue/PropertyCurveValue.cs
rename to src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/PropertyCurveValue.cs
index 448f95d1..99088b81 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Binding/BaseValue/PropertyCurveValue.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/PropertyCurveValue.cs
@@ -3,7 +3,7 @@
using Snap.Hutao.Model.Intrinsic;
-namespace Snap.Hutao.Model.Binding.BaseValue;
+namespace Snap.Hutao.ViewModel.Wiki;
///
/// 战斗属性与初始值
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/WikiAvatarViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs
similarity index 99%
rename from src/Snap.Hutao/Snap.Hutao/ViewModel/WikiAvatarViewModel.cs
rename to src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs
index ce5548bc..7d5c3e95 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/WikiAvatarViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiAvatarViewModel.cs
@@ -5,8 +5,6 @@ using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.WinUI.UI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Primitives;
-using Snap.Hutao.Model.Binding.BaseValue;
-using Snap.Hutao.Model.Binding.Hutao;
using Snap.Hutao.Model.Entity.Primitive;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Intrinsic.Immutable;
@@ -30,7 +28,7 @@ using CalcConsumption = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.Consumptio
using CalcItem = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.Item;
using CalcItemHelper = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.ItemHelper;
-namespace Snap.Hutao.ViewModel;
+namespace Snap.Hutao.ViewModel.Wiki;
///
/// 角色资料视图模型
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/WikiMonsterViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiMonsterViewModel.cs
similarity index 97%
rename from src/Snap.Hutao/Snap.Hutao/ViewModel/WikiMonsterViewModel.cs
rename to src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiMonsterViewModel.cs
index 0a52fccc..4095e9f2 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/WikiMonsterViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiMonsterViewModel.cs
@@ -3,7 +3,6 @@
using CommunityToolkit.WinUI.UI;
using Microsoft.Extensions.DependencyInjection;
-using Snap.Hutao.Model.Binding.BaseValue;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Metadata.Item;
using Snap.Hutao.Model.Metadata.Monster;
@@ -11,7 +10,7 @@ using Snap.Hutao.Model.Primitive;
using Snap.Hutao.Service.Metadata;
using System.Collections.Immutable;
-namespace Snap.Hutao.ViewModel;
+namespace Snap.Hutao.ViewModel.Wiki;
///
/// 怪物资料视图模型
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/WikiWeaponViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs
similarity index 99%
rename from src/Snap.Hutao/Snap.Hutao/ViewModel/WikiWeaponViewModel.cs
rename to src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs
index 21a3a9af..4b78f7ec 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/WikiWeaponViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Wiki/WikiWeaponViewModel.cs
@@ -5,7 +5,6 @@ using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.WinUI.UI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Primitives;
-using Snap.Hutao.Model.Binding.BaseValue;
using Snap.Hutao.Model.Entity.Primitive;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Intrinsic.Immutable;
@@ -26,7 +25,7 @@ using CalcAvatarPromotionDelta = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.A
using CalcClient = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.CalculateClient;
using CalcConsumption = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.Consumption;
-namespace Snap.Hutao.ViewModel;
+namespace Snap.Hutao.ViewModel.Wiki;
///
/// 武器资料视图模型