From 5cb183e16ddc661c38f4bd9e6e740b9457b8c437 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 25 Sep 2017 21:11:48 -0400 Subject: consolidate update fields in manifest & SMAPI config (#336, #361) --- .../Framework/ModLoading/ModResolver.cs | 31 ++++++++++++---------- src/StardewModdingAPI/Framework/Models/Manifest.cs | 10 ++----- .../Framework/Models/ModDataDefaults.cs | 18 ------------- .../Framework/Models/ModDataRecord.cs | 4 +-- 4 files changed, 21 insertions(+), 42 deletions(-) delete mode 100644 src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs (limited to 'src/StardewModdingAPI/Framework') diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs index 4d20e7c8..d0ef1b08 100644 --- a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs +++ b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs @@ -61,13 +61,9 @@ namespace StardewModdingAPI.Framework.ModLoading dataRecord = dataRecords.FirstOrDefault(record => record.ID.Matches(key, manifest)); } - // apply defaults - if (dataRecord?.Defaults != null) - { - manifest.ChucklefishID = manifest.ChucklefishID ?? dataRecord.Defaults.ChucklefishID; - manifest.GitHubProject = manifest.GitHubProject ?? dataRecord.Defaults.GitHubProject; - manifest.NexusID = manifest.NexusID ?? dataRecord.Defaults.NexusID; - } + // add default update keys + if (manifest != null && manifest.UpdateKeys == null && dataRecord?.UpdateKeys != null) + manifest.UpdateKeys = dataRecord.UpdateKeys; // build metadata string displayName = !string.IsNullOrWhiteSpace(manifest?.Name) @@ -84,7 +80,8 @@ namespace StardewModdingAPI.Framework.ModLoading /// Validate manifest metadata. /// The mod manifests to validate. /// The current SMAPI version. - public void ValidateManifests(IEnumerable mods, ISemanticVersion apiVersion) + /// Maps vendor keys (like Nexus) to their mod URL template (where {0} is the mod ID). + public void ValidateManifests(IEnumerable mods, ISemanticVersion apiVersion, IDictionary vendorModUrls) { mods = mods.ToArray(); @@ -110,12 +107,18 @@ namespace StardewModdingAPI.Framework.ModLoading // get update URLs List updateUrls = new List(); - if (!string.IsNullOrWhiteSpace(mod.Manifest.ChucklefishID)) - updateUrls.Add($"https://community.playstarbound.com/resources/{mod.Manifest.ChucklefishID}"); - if (!string.IsNullOrWhiteSpace(mod.Manifest.NexusID)) - updateUrls.Add($"http://nexusmods.com/stardewvalley/mods/{mod.Manifest.NexusID}"); - if (!string.IsNullOrWhiteSpace(mod.Manifest.GitHubProject)) - updateUrls.Add($"https://github.com/{mod.Manifest.GitHubProject}/releases"); + foreach (string key in mod.Manifest.UpdateKeys ?? new string[0]) + { + string[] parts = key.Split(new[] { ':' }, 2); + if (parts.Length != 2) + continue; + + string vendorKey = parts[0].Trim(); + string modID = parts[1].Trim(); + + if (vendorModUrls.TryGetValue(vendorKey, out string urlTemplate)) + updateUrls.Add(string.Format(urlTemplate, modID)); + } if (mod.DataRecord.AlternativeUrl != null) updateUrls.Add(mod.DataRecord.AlternativeUrl); diff --git a/src/StardewModdingAPI/Framework/Models/Manifest.cs b/src/StardewModdingAPI/Framework/Models/Manifest.cs index c891644f..a051354c 100644 --- a/src/StardewModdingAPI/Framework/Models/Manifest.cs +++ b/src/StardewModdingAPI/Framework/Models/Manifest.cs @@ -34,14 +34,8 @@ namespace StardewModdingAPI.Framework.Models [JsonConverter(typeof(SFieldConverter))] public IManifestDependency[] Dependencies { get; set; } - /// The mod's unique ID in the Chucklefish mod site (if any), used for update checks. - public string ChucklefishID { get; set; } - - /// The mod's unique ID in Nexus Mods (if any), used for update checks. - public string NexusID { get; set; } - - /// The mod's organisation and project name on GitHub (if any), used for update checks. - public string GitHubProject { get; set; } + /// The namespaced mod IDs to query for updates (like Nexus:541). + public string[] UpdateKeys { get; set; } /// The unique mod ID. public string UniqueID { get; set; } diff --git a/src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs b/src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs deleted file mode 100644 index e0ab94b8..00000000 --- a/src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace StardewModdingAPI.Framework.Models -{ - /// Default values for support fields to inject into the manifest. - internal class ModDataDefaults - { - /********* - ** Accessors - *********/ - /// The mod's unique ID in the Chucklefish mod site (if any), used for update checks. - public string ChucklefishID { get; set; } - - /// The mod's unique ID in Nexus Mods (if any), used for update checks. - public string NexusID { get; set; } - - /// The mod's organisation and project name on GitHub (if any), used for update checks. - public string GitHubProject { get; set; } - } -} diff --git a/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs b/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs index 0d033e82..c6a12188 100644 --- a/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs +++ b/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs @@ -15,8 +15,8 @@ namespace StardewModdingAPI.Framework.Models [JsonConverter(typeof(SFieldConverter))] public ModDataID ID { get; set; } - /// Default values for support fields to inject into the manifest. - public ModDataDefaults Defaults { get; set; } + /// A value to inject into field if it's not already set. + public string[] UpdateKeys { get; set; } /// The URL where the player can get an unofficial or alternative version of the mod if the official version isn't compatible. public string AlternativeUrl { get; set; } -- cgit