public void LoadExistingSongHashes(Dictionary <string, string> hashes) { if (hashes == null) { throw new ArgumentNullException(nameof(hashes), "hashes Dictionary cannot be null for LoadExistingSongHashes"); } foreach (var pair in hashes) { if (ExistingHashes.ContainsKey(pair.Key)) { ExistingHashes[pair.Key] = pair.Value; } else { ExistingHashes.Add(pair.Key, pair.Value); } } }
public async Task <List <string> > GetExistingSongHashesAsync(bool hashExisting) { foreach (var songDir in TargetDirectory.GetDirectories()) { // Add missing directories to the Dictionary with an empty string for the hash value. if (!ExistingHashes.ContainsKey(songDir.FullName)) { ExistingHashes.Add(songDir.FullName, string.Empty); } } List <string> songsToHash; if (hashExisting) { songsToHash = ExistingHashes.Keys.ToList(); } else { songsToHash = ExistingHashes.Values.Where(hashData => string.IsNullOrEmpty(hashData)).ToList(); } await Task.Run(() => songsToHash.AsParallel().ForAll(h => { lock (_existingHashesLock) { if (ExistingHashes.ContainsKey(h)) { ExistingHashes[h] = GenerateHash(h); } else { ExistingHashes.Add(h, GenerateHash(h)); } } })).ConfigureAwait(false); return(ExistingHashes.Values.ToList()); }