make manifest.json filename case-insensitive
This commit is contained in:
parent
95d7ba8935
commit
f93c41f55c
|
@ -5,6 +5,7 @@ using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using StardewModdingAPI.Toolkit.Serialization;
|
using StardewModdingAPI.Toolkit.Serialization;
|
||||||
using StardewModdingAPI.Toolkit.Serialization.Models;
|
using StardewModdingAPI.Toolkit.Serialization.Models;
|
||||||
|
using StardewModdingAPI.Toolkit.Utilities;
|
||||||
|
|
||||||
namespace StardewModdingAPI.Toolkit.Framework.ModScanning
|
namespace StardewModdingAPI.Toolkit.Framework.ModScanning
|
||||||
{
|
{
|
||||||
|
@ -251,8 +252,19 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning
|
||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
// check for manifest in current folder
|
// check for conventional manifest in current folder
|
||||||
FileInfo file = new(Path.Combine(folder.FullName, "manifest.json"));
|
const string defaultName = "manifest.json";
|
||||||
|
FileInfo file = new(Path.Combine(folder.FullName, defaultName));
|
||||||
|
if (file.Exists)
|
||||||
|
return file;
|
||||||
|
|
||||||
|
// check for manifest with incorrect capitalization
|
||||||
|
{
|
||||||
|
CaseInsensitivePathLookup pathLookup = new(folder.FullName, SearchOption.TopDirectoryOnly); // don't use GetCachedFor, since we only need it temporarily
|
||||||
|
string realName = pathLookup.GetFilePath(defaultName);
|
||||||
|
if (realName != defaultName)
|
||||||
|
file = new(Path.Combine(folder.FullName, realName));
|
||||||
|
}
|
||||||
if (file.Exists)
|
if (file.Exists)
|
||||||
return file;
|
return file;
|
||||||
|
|
||||||
|
|
|
@ -25,10 +25,11 @@ namespace StardewModdingAPI.Toolkit.Utilities
|
||||||
*********/
|
*********/
|
||||||
/// <summary>Construct an instance.</summary>
|
/// <summary>Construct an instance.</summary>
|
||||||
/// <param name="rootPath">The root directory path for relative paths.</param>
|
/// <param name="rootPath">The root directory path for relative paths.</param>
|
||||||
public CaseInsensitivePathLookup(string rootPath)
|
/// <param name="searchOption">Which directories to scan from the root.</param>
|
||||||
|
public CaseInsensitivePathLookup(string rootPath, SearchOption searchOption = SearchOption.AllDirectories)
|
||||||
{
|
{
|
||||||
this.RootPath = rootPath;
|
this.RootPath = rootPath;
|
||||||
this.RelativePathCache = new(this.GetRelativePathCache);
|
this.RelativePathCache = new(() => this.GetRelativePathCache(searchOption));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Get the exact capitalization for a given relative file path.</summary>
|
/// <summary>Get the exact capitalization for a given relative file path.</summary>
|
||||||
|
@ -108,11 +109,12 @@ namespace StardewModdingAPI.Toolkit.Utilities
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Get a case-insensitive lookup of file paths (see <see cref="RelativePathCache"/>).</summary>
|
/// <summary>Get a case-insensitive lookup of file paths (see <see cref="RelativePathCache"/>).</summary>
|
||||||
private Dictionary<string, string> GetRelativePathCache()
|
/// <param name="searchOption">Which directories to scan from the root.</param>
|
||||||
|
private Dictionary<string, string> GetRelativePathCache(SearchOption searchOption)
|
||||||
{
|
{
|
||||||
Dictionary<string, string> cache = new(StringComparer.OrdinalIgnoreCase);
|
Dictionary<string, string> cache = new(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
foreach (string path in Directory.EnumerateFiles(this.RootPath, "*", SearchOption.AllDirectories))
|
foreach (string path in Directory.EnumerateFiles(this.RootPath, "*", searchOption))
|
||||||
{
|
{
|
||||||
string relativePath = path.Substring(this.RootPath.Length + 1);
|
string relativePath = path.Substring(this.RootPath.Length + 1);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue