From a89dbce8549abee867d0af65ac62155bb485a911 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sat, 23 Sep 2017 21:48:53 -0400 Subject: unify disabled-mod and compatibility lists (#361) --- .../Framework/ModLoading/ModResolver.cs | 40 +++++++++++----------- .../Framework/Models/DisabledMod.cs | 22 ------------ .../Framework/Models/ModStatus.cs | 9 +++-- src/StardewModdingAPI/Framework/Models/SConfig.cs | 3 -- 4 files changed, 26 insertions(+), 48 deletions(-) delete mode 100644 src/StardewModdingAPI/Framework/Models/DisabledMod.cs (limited to 'src/StardewModdingAPI/Framework') diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs index 6a971c15..02fd85ea 100644 --- a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs +++ b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs @@ -18,12 +18,10 @@ namespace StardewModdingAPI.Framework.ModLoading /// The root path to search for mods. /// The JSON helper with which to read manifests. /// Metadata about mods that SMAPI should assume is compatible or broken, regardless of whether it detects incompatible code. - /// Metadata about mods that SMAPI should consider obsolete and not load. /// Returns the manifests by relative folder. - public IEnumerable ReadManifests(string rootPath, JsonHelper jsonHelper, IEnumerable compatibilityRecords, IEnumerable disabledMods) + public IEnumerable ReadManifests(string rootPath, JsonHelper jsonHelper, IEnumerable compatibilityRecords) { compatibilityRecords = compatibilityRecords.ToArray(); - disabledMods = disabledMods.ToArray(); foreach (DirectoryInfo modDir in this.GetModFolders(rootPath)) { @@ -62,18 +60,13 @@ namespace StardewModdingAPI.Framework.ModLoading // 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.Any(p => p.Matches(key, manifest)) && (mod.LowerVersion == null || !manifest.Version.IsOlderThan(mod.LowerVersion)) - && !manifest.Version.IsNewerThan(mod.UpperVersion) + && (mod.UpperVersion == null || !manifest.Version.IsNewerThan(mod.UpperVersion)) select mod ).FirstOrDefault(); } @@ -107,18 +100,25 @@ namespace StardewModdingAPI.Framework.ModLoading // validate compatibility { ModCompatibility compatibility = mod.Compatibility; - if (compatibility?.Status == ModStatus.AssumeBroken) + switch (compatibility?.Status) { - string reasonPhrase = compatibility.ReasonPhrase ?? "it's no longer compatible"; - string error = $"{reasonPhrase}. Please check for a "; - if (mod.Manifest.Version.Equals(compatibility.UpperVersion) && compatibility.UpperVersionLabel == null) - error += "newer version"; - else - error += $"version newer than {compatibility.UpperVersionLabel ?? compatibility.UpperVersion.ToString()}"; - error += " at " + string.Join(" or ", compatibility.UpdateUrls); - - mod.SetStatus(ModMetadataStatus.Failed, error); - continue; + case ModStatus.Obsolete: + mod.SetStatus(ModMetadataStatus.Failed, $"it's obsolete: {compatibility.ReasonPhrase}"); + continue; + + case ModStatus.AssumeBroken: + { + string reasonPhrase = compatibility.ReasonPhrase ?? "it's no longer compatible"; + string error = $"{reasonPhrase}. Please check for a "; + if (mod.Manifest.Version.Equals(compatibility.UpperVersion) && compatibility.UpperVersionLabel == null) + error += "newer version"; + else + error += $"version newer than {compatibility.UpperVersionLabel ?? compatibility.UpperVersion.ToString()}"; + error += " at " + string.Join(" or ", compatibility.UpdateUrls); + + mod.SetStatus(ModMetadataStatus.Failed, error); + continue; + } } } diff --git a/src/StardewModdingAPI/Framework/Models/DisabledMod.cs b/src/StardewModdingAPI/Framework/Models/DisabledMod.cs deleted file mode 100644 index 170fa760..00000000 --- a/src/StardewModdingAPI/Framework/Models/DisabledMod.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace StardewModdingAPI.Framework.Models -{ - /// Metadata about for a mod that should never be loaded. - internal class DisabledMod - { - /********* - ** Accessors - *********/ - /**** - ** From config - ****/ - /// The unique mod IDs. - public string[] ID { get; set; } - - /// The mod name. - public string Name { get; set; } - - /// The reason phrase to show in the warning, or null to use the default value. - /// "this mod is no longer supported or used" - public string ReasonPhrase { get; set; } - } -} diff --git a/src/StardewModdingAPI/Framework/Models/ModStatus.cs b/src/StardewModdingAPI/Framework/Models/ModStatus.cs index 4ab0b790..343ccb7e 100644 --- a/src/StardewModdingAPI/Framework/Models/ModStatus.cs +++ b/src/StardewModdingAPI/Framework/Models/ModStatus.cs @@ -4,12 +4,15 @@ namespace StardewModdingAPI.Framework.Models internal enum ModStatus { /// Don't override the status. - None = 0, + None, + + /// The mod is obsolete and shouldn't be used, regardless of version. + Obsolete, /// Assume the mod is not compatible, even if SMAPI doesn't detect any incompatible code. - AssumeBroken = 0, + AssumeBroken, /// Assume the mod is compatible, even if SMAPI detects incompatible code. - AssumeCompatible = 1 + AssumeCompatible } } diff --git a/src/StardewModdingAPI/Framework/Models/SConfig.cs b/src/StardewModdingAPI/Framework/Models/SConfig.cs index 36799400..720d4a6d 100644 --- a/src/StardewModdingAPI/Framework/Models/SConfig.cs +++ b/src/StardewModdingAPI/Framework/Models/SConfig.cs @@ -23,8 +23,5 @@ namespace StardewModdingAPI.Framework.Models /// A list of mod versions which should be considered compatible or incompatible regardless of whether SMAPI detects incompatible code. public ModCompatibility[] ModCompatibility { get; set; } - - /// A list of mods which should be considered obsolete and not loaded. - public DisabledMod[] DisabledMods { get; set; } } } -- cgit