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