using System.IO;
using StardewModdingAPI.AssemblyRewriters;
namespace StardewModdingAPI.Framework.AssemblyRewriting
{
/// Represents cached metadata for a rewritten assembly.
internal class CacheEntry
{
/*********
** Accessors
*********/
/// The MD5 hash for the original assembly.
public readonly string Hash;
/// The SMAPI version used to rewrite the assembly.
public readonly string ApiVersion;
/// The target platform.
public readonly Platform Platform;
/// The value for the machine used to rewrite the assembly.
public readonly string MachineName;
/// Whether to use the cached assembly instead of the original assembly.
public readonly bool UseCachedAssembly;
/*********
** Public methods
*********/
/// Construct an instance.
/// The MD5 hash for the original assembly.
/// The SMAPI version used to rewrite the assembly.
/// The target platform.
/// The value for the machine used to rewrite the assembly.
/// Whether to use the cached assembly instead of the original assembly.
public CacheEntry(string hash, string apiVersion, Platform platform, string machineName, bool useCachedAssembly)
{
this.Hash = hash;
this.ApiVersion = apiVersion;
this.Platform = platform;
this.MachineName = machineName;
this.UseCachedAssembly = useCachedAssembly;
}
/// Get whether the cache entry is up-to-date for the given assembly hash.
/// The paths for the cached assembly.
/// The MD5 hash of the original assembly.
/// The current SMAPI version.
/// The target platform.
/// The value for the machine reading the assembly.
public bool IsUpToDate(CachePaths paths, string hash, ISemanticVersion currentVersion, Platform platform, string machineName)
{
return hash == this.Hash
&& this.ApiVersion == currentVersion.ToString()
&& this.Platform == platform
&& this.MachineName == machineName
&& (!this.UseCachedAssembly || File.Exists(paths.Assembly));
}
}
}