using System.Text.Json; using View_by_Distance.Shared.Models; namespace View_by_Distance.Metadata.Models.Stateless.Methods; internal static class Face { internal static FaceEncoding? GetFaceEncoding(ExifDirectory? exifDirectory) { FaceEncoding? result; string? json = GetFaceEncoding(exifDirectory?.PngDirectories); result = string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize(json, FaceEncodingGenerationContext.Default.FaceEncoding); return result; } internal static string? GetFaceEncoding(PngDirectory[]? pngDirectories) { string? result = null; if (pngDirectories is not null) { const string comment = "Comment:"; foreach (PngDirectory pngDirectory in pngDirectories) { if (pngDirectory.TextualData is null || !pngDirectory.TextualData.StartsWith(comment)) continue; result = pngDirectory.TextualData[comment.Length..]; break; } } return result; } internal static FaceFile? GetFaceFile(ExifDirectory? exifDirectory) { FaceFile? result; string? json = GetOutputResolution(exifDirectory?.PngDirectories); result = string.IsNullOrEmpty(json) ? null : JsonSerializer.Deserialize(json, FaceFileGenerationContext.Default.FaceFile); return result; } internal static string? GetOutputResolution(PngDirectory[]? pngDirectories) { string? result = null; if (pngDirectories is not null) { const string artist = "Artist:"; foreach (PngDirectory pngDirectory in pngDirectories) { if (pngDirectory.TextualData is null || !pngDirectory.TextualData.StartsWith(artist)) continue; result = pngDirectory.TextualData[artist.Length..]; break; } if (result is null) { const string author = "Author:"; foreach (PngDirectory pngDirectory in pngDirectories) { if (pngDirectory.TextualData is null || !pngDirectory.TextualData.StartsWith(author)) continue; result = pngDirectory.TextualData[author.Length..]; break; } } } return result; } }