using MetadataExtractor; using MetadataExtractor.Formats.Exif; using View_by_Distance.Shared.Models.Stateless; namespace View_by_Distance.Metadata.Models.Stateless.Methods; internal class Metadata { internal static string? GetFaceEncoding(IReadOnlyList directories) { string? result; List results = new(); const string comment = "Comment: "; foreach (MetadataExtractor.Directory directory in directories) { if (directory.Name != "PNG-tEXt") continue; foreach (Tag tag in directory.Tags) { if (tag.Name != "Textual Data" || string.IsNullOrEmpty(tag.Description)) continue; if (!tag.Description.StartsWith(comment)) continue; results.Add(tag.Description); } } result = results.Any() ? results[0][comment.Length..] : null; return result; } internal static string? GetOutputResolution(IReadOnlyList directories) { string? result; List results = new(); const string artist = "Artist: "; foreach (MetadataExtractor.Directory directory in directories) { if (directory.Name != "PNG-tEXt") continue; foreach (Tag tag in directory.Tags) { if (tag.Name != "Textual Data" || string.IsNullOrEmpty(tag.Description)) continue; if (!tag.Description.StartsWith(artist)) continue; results.Add(tag.Description); } } result = results.Any() ? results[0][artist.Length..] : null; return result; } internal static string? GetModel(IReadOnlyList directories) { string? result; ExifDirectoryBase? exifDirectoryBase = directories.OfType().FirstOrDefault(); if (exifDirectoryBase is null) result = null; else result = exifDirectoryBase.GetString(ExifDirectoryBase.TagModel); return result; } internal static int GetOrientation(List> metadataCollection) { int result; const string orientation = nameof(IExif.Tags.Orientation); List orientations = (from l in metadataCollection where l.Key.Contains(orientation) select l.Value).ToList(); if (!orientations.Any()) result = 0; else if (!int.TryParse(orientations[0], out result)) result = 0; return result; } }