From c12777ad53583997dd9e1ee074e8376da827fc84 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 30 Jun 2018 21:00:45 -0400 Subject: move basic mod scanning into the toolkit (#532) --- .../Framework/ModScanning/ModFolder.cs | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs (limited to 'src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs') diff --git a/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs b/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs new file mode 100644 index 00000000..9b6853b4 --- /dev/null +++ b/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using StardewModdingAPI.Toolkit.Serialisation.Models; + +namespace StardewModdingAPI.Toolkit.Framework.ModScanning +{ + /// The info about a mod read from its folder. + public class ModFolder + { + /********* + ** Accessors + *********/ + /// The Mods subfolder containing this mod. + public DirectoryInfo SearchDirectory { get; } + + /// The folder containing manifest.json. + public DirectoryInfo ActualDirectory { get; } + + /// The mod manifest. + public Manifest Manifest { get; } + + /// The error which occurred parsing the manifest, if any. + public string ManifestParseError { get; } + + + /********* + ** Public methods + *********/ + /// Construct an instance when a mod wasn't found in a folder. + /// The directory that was searched. + public ModFolder(DirectoryInfo searchDirectory) + { + this.SearchDirectory = searchDirectory; + } + + /// Construct an instance. + /// The Mods subfolder containing this mod. + /// The folder containing manifest.json. + /// The mod manifest. + /// The error which occurred parsing the manifest, if any. + public ModFolder(DirectoryInfo searchDirectory, DirectoryInfo actualDirectory, Manifest manifest, string manifestParseError = null) + { + this.SearchDirectory = searchDirectory; + this.ActualDirectory = actualDirectory; + this.Manifest = manifest; + this.ManifestParseError = manifestParseError; + } + + /// Get the update keys for a mod. + /// The mod manifest. + public IEnumerable GetUpdateKeys(Manifest manifest) + { + return + (manifest.UpdateKeys ?? new string[0]) + .Where(p => !string.IsNullOrWhiteSpace(p)) + .ToArray(); + } + } +} -- cgit From 34b1dcc1f75651c967257d37a0f29f24335c8110 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Tue, 3 Jul 2018 01:59:45 -0400 Subject: fix missing manifest not marking mod invalid (#532) --- src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs | 7 ------- src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModScanner.cs | 8 ++------ 2 files changed, 2 insertions(+), 13 deletions(-) (limited to 'src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs') diff --git a/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs b/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs index 9b6853b4..4aaa3f83 100644 --- a/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs +++ b/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs @@ -27,13 +27,6 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning /********* ** Public methods *********/ - /// Construct an instance when a mod wasn't found in a folder. - /// The directory that was searched. - public ModFolder(DirectoryInfo searchDirectory) - { - this.SearchDirectory = searchDirectory; - } - /// Construct an instance. /// The Mods subfolder containing this mod. /// The folder containing manifest.json. diff --git a/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModScanner.cs b/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModScanner.cs index d3662c9c..de8d0f02 100644 --- a/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModScanner.cs +++ b/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModScanner.cs @@ -43,7 +43,7 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning // find manifest.json FileInfo manifestFile = this.FindManifest(searchFolder); if (manifestFile == null) - return new ModFolder(searchFolder); + return new ModFolder(searchFolder, null, null, "it doesn't have a manifest."); // read mod info Manifest manifest = null; @@ -53,11 +53,7 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning { manifest = this.JsonHelper.ReadJsonFile(manifestFile.FullName); if (manifest == null) - { - manifestError = File.Exists(manifestFile.FullName) - ? "its manifest is invalid." - : "it doesn't have a manifest."; - } + manifestError = "its manifest is invalid."; } catch (SParseException ex) { -- cgit