public int DeleteTrack(IModelReference trackReference)
{
int count = 0;
if (storage.Tracks.Remove(trackReference))
{
count++;
if (storage.Fingerprints.ContainsKey(trackReference))
{
count += storage.Fingerprints[trackReference].Count;
storage.Fingerprints.Remove(trackReference);
}
var subFingerprintReferences = storage.SubFingerprints
.Where(pair => pair.Value.TrackReference.Equals(trackReference))
.Select(pair => pair.Key)
.ToList();
count += subFingerprintReferences.Count;
foreach (var subFingerprintReference in subFingerprintReferences)
{
storage.SubFingerprints.Remove(subFingerprintReference);
}
foreach (var hashTable in storage.HashTables)
{
foreach (var hashBins in hashTable)
{
foreach (var subFingerprintReference in subFingerprintReferences)
{
if (hashBins.Value.Remove(subFingerprintReference))
{
count++;
}
}
}
}
if (storage.TracksHashes.ContainsKey(trackReference))
{
storage.TracksHashes.Remove(trackReference);
}
}
return count;
}