summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI.Toolkit
diff options
context:
space:
mode:
Diffstat (limited to 'src/StardewModdingAPI.Toolkit')
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs13
-rw-r--r--src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModScanner.cs11
2 files changed, 18 insertions, 6 deletions
diff --git a/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs b/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs
index 83c9c44d..d2fea9e2 100644
--- a/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs
+++ b/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModFolder.cs
@@ -2,6 +2,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using StardewModdingAPI.Toolkit.Serialisation.Models;
+using StardewModdingAPI.Toolkit.Utilities;
namespace StardewModdingAPI.Toolkit.Framework.ModScanning
{
@@ -11,6 +12,9 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning
/*********
** Accessors
*********/
+ /// <summary>A suggested display name for the mod folder.</summary>
+ public string DisplayName { get; }
+
/// <summary>The folder containing the mod's manifest.json.</summary>
public DirectoryInfo Directory { get; }
@@ -25,14 +29,21 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning
** Public methods
*********/
/// <summary>Construct an instance.</summary>
+ /// <param name="root">The root folder containing mods.</param>
/// <param name="directory">The folder containing the mod's manifest.json.</param>
/// <param name="manifest">The mod manifest.</param>
/// <param name="manifestParseError">The error which occurred parsing the manifest, if any.</param>
- public ModFolder(DirectoryInfo directory, Manifest manifest, string manifestParseError = null)
+ public ModFolder(DirectoryInfo root, DirectoryInfo directory, Manifest manifest, string manifestParseError = null)
{
+ // save info
this.Directory = directory;
this.Manifest = manifest;
this.ManifestParseError = manifestParseError;
+
+ // set display name
+ this.DisplayName = manifest?.Name;
+ if (string.IsNullOrWhiteSpace(this.DisplayName))
+ this.DisplayName = PathUtilities.GetRelativePath(root.FullName, directory.FullName);
}
/// <summary>Get the update keys for a mod.</summary>
diff --git a/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModScanner.cs b/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModScanner.cs
index 063ec2f4..71dc0cb3 100644
--- a/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModScanner.cs
+++ b/src/StardewModdingAPI.Toolkit/Framework/ModScanning/ModScanner.cs
@@ -44,8 +44,9 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning
}
/// <summary>Extract information from a mod folder.</summary>
+ /// <param name="root">The root folder containing mods.</param>
/// <param name="searchFolder">The folder to search for a mod.</param>
- public ModFolder ReadFolder(DirectoryInfo searchFolder)
+ public ModFolder ReadFolder(DirectoryInfo root, DirectoryInfo searchFolder)
{
// find manifest.json
FileInfo manifestFile = this.FindManifest(searchFolder);
@@ -53,8 +54,8 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning
{
bool isEmpty = !searchFolder.GetFileSystemInfos().Where(this.IsRelevant).Any();
if (isEmpty)
- return new ModFolder(searchFolder, null, "it's an empty folder.");
- return new ModFolder(searchFolder, null, "it contains files, but none of them are manifest.json.");
+ return new ModFolder(root, searchFolder, null, "it's an empty folder.");
+ return new ModFolder(root, searchFolder, null, "it contains files, but none of them are manifest.json.");
}
// read mod info
@@ -76,7 +77,7 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning
}
}
- return new ModFolder(manifestFile.Directory, manifest, manifestError);
+ return new ModFolder(root, manifestFile.Directory, manifest, manifestError);
}
@@ -100,7 +101,7 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning
// treat as mod folder
else
- yield return this.ReadFolder(folder);
+ yield return this.ReadFolder(root, folder);
}
/// <summary>Find the manifest for a mod folder.</summary>