diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-09-25 21:11:48 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-09-25 21:11:48 -0400 |
commit | 5cb183e16ddc661c38f4bd9e6e740b9457b8c437 (patch) | |
tree | 7c4ed899a45d7960b727b76318b9b36f9e52fbe5 /src/StardewModdingAPI/Framework | |
parent | 4fd3fdc0d8367fdf0c454a1c728113c282df76b7 (diff) | |
download | SMAPI-5cb183e16ddc661c38f4bd9e6e740b9457b8c437.tar.gz SMAPI-5cb183e16ddc661c38f4bd9e6e740b9457b8c437.tar.bz2 SMAPI-5cb183e16ddc661c38f4bd9e6e740b9457b8c437.zip |
consolidate update fields in manifest & SMAPI config (#336, #361)
Diffstat (limited to 'src/StardewModdingAPI/Framework')
4 files changed, 21 insertions, 42 deletions
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 /// <summary>Validate manifest metadata.</summary> /// <param name="mods">The mod manifests to validate.</param> /// <param name="apiVersion">The current SMAPI version.</param> - public void ValidateManifests(IEnumerable<IModMetadata> mods, ISemanticVersion apiVersion) + /// <param name="vendorModUrls">Maps vendor keys (like <c>Nexus</c>) to their mod URL template (where <c>{0}</c> is the mod ID).</param> + public void ValidateManifests(IEnumerable<IModMetadata> mods, ISemanticVersion apiVersion, IDictionary<string, string> vendorModUrls) { mods = mods.ToArray(); @@ -110,12 +107,18 @@ namespace StardewModdingAPI.Framework.ModLoading // get update URLs List<string> updateUrls = new List<string>(); - 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; } - /// <summary>The mod's unique ID in the Chucklefish mod site (if any), used for update checks.</summary> - public string ChucklefishID { get; set; } - - /// <summary>The mod's unique ID in Nexus Mods (if any), used for update checks.</summary> - public string NexusID { get; set; } - - /// <summary>The mod's organisation and project name on GitHub (if any), used for update checks.</summary> - public string GitHubProject { get; set; } + /// <summary>The namespaced mod IDs to query for updates (like <c>Nexus:541</c>).</summary> + public string[] UpdateKeys { get; set; } /// <summary>The unique mod ID.</summary> 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 -{ - /// <summary>Default values for support fields to inject into the manifest.</summary> - internal class ModDataDefaults - { - /********* - ** Accessors - *********/ - /// <summary>The mod's unique ID in the Chucklefish mod site (if any), used for update checks.</summary> - public string ChucklefishID { get; set; } - - /// <summary>The mod's unique ID in Nexus Mods (if any), used for update checks.</summary> - public string NexusID { get; set; } - - /// <summary>The mod's organisation and project name on GitHub (if any), used for update checks.</summary> - 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; } - /// <summary>Default values for support fields to inject into the manifest.</summary> - public ModDataDefaults Defaults { get; set; } + /// <summary>A value to inject into <see cref="IManifest.UpdateKeys"/> field if it's not already set.</summary> + public string[] UpdateKeys { get; set; } /// <summary>The URL where the player can get an unofficial or alternative version of the mod if the official version isn't compatible.</summary> public string AlternativeUrl { get; set; } |