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)); } } }