From 0728070a845fb7553b532625dea4b3d062b06812 Mon Sep 17 00:00:00 2001 From: Chien Zhang Date: Thu, 15 Jun 2023 21:44:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Emmc-pack=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelogs/v0.4.md | 1 + .../Importers/ImporterBase.cs | 1 + src/Polymerium.App/App.xaml.cs | 1 + src/Polymerium.App/Services/ImportService.cs | 1 + .../Importers/CurseForgeImporter.cs | 1 + .../Importers/ModrinthImporter.cs | 1 + .../Importers/PrismImporter.cs | 53 +++++++++++++++++++ .../Models/Prism/PrismModpackComponent.cs | 15 ++++++ .../Models/Prism/PrismModpackIndex.cs | 14 +++++ src/Polymerium.Core/Polymerium.Core.csproj | 24 ++++----- 10 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 src/Polymerium.Core/Importers/PrismImporter.cs create mode 100644 src/Polymerium.Core/Models/Prism/PrismModpackComponent.cs create mode 100644 src/Polymerium.Core/Models/Prism/PrismModpackIndex.cs diff --git a/changelogs/v0.4.md b/changelogs/v0.4.md index c635bf7f..0f845af7 100644 --- a/changelogs/v0.4.md +++ b/changelogs/v0.4.md @@ -4,6 +4,7 @@ - **优化**增加主窗体初始尺寸 - **新增**更新整合包到指定版本(#20) +- **新增**支持Prism(mmc-pack)整合包导入 ## v0.4.4 diff --git a/src/Polymerium.Abstractions/Importers/ImporterBase.cs b/src/Polymerium.Abstractions/Importers/ImporterBase.cs index 8a845e14..cacd0b49 100644 --- a/src/Polymerium.Abstractions/Importers/ImporterBase.cs +++ b/src/Polymerium.Abstractions/Importers/ImporterBase.cs @@ -12,6 +12,7 @@ public abstract class ImporterBase public CancellationToken Token { get; set; } public abstract Task> ExtractMetadataAsync( + string fileName, string indexContent, IEnumerable rawFileList, Uri? source, diff --git a/src/Polymerium.App/App.xaml.cs b/src/Polymerium.App/App.xaml.cs index 2a217773..06478f6f 100644 --- a/src/Polymerium.App/App.xaml.cs +++ b/src/Polymerium.App/App.xaml.cs @@ -114,6 +114,7 @@ private IServiceProvider ConfigureServices() configure .Register("manifest.json") .Register("modrinth.index.json") + .Register("mmc-pack.json") ) .AddSingleton(); // global services diff --git a/src/Polymerium.App/Services/ImportService.cs b/src/Polymerium.App/Services/ImportService.cs index 7a3a2003..55afd192 100644 --- a/src/Polymerium.App/Services/ImportService.cs +++ b/src/Polymerium.App/Services/ImportService.cs @@ -73,6 +73,7 @@ public async Task> ExtractMetadataFromFile using var reader = new StreamReader(indexFileStream); var indexFileContent = await reader.ReadToEndAsync(); var result = await importer.ExtractMetadataAsync( + filePath, indexFileContent, rawFileList, reference, diff --git a/src/Polymerium.Core/Importers/CurseForgeImporter.cs b/src/Polymerium.Core/Importers/CurseForgeImporter.cs index fe257517..442eb349 100644 --- a/src/Polymerium.Core/Importers/CurseForgeImporter.cs +++ b/src/Polymerium.Core/Importers/CurseForgeImporter.cs @@ -31,6 +31,7 @@ public CurseForgeImporter(IMemoryCache cache, ResolveEngine resolver) } public override async Task> ExtractMetadataAsync( + string fileName, string indexContent, IEnumerable rawFileList, Uri? source, diff --git a/src/Polymerium.Core/Importers/ModrinthImporter.cs b/src/Polymerium.Core/Importers/ModrinthImporter.cs index 25822de5..f6daef49 100644 --- a/src/Polymerium.Core/Importers/ModrinthImporter.cs +++ b/src/Polymerium.Core/Importers/ModrinthImporter.cs @@ -33,6 +33,7 @@ public ModrinthImporter(IMemoryCache cache, ResolveEngine resolver) } public override async Task> ExtractMetadataAsync( + string fileName, string indexContent, IEnumerable rawFileList, Uri? source, diff --git a/src/Polymerium.Core/Importers/PrismImporter.cs b/src/Polymerium.Core/Importers/PrismImporter.cs new file mode 100644 index 00000000..225dea5c --- /dev/null +++ b/src/Polymerium.Core/Importers/PrismImporter.cs @@ -0,0 +1,53 @@ +using DotNext; +using Newtonsoft.Json; +using Polymerium.Abstractions.Importers; +using Polymerium.Abstractions.Meta; +using Polymerium.Core.Models.Prism; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Polymerium.Core.Importers +{ + public class PrismImporter : ImporterBase + { + public override Task> ExtractMetadataAsync(string fileName, string indexContent, IEnumerable rawFileList, Uri? source, bool forceOffline) + { + var model = JsonConvert.DeserializeObject(indexContent); + var metadata = new GameMetadata(); + foreach (var component in model.Components) + { + metadata.Components.Add(new Component() + { + Identity = component.Uid, + Version = component.Version + }); + } + var list = new List(); + foreach (var raw in rawFileList.Where(x => x.StartsWith("minecraft"))) + { + var packed = new PackedSolidFile() + { + FileName = raw, + Path = Path.GetRelativePath("minecraft", raw) + }; + list.Add(packed); + } + foreach (var raw in rawFileList.Where(x => x.StartsWith(".minecraft"))) + { + var packed = new PackedSolidFile() + { + FileName = raw, + Path = Path.GetRelativePath(".minecraft", raw) + }; + list.Add(packed); + } + var name = Path.GetFileNameWithoutExtension(fileName); + var version = Path.GetFileName(fileName); + return Task.FromResult(Finished(name, version, string.Empty, null, null, metadata, list)); + } + } +} diff --git a/src/Polymerium.Core/Models/Prism/PrismModpackComponent.cs b/src/Polymerium.Core/Models/Prism/PrismModpackComponent.cs new file mode 100644 index 00000000..29a31626 --- /dev/null +++ b/src/Polymerium.Core/Models/Prism/PrismModpackComponent.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Polymerium.Core.Models.Prism +{ + public struct PrismModpackComponent + { + public bool? Important { get; set; } + public string Uid { get; set; } + public string Version { get; set; } + } +} diff --git a/src/Polymerium.Core/Models/Prism/PrismModpackIndex.cs b/src/Polymerium.Core/Models/Prism/PrismModpackIndex.cs new file mode 100644 index 00000000..7d0b4576 --- /dev/null +++ b/src/Polymerium.Core/Models/Prism/PrismModpackIndex.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Polymerium.Core.Models.Prism +{ + public struct PrismModpackIndex + { + public IEnumerable Components { get; set; } + public uint FormatVersion { get; set; } + } +} diff --git a/src/Polymerium.Core/Polymerium.Core.csproj b/src/Polymerium.Core/Polymerium.Core.csproj index a393ccec..deab5477 100644 --- a/src/Polymerium.Core/Polymerium.Core.csproj +++ b/src/Polymerium.Core/Polymerium.Core.csproj @@ -13,21 +13,21 @@ - - - - - - - - + + + + + + + + - - - - + + + +