summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI/Framework/ModLoading
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2017-06-12 18:44:36 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2017-06-12 18:44:36 -0400
commita4713ea88238e6a6d62447aef97b35321e63c010 (patch)
tree1842f6836de997b5153611ce20c3cc9092ede2e9 /src/StardewModdingAPI/Framework/ModLoading
parent2a9c8d43df156ba2b6eb32c690eba4a80167a549 (diff)
downloadSMAPI-a4713ea88238e6a6d62447aef97b35321e63c010.tar.gz
SMAPI-a4713ea88238e6a6d62447aef97b35321e63c010.tar.bz2
SMAPI-a4713ea88238e6a6d62447aef97b35321e63c010.zip
add separate list of obsolete mods
Diffstat (limited to 'src/StardewModdingAPI/Framework/ModLoading')
-rw-r--r--src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs
index f5139ce5..e8308f3e 100644
--- a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs
+++ b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs
@@ -17,10 +17,13 @@ namespace StardewModdingAPI.Framework.ModLoading
/// <param name="rootPath">The root path to search for mods.</param>
/// <param name="jsonHelper">The JSON helper with which to read manifests.</param>
/// <param name="compatibilityRecords">Metadata about mods that SMAPI should assume is compatible or broken, regardless of whether it detects incompatible code.</param>
+ /// <param name="disabledMods">Metadata about mods that SMAPI should consider obsolete and not load.</param>
/// <returns>Returns the manifests by relative folder.</returns>
- public IEnumerable<IModMetadata> ReadManifests(string rootPath, JsonHelper jsonHelper, IEnumerable<ModCompatibility> compatibilityRecords)
+ public IEnumerable<IModMetadata> ReadManifests(string rootPath, JsonHelper jsonHelper, IEnumerable<ModCompatibility> compatibilityRecords, IEnumerable<DisabledMod> disabledMods)
{
compatibilityRecords = compatibilityRecords.ToArray();
+ disabledMods = disabledMods.ToArray();
+
foreach (DirectoryInfo modDir in this.GetModFolders(rootPath))
{
// read file
@@ -47,20 +50,29 @@ namespace StardewModdingAPI.Framework.ModLoading
error = $"parsing its manifest failed:\n{ex.GetLogSummary()}";
}
- // get compatibility record
+ // validate metadata
ModCompatibility compatibility = null;
if (manifest != null)
{
+ // get unique key for lookups
string key = !string.IsNullOrWhiteSpace(manifest.UniqueID) ? manifest.UniqueID : manifest.EntryDll;
+
+ // check if mod should be disabled
+ DisabledMod disabledMod = disabledMods.FirstOrDefault(mod => mod.ID.Contains(key, StringComparer.InvariantCultureIgnoreCase));
+ if (disabledMod != null)
+ error = $"it's obsolete: {disabledMod.ReasonPhrase}";
+
+ // get compatibility record
compatibility = (
from mod in compatibilityRecords
where
- mod.ID.Contains(key, StringComparer.InvariantCultureIgnoreCase)
- && (mod.LowerSemanticVersion == null || !manifest.Version.IsOlderThan(mod.LowerSemanticVersion))
- && !manifest.Version.IsNewerThan(mod.UpperSemanticVersion)
+ mod.ID.Contains(key, StringComparer.InvariantCultureIgnoreCase)
+ && (mod.LowerSemanticVersion == null || !manifest.Version.IsOlderThan(mod.LowerSemanticVersion))
+ && !manifest.Version.IsNewerThan(mod.UpperSemanticVersion)
select mod
).FirstOrDefault();
}
+
// build metadata
string displayName = !string.IsNullOrWhiteSpace(manifest?.Name)
? manifest.Name