diff --git a/OpenRa.DataStructures/AssetInfo.cs b/OpenRa.DataStructures/AssetInfo.cs new file mode 100644 index 0000000000..caa072e462 --- /dev/null +++ b/OpenRa.DataStructures/AssetInfo.cs @@ -0,0 +1,33 @@ +using System.IO; +using System.Linq; +using System.Security.Cryptography; + +namespace OpenRa +{ + class AssetInfo + { + public readonly string Filename; + public readonly string Hash; + + public AssetInfo(string filename, string hash) + { + Filename = filename; + Hash = hash; + } + + static string GetHash(string filename) + { + using (var csp = SHA1.Create()) + return new string(csp.ComputeHash(File.ReadAllBytes(filename)) + .SelectMany(a => a.ToString("x2")).ToArray()); + } + + public static AssetInfo FromLocalFile(string filename) + { + return new AssetInfo(filename, GetHash(filename)); + } + + /* todo: perf: cache this */ + public bool IsPresent() { return File.Exists(Filename) && (Hash == GetHash(Filename)); } + } +} diff --git a/OpenRa.DataStructures/OpenRa.DataStructures.csproj b/OpenRa.DataStructures/OpenRa.DataStructures.csproj index 1fd76608f7..f794fd193f 100644 --- a/OpenRa.DataStructures/OpenRa.DataStructures.csproj +++ b/OpenRa.DataStructures/OpenRa.DataStructures.csproj @@ -14,6 +14,7 @@ 2.0 + v3.5 true @@ -33,11 +34,15 @@ + + 3.5 + +