public async ValueTask <Metadata> ReadMetadata(FileHandle fileHandle) { var stats = await _fileService.Stat(fileHandle); var mimeType = await _mimeType.GetMimeType(fileHandle); var fileInfo = new MetadataReaderFileInfo(fileHandle, stats, mimeType); var matchedReaders = _readers.Where(reader => reader.IsSupported(fileInfo)); var readerOption = new MetadataReaderOption(); var metadata = new Metadata(); foreach (var reader in matchedReaders) { try { await reader.ReadMetadata(metadata, fileInfo, readerOption); } catch (Exception) { Console.WriteLine("ReadMetadata Error: " + reader.GetType().Name); } } return(metadata); }
public bool IsSupported(MetadataReaderFileInfo fileInfo) { if (fileInfo.Type.HasFlag(FileType.File) && fileInfo.MimeType != null && fileInfo.MimeType.Mime.StartsWith("audio/", StringComparison.Ordinal)) { return(true); } return(false); }
public bool IsSupported(MetadataReaderFileInfo fileInfo) { if (fileInfo.Type.HasFlag(FileType.File) && fileInfo.MimeType != null && SupportMimeTypes.Contains(fileInfo.MimeType) && fileInfo.Size <= MaxFileSize) { return(true); } return(false); }
public Task <Metadata> ReadMetadata(Metadata metadata, MetadataReaderFileInfo fileInfo, MetadataReaderOption option) { var stats = fileInfo.Stats; if (stats != null) { metadata.Information.CreationTime = stats.CreationTime; metadata.Information.LastWriteTime = stats.LastWriteTime; } return(Task.FromResult(metadata)); }
async Task <Metadata> IMetadataReader.ReadMetadata( Metadata metadata, MetadataReaderFileInfo fileInfo, MetadataReaderOption option) { if (!IsSupported(fileInfo)) { return(metadata); } return(await ReadMetadata(metadata, fileInfo, option)); }
public async Task <Metadata> ReadMetadata(Metadata metadata, MetadataReaderFileInfo fileInfo, MetadataReaderOption option) { return(await _fileService.ReadFileStream(fileInfo.FileHandle, videoStream => { using var formatContext = new FormatContext(videoStream); var duration = formatContext.Duration; metadata.Information.Duration = TimeSpan.FromSeconds(duration); var tags = formatContext.ReadMetadata(); return ReadTagMetadata(metadata, tags); })); }
public bool IsSupported(MetadataReaderFileInfo fileInfo) { return(true); }
protected override async Task <Metadata> ReadMetadata( Metadata metadata, MetadataReaderFileInfo fileInfo, MetadataReaderOption option) { var directories = await _fileService.ReadFileStream(fileInfo.FileHandle, readStream => { if (fileInfo.MimeType == MimeType.image_png) { return(ValueTask.FromResult(PngMetadataReader.ReadMetadata(readStream))); } if (fileInfo.MimeType == MimeType.image_jpeg) { return(ValueTask.FromResult(JpegMetadataReader.ReadMetadata(readStream))); } if (fileInfo.MimeType == MimeType.image_bmp) { return(ValueTask.FromResult(BmpMetadataReader.ReadMetadata(readStream))); } if (fileInfo.MimeType == MimeType.image_gif) { return(ValueTask.FromResult(GifMetadataReader.ReadMetadata(readStream))); } if (fileInfo.MimeType == MimeType.image_webp) { return(ValueTask.FromResult(WebPMetadataReader.ReadMetadata(readStream))); } return(ValueTask.FromResult(MetadataExtractor.ImageMetadataReader.ReadMetadata(readStream))); }); foreach (var directory in directories) { if (directory is JpegDirectory jpegDirectory) { ParseJpegDirectory(jpegDirectory, metadata); } else if (directory is WebPDirectory webPDirectory) { ParseWebPDirectory(webPDirectory, metadata); } else if (directory is ExifIfd0Directory exifIfd0Directory) { ParseExifDirectory(exifIfd0Directory, metadata); } else if (directory is ExifSubIfdDirectory exifSubIfdDirectory) { ParseExifDirectory(exifSubIfdDirectory, metadata); } else if (directory is PngDirectory pngDirectory) { ParsePngDirectory(pngDirectory, metadata); } else if (directory is XmpDirectory xmpDirectory) { ParseXmpDirectory(xmpDirectory, metadata); } else if (directory is CanonMakernoteDirectory canonMakernoteDirectory) { ParseCanonMakernoteDirectory(canonMakernoteDirectory, metadata); } } return(metadata); }
protected abstract Task <Metadata> ReadMetadata( Metadata metadata, MetadataReaderFileInfo fileInfo, MetadataReaderOption option);