Esempio n. 1
0
 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);
         }
     }
 }
Esempio n. 2
0
        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());
        }