public IEnumerable <IDictionary <Guid, IList <MediaItemAspect> > > ExtractStubItems(IResourceAccessor mediaItemAccessor, IEnumerable <Guid> metadataExtractorIds)
        {
            List <IDictionary <Guid, IList <MediaItemAspect> > > stubAspects = new List <IDictionary <Guid, IList <MediaItemAspect> > >();
            ICollection <IMetadataExtractor> extractors = new List <IMetadataExtractor>();

            foreach (Guid extractorId in metadataExtractorIds)
            {
                IMetadataExtractor extractor;
                if (LocalMetadataExtractors.TryGetValue(extractorId, out extractor))
                {
                    extractors.Add(extractor);
                }
            }

            // Execute all metadata extractors in order of their priority
            foreach (IMetadataExtractor extractor in extractors.OrderBy(m => m.Metadata.Priority))
            {
                try
                {
                    List <IDictionary <Guid, IList <MediaItemAspect> > > result = new List <IDictionary <Guid, IList <MediaItemAspect> > >();
                    if (extractor.TryExtractStubItems(mediaItemAccessor, result))
                    {
                        stubAspects.AddRange(result);
                    }
                }
                catch (Exception e)
                {
                    MetadataExtractorMetadata mem = extractor.Metadata;
                    ServiceRegistration.Get <ILogger>().Error("MediaAccessor: Error extracting stub items from metadata extractor '{0}' (Id: '{1}')",
                                                              e, mem.Name, mem.MetadataExtractorId);
                    throw;
                }
            }
            return(stubAspects.Count > 0 ? stubAspects : null);
        }
        public Task <IDictionary <Guid, IList <MediaItemAspect> > > ExtractMetadataAsync(IResourceAccessor mediaItemAccessor,
                                                                                         IEnumerable <Guid> metadataExtractorIds, IDictionary <Guid, IList <MediaItemAspect> > existingAspects, bool forceQuickMode)
        {
            ICollection <IMetadataExtractor> extractors = new List <IMetadataExtractor>();

            foreach (Guid extractorId in metadataExtractorIds)
            {
                IMetadataExtractor extractor;
                if (LocalMetadataExtractors.TryGetValue(extractorId, out extractor))
                {
                    extractors.Add(extractor);
                }
            }
            return(ExtractMetadataAsync(mediaItemAccessor, extractors, existingAspects, forceQuickMode));
        }
 public ICollection <Guid> GetMetadataExtractorsForMIATypes(IEnumerable <Guid> miaTypeIDs)
 {
     return(LocalMetadataExtractors.Where(
                extractor => extractor.Value.Metadata.ExtractedAspectTypes.Keys.Intersect(miaTypeIDs).Any()).Select(
                kvp => kvp.Key).ToList());
 }