using System.Collections.ObjectModel; using System.Globalization; namespace View_by_Distance.Shared.Models.Stateless.Methods; internal static class MetaBase { internal static string? GetMaker(ExifDirectoryBase[]? exifBaseDirectories) { string? result = null; if (exifBaseDirectories is not null) { string value; foreach (ExifDirectoryBase exifDirectoryBase in exifBaseDirectories) { value = exifDirectoryBase?.Make is null ? string.Empty : exifDirectoryBase.Make.ToString().Trim(); if (string.IsNullOrEmpty(value)) result = null; else { result = $"{value[0].ToString().ToUpper()}{value[1..].ToLower()}"; break; } } } return result; } internal static string? GetModel(ExifDirectoryBase[]? exifBaseDirectories) { string? result = null; if (exifBaseDirectories is not null) { string value; foreach (ExifDirectoryBase exifDirectoryBase in exifBaseDirectories) { value = exifDirectoryBase?.Model is null ? string.Empty : exifDirectoryBase.Model.ToString().Trim(); if (string.IsNullOrEmpty(value)) result = null; else { result = value; break; } } } return result; } internal static int? GetOrientation(ExifDirectoryBase[]? exifBaseDirectories) { int? result = null; // public const int TagOrientation = 274; if (exifBaseDirectories is not null) { foreach (ExifDirectoryBase exifDirectoryBase in exifBaseDirectories) { result = exifDirectoryBase?.OrientationValue; if (result is not null) break; } } return result; } internal static ReadOnlyCollection GetKeywords(ExifDirectoryBase[]? exifBaseDirectories) { List results = []; if (exifBaseDirectories is not null) { string value; foreach (ExifDirectoryBase exifDirectoryBase in exifBaseDirectories) { value = exifDirectoryBase?.WinKeywords is null ? string.Empty : exifDirectoryBase.WinKeywords.ToString().Trim(); if (string.IsNullOrEmpty(value)) continue; results.Add(value); } } return results.AsReadOnly(); } internal static int? GetWidth(ExifDirectoryBase[]? exifBaseDirectories) { int? result = null; // public const int TagImageWidth = 256; if (exifBaseDirectories is not null) { foreach (ExifDirectoryBase exifDirectoryBase in exifBaseDirectories) { result = exifDirectoryBase?.ImageWidthValue; if (result is not null) break; } } return result; } internal static int? GetHeight(ExifDirectoryBase[]? exifBaseDirectories) { int? result = null; // public const int TagImageHeight = 257; if (exifBaseDirectories is not null) { foreach (ExifDirectoryBase exifDirectoryBase in exifBaseDirectories) { result = exifDirectoryBase?.ImageHeightValue; if (result is not null) break; } } return result; } #pragma warning disable CA1416 internal static DateTime? GetDateTime(string dateTimeFormat, string? value) { DateTime? result; string alternateFormat = "ddd MMM dd HH:mm:ss yyyy"; if (value is not null && DateTime.TryParse(value, out DateTime dateTime)) result = dateTime; else if (value is not null && value.Length == dateTimeFormat.Length && DateTime.TryParseExact(value, dateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) result = dateTime; else if (value is not null && value.Length == alternateFormat.Length && DateTime.TryParseExact(value, alternateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) result = dateTime; else result = null; return result; } #pragma warning restore CA1416 }