From 4a027a8d3fe8aed195d5d5befccc1516564251da Mon Sep 17 00:00:00 2001
From: DismissedLight <1686188646@qq.com>
Date: Sun, 8 Jan 2023 14:54:16 +0800
Subject: [PATCH] remove filesystem context
---
.../Context/FileSystem/FileSystemContext.cs | 174 ------------------
.../Context/FileSystem/HutaoContext.cs | 17 --
.../FileSystem/Location/HutaoLocation.cs | 35 ----
.../Location/IFileSystemLocation.cs | 16 --
.../Context/FileSystem/Location/Metadata.cs | 27 ---
.../Context/FileSystem/MetadataContext.cs | 19 --
.../Snap.Hutao/Control/Image/CachedImage.cs | 1 -
.../Control/Image/CompositionImage.cs | 2 -
.../Snap.Hutao/Control/Image/Gradient.cs | 10 +-
.../Snap.Hutao/Core/Caching/IImageCache.cs | 2 -
.../Snap.Hutao/Core/CoreEnvironment.cs | 22 +++
.../DependencyInjection/IocConfiguration.cs | 5 +-
.../Snap.Hutao/Core/IO/Bits/BitsManager.cs | 5 -
.../Snap.Hutao/Core/Logging/LogEntryQueue.cs | 7 +-
.../Model/Entity/Database/AppDbContext.cs | 1 -
.../Database/AppDbContextDesignTimeFactory.cs | 5 +-
.../Database/LogDbContextDesignTimeFactory.cs | 5 +-
.../AvatarInfo/Factory/ElementMastery.cs | 9 -
.../Service/Metadata/MetadataService.cs | 19 +-
src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj | 4 +-
.../EmptyCollectionToBoolConverter.cs | 1 -
.../EmptyCollectionToBoolRevertConverter.cs | 1 -
.../Converter/EmptyObjectToBoolConverter.cs | 1 -
.../EmptyObjectToBoolRevertConverter.cs | 1 -
.../Converter/Int32ToVisibilityConverter.cs | 1 -
.../Int32ToVisibilityRevertConverter.cs | 1 -
.../ExperimentalFeaturesViewModel.cs | 15 +-
.../Snap.Hutao/ViewModel/SettingViewModel.cs | 5 -
.../ViewModel/SpiralAbyssRecordViewModel.cs | 15 --
.../Snap.Hutao/ViewModel/TestViewModel.cs | 16 --
.../Web/Bridge/MiHoYoJSInterface.cs | 2 +-
.../DynamicSecret/DynamicSecretHandler.cs | 1 -
32 files changed, 48 insertions(+), 397 deletions(-)
delete mode 100644 src/Snap.Hutao/Snap.Hutao/Context/FileSystem/FileSystemContext.cs
delete mode 100644 src/Snap.Hutao/Snap.Hutao/Context/FileSystem/HutaoContext.cs
delete mode 100644 src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/HutaoLocation.cs
delete mode 100644 src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/IFileSystemLocation.cs
delete mode 100644 src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/Metadata.cs
delete mode 100644 src/Snap.Hutao/Snap.Hutao/Context/FileSystem/MetadataContext.cs
diff --git a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/FileSystemContext.cs b/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/FileSystemContext.cs
deleted file mode 100644
index 628d15df..00000000
--- a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/FileSystemContext.cs
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-using Snap.Hutao.Context.FileSystem.Location;
-using System.IO;
-
-namespace Snap.Hutao.Context.FileSystem;
-
-///
-/// 文件系统上下文
-///
-/// 路径位置类型
-internal abstract class FileSystemContext
-{
- private readonly IFileSystemLocation location;
-
- ///
- /// 初始化文件系统上下文
- ///
- /// 指定的文件系统位置
- public FileSystemContext(IFileSystemLocation location)
- {
- this.location = location;
- EnsureDirectory();
- }
-
- ///
- /// 创建文件,若已存在文件,则不会创建
- ///
- /// 文件
- public void CreateFileOrIgnore(string file)
- {
- file = Locate(file);
- if (!File.Exists(file))
- {
- File.Create(file).Dispose();
- }
- }
-
- ///
- /// 创建文件夹,若已存在文件,则不会创建
- ///
- /// 文件夹
- public void CreateFolderOrIgnore(string folder)
- {
- folder = Locate(folder);
- if (!Directory.Exists(folder))
- {
- Directory.CreateDirectory(folder);
- }
- }
-
- ///
- /// 尝试删除文件夹
- ///
- /// 文件夹
- public void DeleteFolderOrIgnore(string folder)
- {
- folder = Locate(folder);
- if (Directory.Exists(folder))
- {
- Directory.Delete(folder, true);
- }
- }
-
- ///
- /// 检查文件是否存在
- ///
- /// 文件名称
- /// 是否存在
- public bool FileExists(string file)
- {
- return File.Exists(Locate(file));
- }
-
- ///
- /// 检查文件是否存在
- ///
- /// 文件夹名称
- /// 文件名称
- /// 是否存在
- public bool FileExists(string folder, string file)
- {
- return File.Exists(Locate(folder, file));
- }
-
- ///
- /// 检查文件是否存在
- ///
- /// 文件夹名称
- /// 是否存在
- public bool FolderExists(string folder)
- {
- return Directory.Exists(Locate(folder));
- }
-
- ///
- /// 定位根目录中的文件或文件夹
- ///
- /// 文件或文件夹
- /// 绝对路径
- public string Locate(string fileOrFolder)
- {
- return Path.GetFullPath(fileOrFolder, location.GetPath());
- }
-
- ///
- /// 定位根目录下子文件夹中的文件
- ///
- /// 文件夹
- /// 文件
- /// 绝对路径
- public string Locate(string folder, string file)
- {
- return Path.GetFullPath(Path.Combine(folder, file), location.GetPath());
- }
-
- ///
- /// 将文件移动到指定的子目录
- ///
- /// 文件
- /// 文件夹
- /// 是否覆盖
- /// 是否成功 当文件不存在时会失败
- public bool MoveToFolderOrIgnore(string file, string folder, bool overwrite = true)
- {
- string target = Locate(folder, file);
- file = Locate(file);
-
- if (File.Exists(file))
- {
- File.Move(file, target, overwrite);
- return true;
- }
-
- return false;
- }
-
- ///
- /// 等效于 ,但路径经过解析
- ///
- /// 文件名
- /// 文件流
- public FileStream OpenRead(string file)
- {
- return File.OpenRead(Locate(file));
- }
-
- ///
- /// 等效于 ,但路径经过解析
- ///
- /// 文件名
- /// 文件流
- public FileStream Create(string file)
- {
- return File.Create(Locate(file));
- }
-
- ///
- /// 检查根目录
- ///
- /// 是否创建了路径
- private bool EnsureDirectory()
- {
- string folder = location.GetPath();
- if (!Directory.Exists(folder))
- {
- Directory.CreateDirectory(folder);
- return true;
- }
-
- return false;
- }
-}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/HutaoContext.cs b/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/HutaoContext.cs
deleted file mode 100644
index 43299fb7..00000000
--- a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/HutaoContext.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-namespace Snap.Hutao.Context.FileSystem;
-
-///
-/// 我的文档上下文
-///
-[Injection(InjectAs.Transient)]
-internal class HutaoContext : FileSystemContext
-{
- ///
- public HutaoContext(Location.HutaoLocation myDocument)
- : base(myDocument)
- {
- }
-}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/HutaoLocation.cs b/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/HutaoLocation.cs
deleted file mode 100644
index 2f517b5e..00000000
--- a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/HutaoLocation.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-using System.IO;
-using Windows.ApplicationModel;
-
-namespace Snap.Hutao.Context.FileSystem.Location;
-
-///
-/// 我的文档位置
-///
-[Injection(InjectAs.Transient)]
-internal class HutaoLocation : IFileSystemLocation
-{
- private string? path;
-
- ///
- public string GetPath()
- {
- if (string.IsNullOrEmpty(path))
- {
- string myDocument = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
-#if RELEASE
- // 将测试版与正式版的文件目录分离
- string folderName = Package.Current.PublisherDisplayName == "DGP Studio CI" ? "HutaoAlpha" : "Hutao";
-#else
- // 使得迁移能正常生成
- string folderName = "Hutao";
-#endif
- path = Path.GetFullPath(Path.Combine(myDocument, folderName));
- }
-
- return path;
- }
-}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/IFileSystemLocation.cs b/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/IFileSystemLocation.cs
deleted file mode 100644
index 5baf2b2b..00000000
--- a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/IFileSystemLocation.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-namespace Snap.Hutao.Context.FileSystem.Location;
-
-///
-/// 文件系统位置
-///
-public interface IFileSystemLocation
-{
- ///
- /// 获取路径
- ///
- /// 路径
- string GetPath();
-}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/Metadata.cs b/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/Metadata.cs
deleted file mode 100644
index 5f967ce4..00000000
--- a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/Location/Metadata.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-using System.IO;
-
-namespace Snap.Hutao.Context.FileSystem.Location;
-
-///
-/// 我的文档位置
-///
-[Injection(InjectAs.Transient)]
-internal class Metadata : IFileSystemLocation
-{
- private string? path;
-
- ///
- public string GetPath()
- {
- if (string.IsNullOrEmpty(path))
- {
- string myDocument = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
- path = Path.GetFullPath(Path.Combine(myDocument, "Hutao", "Metadata"));
- }
-
- return path;
- }
-}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/MetadataContext.cs b/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/MetadataContext.cs
deleted file mode 100644
index da417975..00000000
--- a/src/Snap.Hutao/Snap.Hutao/Context/FileSystem/MetadataContext.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) DGP Studio. All rights reserved.
-// Licensed under the MIT license.
-
-using Snap.Hutao.Context.FileSystem.Location;
-
-namespace Snap.Hutao.Context.FileSystem;
-
-///
-/// 元数据上下文
-///
-[Injection(InjectAs.Transient)]
-internal class MetadataContext : FileSystemContext
-{
- ///
- public MetadataContext(Metadata metadata)
- : base(metadata)
- {
- }
-}
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Image/CachedImage.cs b/src/Snap.Hutao/Snap.Hutao/Control/Image/CachedImage.cs
index eae402f4..ef236fac 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/Image/CachedImage.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Control/Image/CachedImage.cs
@@ -7,7 +7,6 @@ using Microsoft.UI.Xaml.Media.Imaging;
using Snap.Hutao.Core.Caching;
using Snap.Hutao.Extension;
using System.Runtime.InteropServices;
-using Windows.Storage;
namespace Snap.Hutao.Control.Image;
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs b/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs
index 0ce1bb7f..ae71b53d 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Control/Image/CompositionImage.cs
@@ -12,8 +12,6 @@ using Snap.Hutao.Service.Abstraction;
using System.IO;
using System.Net.Http;
using System.Runtime.InteropServices;
-using Windows.Storage;
-using Windows.Storage.Streams;
namespace Snap.Hutao.Control.Image;
diff --git a/src/Snap.Hutao/Snap.Hutao/Control/Image/Gradient.cs b/src/Snap.Hutao/Snap.Hutao/Control/Image/Gradient.cs
index 98d4847a..51ef857a 100644
--- a/src/Snap.Hutao/Snap.Hutao/Control/Image/Gradient.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Control/Image/Gradient.cs
@@ -6,9 +6,7 @@ using Microsoft.UI.Composition;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Media;
using System.IO;
-using System.Numerics;
using Windows.Graphics.Imaging;
-using Windows.Storage;
using Windows.Storage.Streams;
namespace Snap.Hutao.Control.Image;
@@ -28,8 +26,8 @@ public class Gradient : CompositionImage
///
public GradientDirection BackgroundDirection
{
- get { return (GradientDirection)GetValue(BackgroundDirectionProperty); }
- set { SetValue(BackgroundDirectionProperty, value); }
+ get => (GradientDirection)GetValue(BackgroundDirectionProperty);
+ set => SetValue(BackgroundDirectionProperty, value);
}
///
@@ -37,8 +35,8 @@ public class Gradient : CompositionImage
///
public GradientDirection ForegroundDirection
{
- get { return (GradientDirection)GetValue(ForegroundDirectionProperty); }
- set { SetValue(ForegroundDirectionProperty, value); }
+ get => (GradientDirection)GetValue(ForegroundDirectionProperty);
+ set => SetValue(ForegroundDirectionProperty, value);
}
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Caching/IImageCache.cs b/src/Snap.Hutao/Snap.Hutao/Core/Caching/IImageCache.cs
index 4d85f390..420a0ccc 100644
--- a/src/Snap.Hutao/Snap.Hutao/Core/Caching/IImageCache.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Core/Caching/IImageCache.cs
@@ -1,8 +1,6 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
-using Windows.Storage;
-
namespace Snap.Hutao.Core.Caching;
///
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/CoreEnvironment.cs b/src/Snap.Hutao/Snap.Hutao/Core/CoreEnvironment.cs
index 7037d8ef..2b8f6162 100644
--- a/src/Snap.Hutao/Snap.Hutao/Core/CoreEnvironment.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Core/CoreEnvironment.cs
@@ -7,6 +7,7 @@ using Snap.Hutao.Core.Json;
using Snap.Hutao.Extension;
using Snap.Hutao.Web.Hoyolab.DynamicSecret;
using System.Collections.Immutable;
+using System.IO;
using System.Text.Json.Serialization.Metadata;
using Windows.ApplicationModel;
@@ -70,6 +71,11 @@ internal static class CoreEnvironment
///
public static readonly string FamilyName;
+ ///
+ /// 数据文件夹
+ ///
+ public static readonly string DataFolder;
+
///
/// 默认的Json序列化选项
///
@@ -93,6 +99,7 @@ internal static class CoreEnvironment
static CoreEnvironment()
{
+ DataFolder = GetDocumentsHutaoPath();
Version = Package.Current.Id.Version.ToVersion();
FamilyName = Package.Current.Id.FamilyName;
CommonUA = $"Snap Hutao/{Version}";
@@ -108,4 +115,19 @@ internal static class CoreEnvironment
object? machineGuid = Registry.GetValue(CryptographyKey, MachineGuidValue, userName);
return Md5Convert.ToHexString($"{userName}{machineGuid}");
}
+
+ private static string GetDocumentsHutaoPath()
+ {
+ string myDocument = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
+#if RELEASE
+ // 将测试版与正式版的文件目录分离
+ string folderName = Package.Current.PublisherDisplayName == "DGP Studio CI" ? "HutaoAlpha" : "Hutao";
+#else
+ // 使得迁移能正常生成
+ string folderName = "Hutao";
+#endif
+ string path = Path.GetFullPath(Path.Combine(myDocument, folderName));
+ Directory.CreateDirectory(path);
+ return path;
+ }
}
\ No newline at end of file
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocConfiguration.cs b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocConfiguration.cs
index 9157672c..e911e636 100644
--- a/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocConfiguration.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Core/DependencyInjection/IocConfiguration.cs
@@ -3,7 +3,6 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
-using Snap.Hutao.Context.FileSystem;
using Snap.Hutao.Model.Entity.Database;
using System.Diagnostics;
@@ -31,9 +30,7 @@ internal static class IocConfiguration
/// 可继续操作的集合
public static IServiceCollection AddDatebase(this IServiceCollection services)
{
- HutaoContext myDocument = new(new());
-
- string dbFile = myDocument.Locate("Userdata.db");
+ string dbFile = System.IO.Path.Combine(CoreEnvironment.DataFolder, "Userdata.db");
string sqlConnectionString = $"Data Source={dbFile}";
// temporarily create a context
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/IO/Bits/BitsManager.cs b/src/Snap.Hutao/Snap.Hutao/Core/IO/Bits/BitsManager.cs
index 7f52a8cf..d95816ab 100644
--- a/src/Snap.Hutao/Snap.Hutao/Core/IO/Bits/BitsManager.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Core/IO/Bits/BitsManager.cs
@@ -2,11 +2,6 @@
// Licensed under the MIT license.
using Microsoft.Extensions.DependencyInjection;
-using Snap.Hutao.Core.IO;
-using System.IO;
-using System.Runtime.InteropServices;
-using Windows.Win32;
-using Windows.Win32.Foundation;
using Windows.Win32.Networking.BackgroundIntelligentTransferService;
namespace Snap.Hutao.Core.IO.Bits;
diff --git a/src/Snap.Hutao/Snap.Hutao/Core/Logging/LogEntryQueue.cs b/src/Snap.Hutao/Snap.Hutao/Core/Logging/LogEntryQueue.cs
index 952635af..64468ddc 100644
--- a/src/Snap.Hutao/Snap.Hutao/Core/Logging/LogEntryQueue.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Core/Logging/LogEntryQueue.cs
@@ -2,7 +2,6 @@
// Licensed under the MIT license.
using Microsoft.EntityFrameworkCore;
-using Snap.Hutao.Context.FileSystem;
using Snap.Hutao.Model.Entity.Database;
using System.Collections.Concurrent;
using System.Diagnostics;
@@ -61,8 +60,8 @@ public sealed class LogEntryQueue : IDisposable
private static LogDbContext InitializeDbContext()
{
- HutaoContext myDocument = new(new());
- LogDbContext logDbContext = LogDbContext.Create($"Data Source={myDocument.Locate("Log.db")}");
+ string logDbName = System.IO.Path.Combine(CoreEnvironment.DataFolder, "Log.db");
+ LogDbContext logDbContext = LogDbContext.Create($"Data Source={logDbName}");
if (logDbContext.Database.GetPendingMigrations().Any())
{
Debug.WriteLine("[Debug] Performing LogDbContext Migrations");
@@ -70,7 +69,7 @@ public sealed class LogEntryQueue : IDisposable
}
// only raw sql can pass
- logDbContext.Database.ExecuteSqlRaw("DELETE FROM logs WHERE Exception IS NULL");
+ logDbContext.Logs.Where(log => log.Exception == null).ExecuteDelete();
return logDbContext;
}
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContext.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContext.cs
index db1c3f92..c99c1309 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContext.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContext.cs
@@ -2,7 +2,6 @@
// Licensed under the MIT license.
using Microsoft.EntityFrameworkCore;
-using Snap.Hutao.Model.Entity;
using Snap.Hutao.Model.Entity.Configuration;
namespace Snap.Hutao.Model.Entity.Database;
diff --git a/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContextDesignTimeFactory.cs b/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContextDesignTimeFactory.cs
index 00d505a3..9c44c409 100644
--- a/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContextDesignTimeFactory.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Model/Entity/Database/AppDbContextDesignTimeFactory.cs
@@ -2,7 +2,6 @@
// Licensed under the MIT license.
using Microsoft.EntityFrameworkCore.Design;
-using Snap.Hutao.Context.FileSystem;
using Snap.Hutao.Model.Entity.Database;
namespace Snap.Hutao.Context.Database;
@@ -17,7 +16,7 @@ public class AppDbContextDesignTimeFactory : IDesignTimeDbContextFactory
diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs
index 9333814c..56fd454d 100644
--- a/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Service/Metadata/MetadataService.cs
@@ -2,7 +2,6 @@
// Licensed under the MIT license.
using Microsoft.Extensions.Caching.Memory;
-using Snap.Hutao.Context.FileSystem;
using Snap.Hutao.Core.Abstraction;
using Snap.Hutao.Core.DependencyInjection.Annotation.HttpClient;
using Snap.Hutao.Core.Diagnostics;
@@ -25,9 +24,9 @@ internal partial class MetadataService : IMetadataService, IMetadataInitializer,
{
private const string MetaFileName = "Meta.json";
+ private readonly string metadataFolderPath;
private readonly IInfoBarService infoBarService;
private readonly HttpClient httpClient;
- private readonly FileSystemContext metadataContext;
private readonly JsonSerializerOptions options;
private readonly ILogger logger;
private readonly IMemoryCache memoryCache;
@@ -44,24 +43,24 @@ internal partial class MetadataService : IMetadataService, IMetadataInitializer,
///
/// 信息条服务
/// http客户端工厂
- /// 我的文档上下文
/// json序列化选项
/// 日志器
/// 内存缓存
public MetadataService(
IInfoBarService infoBarService,
IHttpClientFactory httpClientFactory,
- MetadataContext metadataContext,
JsonSerializerOptions options,
ILogger logger,
IMemoryCache memoryCache)
{
this.infoBarService = infoBarService;
- this.metadataContext = metadataContext;
this.options = options;
this.logger = logger;
this.memoryCache = memoryCache;
httpClient = httpClientFactory.CreateClient(nameof(MetadataService));
+
+ metadataFolderPath = Path.Combine(Core.CoreEnvironment.DataFolder, "Metadata");
+ Directory.CreateDirectory(metadataFolderPath);
}
///
@@ -111,7 +110,7 @@ internal partial class MetadataService : IMetadataService, IMetadataInitializer,
await CheckMetadataAsync(metaMd5Map, token).ConfigureAwait(false);
// save metadataFile
- using (FileStream metaFileStream = metadataContext.Create(MetaFileName))
+ using (FileStream metaFileStream = File.Create(Path.Combine(metadataFolderPath, MetaFileName)))
{
await JsonSerializer
.SerializeAsync(metaFileStream, metaMd5Map, options, token)
@@ -136,7 +135,7 @@ internal partial class MetadataService : IMetadataService, IMetadataInitializer,
string fileFullName = $"{fileName}.json";
bool skip = false;
- if (metadataContext.FileExists(fileFullName))
+ if (File.Exists(Path.Combine(metadataFolderPath, fileFullName)))
{
skip = md5 == await GetFileMd5Async(fileFullName, token).ConfigureAwait(false);
}
@@ -152,7 +151,7 @@ internal partial class MetadataService : IMetadataService, IMetadataInitializer,
private async Task GetFileMd5Async(string fileFullName, CancellationToken token)
{
- using (FileStream stream = metadataContext.OpenRead(fileFullName))
+ using (FileStream stream = File.OpenRead(Path.Combine(metadataFolderPath, fileFullName)))
{
byte[] bytes = await MD5.Create()
.ComputeHashAsync(stream, token)
@@ -171,7 +170,7 @@ internal partial class MetadataService : IMetadataService, IMetadataInitializer,
// Write stream while convert LF to CRLF
using (StreamReader streamReader = new(sourceStream))
{
- using (StreamWriter streamWriter = new(metadataContext.Create(fileFullName)))
+ using (StreamWriter streamWriter = new(File.Create(Path.Combine(metadataFolderPath, fileFullName))))
{
while (await streamReader.ReadLineAsync(token).ConfigureAwait(false) is string line)
{
@@ -195,7 +194,7 @@ internal partial class MetadataService : IMetadataService, IMetadataInitializer,
return Must.NotNull((T)value!);
}
- using (Stream fileStream = metadataContext.OpenRead($"{fileName}.json"))
+ using (Stream fileStream = File.OpenRead(Path.Combine(metadataFolderPath, $"{fileName}.json")))
{
T? result = await JsonSerializer.DeserializeAsync(fileStream, options, token).ConfigureAwait(false);
return memoryCache.Set(cacheKey, Must.NotNull(result!));
diff --git a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj
index 59494b3b..36a31b6d 100644
--- a/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj
+++ b/src/Snap.Hutao/Snap.Hutao/Snap.Hutao.csproj
@@ -163,11 +163,11 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyCollectionToBoolConverter.cs b/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyCollectionToBoolConverter.cs
index 96e302c0..ce75c022 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyCollectionToBoolConverter.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyCollectionToBoolConverter.cs
@@ -2,7 +2,6 @@
// Licensed under the MIT license.
using CommunityToolkit.WinUI.UI.Converters;
-using Microsoft.UI.Xaml;
namespace Snap.Hutao.View.Converter;
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyCollectionToBoolRevertConverter.cs b/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyCollectionToBoolRevertConverter.cs
index cc94dda9..3a7393bc 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyCollectionToBoolRevertConverter.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyCollectionToBoolRevertConverter.cs
@@ -2,7 +2,6 @@
// Licensed under the MIT license.
using CommunityToolkit.WinUI.UI.Converters;
-using Microsoft.UI.Xaml;
namespace Snap.Hutao.View.Converter;
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyObjectToBoolConverter.cs b/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyObjectToBoolConverter.cs
index 6b1b6ce1..96672edb 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyObjectToBoolConverter.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyObjectToBoolConverter.cs
@@ -2,7 +2,6 @@
// Licensed under the MIT license.
using CommunityToolkit.WinUI.UI.Converters;
-using Microsoft.UI.Xaml;
namespace Snap.Hutao.View.Converter;
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyObjectToBoolRevertConverter.cs b/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyObjectToBoolRevertConverter.cs
index 6c262d44..61bf5dfa 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyObjectToBoolRevertConverter.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Converter/EmptyObjectToBoolRevertConverter.cs
@@ -2,7 +2,6 @@
// Licensed under the MIT license.
using CommunityToolkit.WinUI.UI.Converters;
-using Microsoft.UI.Xaml;
namespace Snap.Hutao.View.Converter;
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Converter/Int32ToVisibilityConverter.cs b/src/Snap.Hutao/Snap.Hutao/View/Converter/Int32ToVisibilityConverter.cs
index da228832..3ea768b6 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Converter/Int32ToVisibilityConverter.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Converter/Int32ToVisibilityConverter.cs
@@ -1,7 +1,6 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
-using CommunityToolkit.WinUI.UI.Converters;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Data;
diff --git a/src/Snap.Hutao/Snap.Hutao/View/Converter/Int32ToVisibilityRevertConverter.cs b/src/Snap.Hutao/Snap.Hutao/View/Converter/Int32ToVisibilityRevertConverter.cs
index bd3ae0be..43bbaa6f 100644
--- a/src/Snap.Hutao/Snap.Hutao/View/Converter/Int32ToVisibilityRevertConverter.cs
+++ b/src/Snap.Hutao/Snap.Hutao/View/Converter/Int32ToVisibilityRevertConverter.cs
@@ -1,7 +1,6 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
-using CommunityToolkit.WinUI.UI.Converters;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Data;
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/ExperimentalFeaturesViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/ExperimentalFeaturesViewModel.cs
index 41315ee0..3cb28db5 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/ExperimentalFeaturesViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/ExperimentalFeaturesViewModel.cs
@@ -5,13 +5,9 @@ using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
-using Snap.Hutao.Context.FileSystem.Location;
using Snap.Hutao.Factory.Abstraction;
using Snap.Hutao.Model.Entity.Database;
using Snap.Hutao.Service.Abstraction;
-using Snap.Hutao.Service.User;
-using Snap.Hutao.Web.Hutao;
-using Snap.Hutao.Web.Hutao.Model.Post;
using Windows.Storage;
using Windows.System;
@@ -23,19 +19,12 @@ namespace Snap.Hutao.ViewModel;
[Injection(InjectAs.Scoped)]
internal class ExperimentalFeaturesViewModel : ObservableObject
{
- private readonly IFileSystemLocation hutaoLocation;
-
///
/// 构造一个新的实验性功能视图模型
///
/// 异步命令工厂
- /// 数据文件夹
- public ExperimentalFeaturesViewModel(
- IAsyncRelayCommandFactory asyncRelayCommandFactory,
- HutaoLocation hutaoLocation)
+ public ExperimentalFeaturesViewModel(IAsyncRelayCommandFactory asyncRelayCommandFactory)
{
- this.hutaoLocation = hutaoLocation;
-
OpenCacheFolderCommand = asyncRelayCommandFactory.Create(OpenCacheFolderAsync);
OpenDataFolderCommand = asyncRelayCommandFactory.Create(OpenDataFolderAsync);
DeleteUsersCommand = asyncRelayCommandFactory.Create(DangerousDeleteUsersAsync);
@@ -69,7 +58,7 @@ internal class ExperimentalFeaturesViewModel : ObservableObject
private Task OpenDataFolderAsync()
{
- return Launcher.LaunchFolderPathAsync(hutaoLocation.GetPath()).AsTask();
+ return Launcher.LaunchFolderPathAsync(Core.CoreEnvironment.DataFolder).AsTask();
}
private async Task DangerousDeleteUsersAsync()
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
index 8a6cd738..90b41752 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/SettingViewModel.cs
@@ -4,7 +4,6 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
-using Microsoft.Extensions.DependencyInjection;
using Snap.Hutao.Core.Database;
using Snap.Hutao.Core.Windowing;
using Snap.Hutao.Factory.Abstraction;
@@ -14,11 +13,7 @@ using Snap.Hutao.Model.Entity.Database;
using Snap.Hutao.Service.GachaLog;
using Snap.Hutao.Service.Game;
using Snap.Hutao.Service.Game.Locator;
-using Snap.Hutao.Service.User;
using Snap.Hutao.View.Dialog;
-using Snap.Hutao.Web.Hoyolab;
-using Snap.Hutao.Web.Hoyolab.Passport;
-using Snap.Hutao.Web.Response;
using System.IO;
namespace Snap.Hutao.ViewModel;
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyssRecordViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyssRecordViewModel.cs
index 6219fd20..2bdc6977 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyssRecordViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/SpiralAbyssRecordViewModel.cs
@@ -2,37 +2,22 @@
// Licensed under the MIT license.
using CommunityToolkit.Mvvm.ComponentModel;
-using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
-using CommunityToolkit.WinUI.UI;
-using Microsoft.Extensions.Primitives;
using Snap.Hutao.Control;
-using Snap.Hutao.Extension;
using Snap.Hutao.Factory.Abstraction;
using Snap.Hutao.Message;
-using Snap.Hutao.Model.Binding.Cultivation;
-using Snap.Hutao.Model.Binding.Hutao;
using Snap.Hutao.Model.Binding.SpiralAbyss;
using Snap.Hutao.Model.Binding.User;
using Snap.Hutao.Model.Entity;
-using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Metadata;
-using Snap.Hutao.Model.Metadata.Weapon;
using Snap.Hutao.Model.Primitive;
using Snap.Hutao.Service.Abstraction;
-using Snap.Hutao.Service.Cultivation;
-using Snap.Hutao.Service.Hutao;
using Snap.Hutao.Service.Metadata;
using Snap.Hutao.Service.SpiralAbyss;
using Snap.Hutao.Service.User;
-using Snap.Hutao.View.Dialog;
using Snap.Hutao.Web.Hutao;
using Snap.Hutao.Web.Hutao.Model.Post;
-using System.Collections.Immutable;
using System.Collections.ObjectModel;
-using CalcAvatarPromotionDelta = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.AvatarPromotionDelta;
-using CalcClient = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.CalculateClient;
-using CalcConsumption = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.Consumption;
namespace Snap.Hutao.ViewModel;
diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs
index d9a70c52..561bae87 100644
--- a/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs
+++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs
@@ -2,33 +2,17 @@
// Licensed under the MIT license.
using CommunityToolkit.Mvvm.ComponentModel;
-using CommunityToolkit.Mvvm.Input;
-using CommunityToolkit.WinUI.UI;
using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Primitives;
using Snap.Hutao.Control;
using Snap.Hutao.Core.IO;
using Snap.Hutao.Core.IO.Bits;
using Snap.Hutao.Extension;
using Snap.Hutao.Factory.Abstraction;
-using Snap.Hutao.Model.Binding.Cultivation;
-using Snap.Hutao.Model.Binding.Hutao;
-using Snap.Hutao.Model.Intrinsic;
-using Snap.Hutao.Model.Metadata.Weapon;
-using Snap.Hutao.Model.Primitive;
-using Snap.Hutao.Service.Abstraction;
-using Snap.Hutao.Service.Cultivation;
-using Snap.Hutao.Service.Hutao;
-using Snap.Hutao.Service.Metadata;
using Snap.Hutao.Service.User;
using Snap.Hutao.View.Dialog;
using Snap.Hutao.Web.Hoyolab;
using Snap.Hutao.Web.Hoyolab.Passport;
using Snap.Hutao.Web.Response;
-using System.Collections.Immutable;
-using CalcAvatarPromotionDelta = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.AvatarPromotionDelta;
-using CalcClient = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.CalculateClient;
-using CalcConsumption = Snap.Hutao.Web.Hoyolab.Takumi.Event.Calculate.Consumption;
namespace Snap.Hutao.ViewModel;
diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs
index 18b8b510..c9836285 100644
--- a/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Web/Bridge/MiHoYoJSInterface.cs
@@ -371,7 +371,7 @@ public class MiHoYoJSInterface
if (result != null && param.Callback != null)
{
- await ExecuteCallbackScriptAsync(param.Callback, result.ToString(options)).ConfigureAwait(false);
+ await ExecuteCallbackScriptAsync(param.Callback, result.ToString()).ConfigureAwait(false);
}
}
diff --git a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/DynamicSecret/DynamicSecretHandler.cs b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/DynamicSecret/DynamicSecretHandler.cs
index d791569f..a6ae0b79 100644
--- a/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/DynamicSecret/DynamicSecretHandler.cs
+++ b/src/Snap.Hutao/Snap.Hutao/Web/Hoyolab/DynamicSecret/DynamicSecretHandler.cs
@@ -3,7 +3,6 @@
using Snap.Hutao.Core.Convert;
using Snap.Hutao.Web.Request;
-using System.Collections.Immutable;
using System.Net.Http;
using System.Text;