internal async Task GenerateChecksumsAsync(CancellationTokenSource tokenSource)
        {
            try
            {
                Log($"{nameof(TreeChecksumViewModel)}.{nameof(GenerateChecksumsAsync)}: Start");

                IHashAlgorithim algorithim = HashAlgorithimFactory.Get(SelectedAlgorithim);
                Hasher          hasher     = new Hasher(algorithim);

                m_CancellationTokenSource = tokenSource;
                CancellationToken token = tokenSource.Token;
                token.ThrowIfCancellationRequested();

                m_GenerationInProgress = true;

                foreach (DirectoryItem childNode in RootNode.Items)
                {
                    await GenerateChecksumAsync(childNode, hasher, token);
                }
            }
            finally
            {
                Log($"{nameof(TreeChecksumViewModel)}.{nameof(GenerateChecksumsAsync)}: End");

                m_GenerationInProgress = false;

                m_CancellationTokenSource.Dispose();
            }
        }
        private static IHashAlgorithim GetAlgorithim(string flag)
        {
            if (string.IsNullOrWhiteSpace(flag))
            {
                throw new ArgumentException($"The checksum algorithim flag is empty/null.");
            }

            Enumerations.ChecksumAlgorithim algorithim = Enumerations.ChecksumAlgorithim.None;

            if (flag.Equals(m_Algorithim_Md5, StringComparison.OrdinalIgnoreCase))
            {
                Log("Algorithim is MD5.");

                algorithim = Enumerations.ChecksumAlgorithim.MD5;
            }
            else if (flag.Equals(m_Algorithim_Sha_1, StringComparison.OrdinalIgnoreCase))
            {
                Log("Algorithim is SHA-1.");

                algorithim = Enumerations.ChecksumAlgorithim.SHA1;
            }
            else if (flag.Equals(m_Algorithim_Sha_256, StringComparison.OrdinalIgnoreCase))
            {
                Log("Algorithim is SHA-256.");

                algorithim = Enumerations.ChecksumAlgorithim.SHA256;
            }
            else if (flag.Equals(m_Algorithim_Sha_384, StringComparison.OrdinalIgnoreCase))
            {
                Log("Algorithim is SHA384.");

                algorithim = Enumerations.ChecksumAlgorithim.SHA384;
            }
            else if (flag.Equals(m_Algorithim_Sha_512, StringComparison.OrdinalIgnoreCase))
            {
                Log("Algorithim is SHA-512.");

                algorithim = Enumerations.ChecksumAlgorithim.SHA512;
            }
            else
            {
                throw new ArgumentException($"The checksum algorithim flag is unhandled: \"{flag}\".");
            }

            return(HashAlgorithimFactory.Get(algorithim));
        }
Example #3
0
        internal async Task ComputeChecksumAsync()
        {
            Log($"{nameof(FileChecksumViewModel)}.{nameof(ComputeChecksumAsync)}: Start");

            IHashAlgorithim algorithim = HashAlgorithimFactory.Get(SelectedAlgorithim);
            Hasher          hasher     = new Hasher(algorithim);

            string checksum = string.Empty;

            bool?result = await Task.Run(() => hasher.TryGetFileChecksum(SelectedItem.FullyQualifiedFilename, out checksum));

            if (result.HasValue &&
                result.Value)
            {
                ComputedChecksum = checksum;
            }
            else
            {
                Log($"    There was no result from the hashing.");
            }

            Log($"{nameof(FileChecksumViewModel)}.{nameof(ComputeChecksumAsync)}: End");
        }