public override IEnumerable <ExtraFile> ProcessFiles(Author author, List <string> filesOnDisk, List <string> importedFiles) { _logger.Debug("Looking for existing metadata in {0}", author.Path); var metadataFiles = new List <MetadataFile>(); var filterResult = FilterAndClean(author, filesOnDisk, importedFiles); foreach (var possibleMetadataFile in filterResult.FilesOnDisk) { foreach (var consumer in _consumers) { var metadata = consumer.FindMetadataFile(author, possibleMetadataFile); if (metadata == null) { continue; } if (metadata.Type == MetadataType.BookImage || metadata.Type == MetadataType.BookMetadata) { var localBook = _parsingService.GetLocalBook(possibleMetadataFile, author); if (localBook == null) { _logger.Debug("Extra file folder has multiple Books: {0}", possibleMetadataFile); continue; } metadata.BookId = localBook.Id; } if (metadata.Type == MetadataType.BookMetadata) { var localTrack = new LocalBook { FileTrackInfo = Parser.Parser.ParseMusicPath(possibleMetadataFile), Author = author, Path = possibleMetadataFile }; try { _augmentingService.Augment(localTrack, false); } catch (AugmentingFailedException) { _logger.Debug("Unable to parse extra file: {0}", possibleMetadataFile); continue; } if (localTrack.Book == null) { _logger.Debug("Cannot find related book for: {0}", possibleMetadataFile); continue; } } metadata.Extension = Path.GetExtension(possibleMetadataFile); metadataFiles.Add(metadata); } } _logger.Info("Found {0} existing metadata files", metadataFiles.Count); _metadataFileService.Upsert(metadataFiles); // Return files that were just imported along with files that were // previously imported so previously imported files aren't imported twice return(metadataFiles.Concat(filterResult.PreviouslyImported)); }