summaryrefslogtreecommitdiff
path: root/src/SMAPI.Toolkit/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'src/SMAPI.Toolkit/Framework')
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs2
-rw-r--r--src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs2
-rw-r--r--src/SMAPI.Toolkit/Framework/ModData/ModDataModel.cs2
-rw-r--r--src/SMAPI.Toolkit/Framework/ModData/ModDataRecord.cs4
-rw-r--r--src/SMAPI.Toolkit/Framework/ModScanning/ModScanner.cs51
5 files changed, 46 insertions, 15 deletions
diff --git a/src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs b/src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs
index 34e2e1b8..89a22eaf 100644
--- a/src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs
+++ b/src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs
@@ -233,7 +233,7 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.Wiki
// parse
// Specified on the wiki in the form "remote version → mapped version; another remote version → mapped version"
- IDictionary<string, string> map = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
+ IDictionary<string, string> map = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
foreach (string pair in raw.Split(';'))
{
string[] versions = pair.Split('→');
diff --git a/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs b/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs
index 4eec3424..450d600a 100644
--- a/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs
+++ b/src/SMAPI.Toolkit/Framework/GameScanning/GameScanner.cs
@@ -30,7 +30,7 @@ namespace StardewModdingAPI.Toolkit.Framework.GameScanning
.GetCustomInstallPaths(platform)
.Concat(this.GetDefaultInstallPaths(platform))
.Select(PathUtilities.NormalizePathSeparators)
- .Distinct(StringComparer.InvariantCultureIgnoreCase);
+ .Distinct(StringComparer.OrdinalIgnoreCase);
// yield valid folders
foreach (string path in paths)
diff --git a/src/SMAPI.Toolkit/Framework/ModData/ModDataModel.cs b/src/SMAPI.Toolkit/Framework/ModData/ModDataModel.cs
index 8b40c301..2167d3e5 100644
--- a/src/SMAPI.Toolkit/Framework/ModData/ModDataModel.cs
+++ b/src/SMAPI.Toolkit/Framework/ModData/ModDataModel.cs
@@ -68,7 +68,7 @@ namespace StardewModdingAPI.Toolkit.Framework.ModData
foreach (string part in parts.Take(parts.Length - 1))
{
// 'default'
- if (part.Equals("Default", StringComparison.InvariantCultureIgnoreCase))
+ if (part.Equals("Default", StringComparison.OrdinalIgnoreCase))
{
isDefault = true;
continue;
diff --git a/src/SMAPI.Toolkit/Framework/ModData/ModDataRecord.cs b/src/SMAPI.Toolkit/Framework/ModData/ModDataRecord.cs
index c892d820..3201c421 100644
--- a/src/SMAPI.Toolkit/Framework/ModData/ModDataRecord.cs
+++ b/src/SMAPI.Toolkit/Framework/ModData/ModDataRecord.cs
@@ -46,13 +46,13 @@ namespace StardewModdingAPI.Toolkit.Framework.ModData
public bool HasID(string id)
{
// try main ID
- if (this.ID.Equals(id, StringComparison.InvariantCultureIgnoreCase))
+ if (this.ID.Equals(id, StringComparison.OrdinalIgnoreCase))
return true;
// try former IDs
foreach (string formerID in this.FormerIDs)
{
- if (formerID.Equals(id, StringComparison.InvariantCultureIgnoreCase))
+ if (formerID.Equals(id, StringComparison.OrdinalIgnoreCase))
return true;
}
diff --git a/src/SMAPI.Toolkit/Framework/ModScanning/ModScanner.cs b/src/SMAPI.Toolkit/Framework/ModScanning/ModScanner.cs
index f4857c7d..6d6b6417 100644
--- a/src/SMAPI.Toolkit/Framework/ModScanning/ModScanner.cs
+++ b/src/SMAPI.Toolkit/Framework/ModScanning/ModScanner.cs
@@ -18,22 +18,48 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning
private readonly JsonHelper JsonHelper;
/// <summary>A list of filesystem entry names to ignore when checking whether a folder should be treated as a mod.</summary>
- private readonly HashSet<Regex> IgnoreFilesystemEntries = new HashSet<Regex>
+ private readonly HashSet<Regex> IgnoreFilesystemNames = new HashSet<Regex>
{
- // OS metadata files
new Regex(@"^__folder_managed_by_vortex$", RegexOptions.Compiled | RegexOptions.IgnoreCase), // Vortex mod manager
new Regex(@"(?:^\._|^\.DS_Store$|^__MACOSX$|^mcs$)", RegexOptions.Compiled | RegexOptions.IgnoreCase), // MacOS
- new Regex(@"^(?:desktop\.ini|Thumbs\.db)$", RegexOptions.Compiled | RegexOptions.IgnoreCase), // Windows
- new Regex(@"\.(?:url|lnk)$", RegexOptions.Compiled | RegexOptions.IgnoreCase), // Windows shortcut files
+ new Regex(@"^(?:desktop\.ini|Thumbs\.db)$", RegexOptions.Compiled | RegexOptions.IgnoreCase) // Windows
+ };
- // other
- new Regex(@"\.(?:bmp|gif|jpeg|jpg|png|psd|tif)$", RegexOptions.Compiled | RegexOptions.IgnoreCase), // image files
- new Regex(@"\.(?:md|rtf|txt)$", RegexOptions.Compiled | RegexOptions.IgnoreCase), // text files
- new Regex(@"\.(?:backup|bak|old)$", RegexOptions.Compiled | RegexOptions.IgnoreCase) // backup file
+ /// <summary>A list of file extensions to ignore when searching for mod files.</summary>
+ private readonly HashSet<string> IgnoreFileExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
+ {
+ // text
+ ".doc",
+ ".docx",
+ ".md",
+ ".rtf",
+ ".txt",
+
+ // images
+ ".bmp",
+ ".gif",
+ ".jpeg",
+ ".jpg",
+ ".png",
+ ".psd",
+ ".tif",
+
+ // archives
+ ".rar",
+ ".zip",
+
+ // backup files
+ ".backup",
+ ".bak",
+ ".old",
+
+ // Windows shortcut files
+ ".url",
+ ".lnk"
};
/// <summary>The extensions for files which an XNB mod may contain. If a mod doesn't have a <c>manifest.json</c> and contains *only* these file extensions, it should be considered an XNB mod.</summary>
- private readonly HashSet<string> PotentialXnbModExtensions = new HashSet<string>(StringComparer.InvariantCultureIgnoreCase)
+ private readonly HashSet<string> PotentialXnbModExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
// XNB files
".xgs",
@@ -258,7 +284,12 @@ namespace StardewModdingAPI.Toolkit.Framework.ModScanning
/// <param name="entry">The file or folder.</param>
private bool IsRelevant(FileSystemInfo entry)
{
- return !this.IgnoreFilesystemEntries.Any(p => p.IsMatch(entry.Name));
+ // ignored file extension
+ if (entry is FileInfo file && this.IgnoreFileExtensions.Contains(file.Extension))
+ return false;
+
+ // ignored entry name
+ return !this.IgnoreFilesystemNames.Any(p => p.IsMatch(entry.Name));
}
/// <summary>Get whether a file is potentially part of an XNB mod.</summary>