Exemple #1
0
    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);
    }
Exemple #2
0
    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);
    }
Exemple #3
0
    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);
    }
Exemple #4
0
    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));
    }
Exemple #5
0
    async Task <Metadata> IMetadataReader.ReadMetadata(
        Metadata metadata,
        MetadataReaderFileInfo fileInfo,
        MetadataReaderOption option)
    {
        if (!IsSupported(fileInfo))
        {
            return(metadata);
        }

        return(await ReadMetadata(metadata, fileInfo, option));
    }
Exemple #6
0
    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);
        }));
    }
Exemple #7
0
 public bool IsSupported(MetadataReaderFileInfo fileInfo)
 {
     return(true);
 }
Exemple #8
0
    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);
    }
Exemple #9
0
 protected abstract Task <Metadata> ReadMetadata(
     Metadata metadata,
     MetadataReaderFileInfo fileInfo,
     MetadataReaderOption option);