using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using StardewModdingAPI.Framework.Serialisation.SmapiConverters;
namespace StardewModdingAPI.Framework.Models
{
/// Metadata about a mod from SMAPI's internal data.
internal class ModDataRecord
{
/*********
** Accessors
*********/
/// The unique mod identifier.
[JsonConverter(typeof(ModDataIdConverter))]
public ModDataID ID { 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; }
/// The compatibility of given mod versions (if any).
[JsonConverter(typeof(ModCompatibilityArrayConverter))]
public ModCompatibility[] Compatibility { get; set; } = new ModCompatibility[0];
/// Map local versions to a semantic version for update checks.
public IDictionary MapLocalVersions { get; set; } = new Dictionary();
/// Map remote versions to a semantic version for update checks.
public IDictionary MapRemoteVersions { get; set; } = new Dictionary();
/*********
** Public methods
*********/
/// Get the compatibility record for a given version, if any.
/// The mod version to check.
public ModCompatibility GetCompatibility(ISemanticVersion version)
{
return this.Compatibility.FirstOrDefault(p => p.MatchesVersion(version));
}
/// Get a semantic local version for update checks.
/// The local version to normalise.
public string GetLocalVersionForUpdateChecks(string version)
{
return this.MapLocalVersions != null && this.MapLocalVersions.TryGetValue(version, out string newVersion)
? newVersion
: version;
}
/// Get a semantic remote version for update checks.
/// The remote version to normalise.
public string GetRemoteVersionForUpdateChecks(string version)
{
return this.MapRemoteVersions != null && this.MapRemoteVersions.TryGetValue(version, out string newVersion)
? newVersion
: version;
}
}
}