Traveller/scripts/dataPack/entryLoader/DataPackManifestLoader.cs
2024-04-29 21:57:24 +08:00

95 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Threading.Tasks;
using ColdMint.scripts.database;
using ColdMint.scripts.database.dataPackEntity;
using ColdMint.scripts.dataPack.local;
using ColdMint.scripts.serialization;
using Microsoft.EntityFrameworkCore;
namespace ColdMint.scripts.dataPack.entryLoader;
/// <summary>
/// <para>Load the manifest file in the zip package and write it to the data table</para>
/// <para>在zip包内加载清单文件将其写入数据表</para>
/// </summary>
public class DataPackManifestLoader : IEntryLoader
{
public string Namespace => _namespace;
//清单文件的命名空间
private string _namespace;
public bool NeedLoad(ZipArchiveEntry archiveEntry)
{
return archiveEntry.FullName == Config.DataPackManifestName;
}
public async Task ExecutionLoad(string namespaceString, string zipFileName, DataPackDbContext dataPackDbContext,
ZipArchiveEntry archiveEntry)
{
//Do not use namespaceString within the DataPackManifestLoader's ExecutionLoad method, as this value is assigned in the following code.
//不要在DataPackManifestLoader的ExecutionLoad方法内使用namespaceString因为这个值是在下面的代码内赋值的。
var nowDateTime = DateTime.Now;
IDataPackManifest? dataPackManifest = null;
//When the manifest file is obtained, load the file information
//在获取到清单文件时,加载文件信息
await using (var stream = archiveEntry.Open())
{
var localDataPackManifest =
await JsonSerialization.ReadJsonFileToObj<LocalDataPackManifest>(stream);
if (localDataPackManifest == null)
{
dataPackManifest = EmptyManifest.CreateEmptyManifest(zipFileName);
}
else
{
dataPackManifest = localDataPackManifest;
}
}
if (dataPackManifest != null)
{
var dataPackInfoDbSet = dataPackDbContext.DataPackInfo;
var dataPackQuery = from dataPack in dataPackInfoDbSet
where dataPack.ZipFileName == zipFileName
select dataPack;
var oldDataPackInfo = await dataPackQuery.FirstOrDefaultAsync();
if (oldDataPackInfo == null)
{
//There was no list to record before, create one.
//之前没有清单记录,创建一份。
await dataPackDbContext.DataPackInfo.AddAsync(new DataPackInfo
{
ID = dataPackManifest.ID,
Author = dataPackManifest.Author,
Description = dataPackManifest.Description,
Name = dataPackManifest.Name,
Namespace = dataPackManifest.Namespace,
VersionCode = dataPackManifest.VersionCode,
VersionName = dataPackManifest.VersionName,
ZipFileName = zipFileName,
UpdateTime = nowDateTime,
CrateTime = nowDateTime
});
}
else
{
//It's already on the record. Update.
//已经有记录了,更新。
oldDataPackInfo.Name = dataPackManifest.Name;
oldDataPackInfo.Author = dataPackManifest.Author;
oldDataPackInfo.Description = dataPackManifest.Description;
oldDataPackInfo.Namespace = dataPackManifest.Namespace;
oldDataPackInfo.VersionCode = dataPackManifest.VersionCode;
oldDataPackInfo.VersionName = dataPackManifest.VersionName;
oldDataPackInfo.UpdateTime = nowDateTime;
dataPackDbContext.DataPackInfo.Update(oldDataPackInfo);
}
_namespace = dataPackManifest.Namespace ?? string.Empty;
}
}
}