using System.IO; using System.Linq; using System.Threading; using xAiApi.Interfaces; using xCommons.Extensions; using xExceptions.Constants; using System.Threading.Tasks; using System.Collections.Generic; namespace xAiApi.Providers { /// /// Composite extractor that delegates to appropriate extractor /// based on MIME type ... /// public class XCompositeFileContentExtractor : IXFileContentExtractor { // private readonly IEnumerable extractors; public XCompositeFileContentExtractor( IEnumerable extractors ) { this.extractors = extractors; } /// /// Check if this extractor supports the specified MIME type ... /// public bool CanExtract(string mimeType) { return extractors.Any(e => e.CanExtract(mimeType)); } /// /// Extract text content from file stream ... /// public async Task ExtractAsync( Stream fileStream, string mimeType, CancellationToken cancellationToken = default ) { // var extractor = extractors .FirstOrDefault(e => e.CanExtract(mimeType)); if (extractor.IsNull()) { // XException.NotAllowed.Throw( $"Unsupported file type: {mimeType}" ); } // var result = await extractor .ExtractAsync( mimeType: mimeType, fileStream: fileStream, cancellationToken: cancellationToken ); // return result; } } }