diff options
author | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2023-04-30 13:41:43 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2023-04-30 13:41:43 -0400 |
commit | c68e922853560dd192edf63004ea4f8f8faf6fba (patch) | |
tree | 9657cdc9555945689f61f562939152e5674a1084 | |
parent | cdd62515ea1710c762dc787fae188e7d41890f7e (diff) | |
download | SMAPI-c68e922853560dd192edf63004ea4f8f8faf6fba.tar.gz SMAPI-c68e922853560dd192edf63004ea4f8f8faf6fba.tar.bz2 SMAPI-c68e922853560dd192edf63004ea4f8f8faf6fba.zip |
fix ModFolder not being JSON-serializable
-rw-r--r-- | docs/release-notes.md | 3 | ||||
-rw-r--r-- | src/SMAPI.Toolkit/Framework/ModScanning/ModFolder.cs | 35 |
2 files changed, 36 insertions, 2 deletions
diff --git a/docs/release-notes.md b/docs/release-notes.md index 8e8e1981..3fbfd990 100644 --- a/docs/release-notes.md +++ b/docs/release-notes.md @@ -16,6 +16,9 @@ * For mod authors: * Added support for [custom update manifests](https://stardewvalleywiki.com/Modding:Modder_Guide/APIs/Update_checks#Custom_update_manifest) (thanks to Jamie Taylor!). +* For SMAPI toolkit users: + * Fixed `ModFolder` not being JSON-serializable. + ## 3.18.3 Released 09 April 2023 for Stardew Valley 1.5.6 or later. diff --git a/src/SMAPI.Toolkit/Framework/ModScanning/ModFolder.cs b/src/SMAPI.Toolkit/Framework/ModScanning/ModFolder.cs index da2a3c85..106e3622 100644 --- a/src/SMAPI.Toolkit/Framework/ModScanning/ModFolder.cs +++ b/src/SMAPI.Toolkit/Framework/ModScanning/ModFolder.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using Newtonsoft.Json; using StardewModdingAPI.Toolkit.Serialization.Models; using StardewModdingAPI.Toolkit.Utilities; @@ -10,13 +11,24 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning public class ModFolder { /********* + ** Fields + *********/ + /// <summary>The backing field for <see cref="Directory"/>.</summary> + private DirectoryInfo? DirectoryImpl; + + + /********* ** Accessors *********/ /// <summary>A suggested display name for the mod folder.</summary> public string DisplayName { get; } + /// <summary>The folder path containing the mod's manifest.json.</summary> + public string DirectoryPath { get; } + /// <summary>The folder containing the mod's manifest.json.</summary> - public DirectoryInfo Directory { get; } + [JsonIgnore] + public DirectoryInfo Directory => this.DirectoryImpl ??= new DirectoryInfo(this.DirectoryPath); /// <summary>The mod type.</summary> public ModType Type { get; } @@ -52,7 +64,8 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning public ModFolder(DirectoryInfo root, DirectoryInfo directory, ModType type, Manifest? manifest, ModParseError manifestParseError, string? manifestParseErrorText) { // save info - this.Directory = directory; + this.DirectoryImpl = directory; + this.DirectoryPath = directory.FullName; this.Type = type; this.Manifest = manifest; this.ManifestParseError = manifestParseError; @@ -64,6 +77,24 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning : PathUtilities.GetRelativePath(root.FullName, directory.FullName); } + /// <summary>Construct an instance.</summary> + /// <param name="displayName">A suggested display name for the mod folder.</param> + /// <param name="directoryPath">The folder path containing the mod's manifest.json.</param> + /// <param name="type">The mod type.</param> + /// <param name="manifest">The mod manifest.</param> + /// <param name="manifestParseError">The error which occurred parsing the manifest, if any.</param> + /// <param name="manifestParseErrorText">A human-readable message for the <paramref name="manifestParseError"/>, if any.</param> + [JsonConstructor] + public ModFolder(string displayName, string directoryPath, ModType type, Manifest? manifest, ModParseError manifestParseError, string? manifestParseErrorText) + { + this.DisplayName = displayName; + this.DirectoryPath = directoryPath; + this.Type = type; + this.Manifest = manifest; + this.ManifestParseError = manifestParseError; + this.ManifestParseErrorText = manifestParseErrorText; + } + /// <summary>Get the update keys for a mod.</summary> /// <param name="manifest">The mod manifest.</param> public IEnumerable<string> GetUpdateKeys(Manifest manifest) |