Changed GetDimensions to handle a stream at the end and one exit Switched to using Action? over IDlibDotNet for Tick method Switched to using AsReadOnly over new() Moved Meta Base to Shared
135 lines
4.4 KiB
C#
135 lines
4.4 KiB
C#
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<string> GetKeywords(ExifDirectoryBase[]? exifBaseDirectories)
|
|
{
|
|
List<string> 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
|
|
|
|
} |