Beispiel #1
0
        private IEnumerable <SubFingerprintData> ReadSubFingerprints(int[] hashes, int thresholdVotes,
                                                                     IDictionary <string, string> yesMetaFieldsFilters,
                                                                     IDictionary <string, string> noMetaFieldsFilters,
                                                                     ReadOnlyTransaction tx)
        {
            var subFingeprintIds = GetSubFingerprintMatches(hashes, thresholdVotes, tx);
            var subFingerprints  = subFingeprintIds.Select(tx.GetSubFingerprint);

            if (yesMetaFieldsFilters.Count > 0 || noMetaFieldsFilters.Count > 0)
            {
                return(subFingerprints
                       .GroupBy(subFingerprint => subFingerprint.TrackReference)
                       .Where(group =>
                {
                    var trackData = tx.GetTrackByReference(group.Key);
                    var result = metaFieldsFilter.PassesFilters(trackData.MetaFields, yesMetaFieldsFilters, noMetaFieldsFilters);
                    return result;
                })
                       .SelectMany(x => x.ToList())
                       .Select(e => e.ToSubFingerprintData()));
            }

            return(subFingerprints
                   .Select(e => e.ToSubFingerprintData()));
        }
        private IEnumerable <SubFingerprintData> ReadSubFingerprints(int[] hashes, int thresholdVotes,
                                                                     IDictionary <string, string> metaFieldsFilter,
                                                                     ReadOnlyTransaction tx)
        {
            var subFingeprintIds = GetSubFingerprintMatches(hashes, thresholdVotes, tx);
            var subFingerprints  = subFingeprintIds.Select(tx.GetSubFingerprint);

            if (metaFieldsFilter.Count > 0)
            {
                return(subFingerprints
                       .GroupBy(subFingerprint => subFingerprint.TrackReference)
                       .Where(group =>
                {
                    var trackData = tx.GetTrackByReference(group.Key);
                    return trackData.MetaFields
                    .Join(metaFieldsFilter, x => x.Key, x => x.Key, (a, b) => a.Value.Equals(b.Value))
                    .Any(x => x);
                })
                       .SelectMany(x => x.ToList())
                       .Select(e => e.ToSubFingerprintData()));
            }

            return(subFingerprints
                   .Select(e => e.ToSubFingerprintData()));
        }