wasStitchNET – Rev 1

Subversion Repositories:
Rev:
///////////////////////////////////////////////////////////////////////////
//  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);
            }
        }
    }
}