wasStitchNET – Rev
?pathlinks?
///////////////////////////////////////////////////////////////////////////
// Copyright (C) Wizardry and Steamworks 2017 - License: GNU GPLv3 //
// Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
// rights of fair usage, the disclaimer and warranty conditions. //
///////////////////////////////////////////////////////////////////////////
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using wasDAVClient;
using wasSharpNET.Cryptography;
using SHA1 = System.Security.Cryptography.SHA1;
namespace wasStitchNET
{
public class Hashing
{
public static async Task<string> HashLocalFiles(string path)
{
using (var memoryStream = new MemoryStream())
{
foreach (var file in Directory
.GetFiles(path, "*.*", SearchOption.AllDirectories)
.OrderBy(o => o.Split(Path.DirectorySeparatorChar).Last()))
{
using (var fileStream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
await fileStream.CopyToAsync(memoryStream);
}
}
memoryStream.Position = 0L;
return SHA1.Create().ToHex(memoryStream);
}
}
public static async Task<string> HashRemoteFiles(Client client, string path)
{
using (var memoryStream = new MemoryStream())
{
foreach (var item in (await client.List(path, Constants.DavDepth.ALL)).OrderBy(o => o.DisplayName).Where(item => !item.IsCollection))
{
using (var stream = client.Download(item.Href).Result)
{
await stream.CopyToAsync(memoryStream);
}
}
memoryStream.Position = 0L;
return SHA1.Create().ToHex(memoryStream);
}
}
}
}