Keyword to work with Amazon

This commit is contained in:
2024-02-04 09:38:40 -07:00
parent 4081a73b9d
commit 1200780eee
38 changed files with 325 additions and 287 deletions

View File

@ -47,10 +47,10 @@ internal partial class Property
return results;
}
private static List<DateTime> GetDateTimes(FileHolder fileHolder, DateTime?[] dateTimes)
private static List<DateTime> GetDateTimes(FilePath filePath, DateTime?[] dateTimes)
{
List<DateTime> results = [];
string[] digits = Digit().Split(fileHolder.FullName);
string[] digits = Digit().Split(filePath.FullName);
foreach (string digit in digits)
{
if (digit.Length != 4 || digit[..2] is not "19" and not "20" || !int.TryParse(digit, out int year))
@ -75,7 +75,7 @@ internal partial class Property
return results;
}
internal static DateTime? GetDateTimeFromName(FileHolder fileHolder)
internal static DateTime? GetDateTimeFromName(FilePath filePath)
{
DateTime? result = null;
int length;
@ -90,7 +90,7 @@ internal partial class Property
[string.Empty, "yyyyMMdd_", ticksExample],
[string.Empty, "yyyy-MM-dd_", ticksExample],
[string.Empty, "yyyy-MM-dd.", ticksExample],
[string.Empty, "yyyy-MM-dd.", $"{ticksExample}.{fileHolder.Length}"],
[string.Empty, "yyyy-MM-dd.", $"{ticksExample}.{filePath.Length}"],
[string.Empty, "yyyy-MM-dd HH.mm.ss", string.Empty],
[string.Empty, "yyyyMMdd_HHmmss", "_LLS"],
[string.Empty, "yyyyMMdd_HHmmss", "_HDR"],
@ -106,17 +106,17 @@ internal partial class Property
if (dateFormat.Length != 3)
throw new Exception();
fullFormat = string.Join(string.Empty, dateFormat);
if (fileHolder.NameWithoutExtension.Length != fullFormat.Length)
if (filePath.NameWithoutExtension.Length != fullFormat.Length)
continue;
format = dateFormat[1];
length = dateFormat[0].Length + dateFormat[1].Length;
for (int i = dateFormat[0].Length; i < length; i++)
_ = value.Append(fileHolder.NameWithoutExtension[i]);
_ = value.Append(filePath.NameWithoutExtension[i]);
if (value.Length != format.Length)
continue;
if (DateTime.TryParseExact(value.ToString(), format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime checkDateTime))
{
if (fileHolder.NameWithoutExtension.Length < ticksExample.Length || !long.TryParse(fileHolder.NameWithoutExtension[^ticksExample.Length..], out long ticks))
if (filePath.NameWithoutExtension.Length < ticksExample.Length || !long.TryParse(filePath.NameWithoutExtension[^ticksExample.Length..], out long ticks))
result = checkDateTime;
else
result = new DateTime(ticks);
@ -183,12 +183,11 @@ internal partial class Property
#pragma warning disable CA1416
internal static (string?, DateTime[], Shared.Models.Property) GetProperty(bool populateId, IMetadata<MetadataExtractor.Directory>? metadata, FileHolder fileHolder, Shared.Models.Property? property, bool isIgnoreExtension, bool isValidImageFormatExtension, int? id, ASCIIEncoding asciiEncoding)
internal static (string?, DateTime[], Shared.Models.Property) GetProperty(bool populateId, IMetadata<MetadataExtractor.Directory>? metadata, FilePath filePath, Shared.Models.Property? property, bool isIgnoreExtension, bool isValidImageFormatExtension, int? id, ASCIIEncoding asciiEncoding)
{
Shared.Models.Property result;
byte[] bytes;
string value;
long fileLength;
string? message;
int? width = null;
int? height = null;
@ -206,27 +205,27 @@ internal partial class Property
DateTime? dateTimeOriginal = null;
DateTime? dateTimeDigitized = null;
DateTime? dateTimeOriginalByLogic = null;
DateTime? dateTimeFromName = GetDateTimeFromName(fileHolder);
if (!isValidImageFormatExtension && fileHolder.Exists && metadata is not null)
DateTime? dateTimeFromName = GetDateTimeFromName(filePath);
if (!isValidImageFormatExtension && metadata is not null)
{
try
{
IReadOnlyList<MetadataExtractor.Directory> directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(fileHolder.FullName);
(dateTimeOriginalByLogic, DateTime?[] metadataDateTimes) = metadata.GetDateTimes(fileHolder, directories);
IReadOnlyList<MetadataExtractor.Directory> directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(filePath.FullName);
(dateTimeOriginalByLogic, DateTime?[] metadataDateTimes) = metadata.GetDateTimes(filePath, directories);
dateTimesByLogic = GetDateTimes(metadataDateTimes);
message = null;
}
catch (Exception)
{
dateTimesByLogic = [];
message = string.Concat(new StackFrame().GetMethod()?.Name, " <", fileHolder.FullName, ">");
message = string.Concat(new StackFrame().GetMethod()?.Name, " <", filePath.FullName, ">");
}
}
else if (!isIgnoreExtension && isValidImageFormatExtension && fileHolder.Exists)
else if (!isIgnoreExtension && isValidImageFormatExtension)
{
try
{
using Image image = Image.FromFile(fileHolder.FullName);
using Image image = Image.FromFile(filePath.FullName);
width = image.Width;
height = image.Height;
if (populateId && id is null)
@ -320,51 +319,41 @@ internal partial class Property
}
}
message = null;
dateTimes = [fileHolder.LastWriteTime, fileHolder.CreationTime, dateTime, dateTimeDigitized, dateTimeOriginal, gpsDateStamp];
dateTimes = [new(filePath.LastWriteTicks), new(filePath.CreationTicks), dateTime, dateTimeDigitized, dateTimeOriginal, gpsDateStamp];
}
catch (Exception)
{
dateTimes = [];
message = string.Concat(new StackFrame().GetMethod()?.Name, " <", fileHolder.FullName, ">");
message = string.Concat(new StackFrame().GetMethod()?.Name, " <", filePath.FullName, ">");
}
if (metadata is not null && dateTimeOriginal is null)
{
try
{
IReadOnlyList<MetadataExtractor.Directory> directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(fileHolder.FullName);
(dateTimeOriginalByLogic, DateTime?[] metadataDateTimes) = metadata.GetDateTimes(fileHolder, directories);
IReadOnlyList<MetadataExtractor.Directory> directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(filePath.FullName);
(dateTimeOriginalByLogic, DateTime?[] metadataDateTimes) = metadata.GetDateTimes(filePath, directories);
dateTimesByLogic = GetDateTimes(dateTimes, metadataDateTimes);
message = null;
}
catch (Exception) { message = string.Concat(new StackFrame().GetMethod()?.Name, " <", fileHolder.FullName, ">"); }
catch (Exception) { message = string.Concat(new StackFrame().GetMethod()?.Name, " <", filePath.FullName, ">"); }
}
if (dateTimeFromName is null)
(dateTimeOriginalByLogic, dateTimesByLogic) = (dateTimeOriginal, GetDateTimes(fileHolder, dateTimes));
(dateTimeOriginalByLogic, dateTimesByLogic) = (dateTimeOriginal, GetDateTimes(filePath, dateTimes));
else
(dateTimeOriginalByLogic, dateTimesByLogic) = (dateTimeOriginal, GetDateTimes(dateTimeFromName.Value, dateTimes));
}
else
(message, dateTimeOriginalByLogic, dateTimesByLogic) = (null, null, []);
if (fileHolder.Length is null)
fileLength = 0;
if (property is not null)
result = new(property.CreationTime, dateTime, dateTimeDigitized, dateTimeFromName, dateTimeOriginalByLogic, filePath.Length, gpsDateStamp, height, id, keywords, property.LastWriteTime, make, model, orientation?.ToString(), width);
else
fileLength = fileHolder.Length.Value;
if (fileHolder.CreationTime is null && property?.CreationTime is null)
throw new NullReferenceException(nameof(fileHolder.CreationTime));
if (fileHolder.LastWriteTime is null && property?.LastWriteTime is null)
throw new NullReferenceException(nameof(fileHolder.LastWriteTime));
if (fileHolder.CreationTime is not null && fileHolder.LastWriteTime is not null)
result = new(fileHolder.CreationTime.Value, dateTime, dateTimeDigitized, dateTimeFromName, dateTimeOriginalByLogic, fileLength, gpsDateStamp, height, id, keywords, fileHolder.LastWriteTime.Value, make, model, orientation?.ToString(), width);
else if (property is not null)
result = new(property.CreationTime, dateTime, dateTimeDigitized, dateTimeFromName, dateTimeOriginalByLogic, fileLength, gpsDateStamp, height, id, keywords, property.LastWriteTime, make, model, orientation?.ToString(), width);
else
throw new NullReferenceException(nameof(property));
result = new(new(filePath.CreationTicks), dateTime, dateTimeDigitized, dateTimeFromName, dateTimeOriginalByLogic, filePath.Length, gpsDateStamp, height, id, keywords, new(filePath.LastWriteTicks), make, model, orientation?.ToString(), width);
return (message, dateTimesByLogic.ToArray(), result);
}
#pragma warning restore CA1416
internal static (DateTime?, DateTime[], int?, string?) Get(bool populateId, IMetadata<MetadataExtractor.Directory>? metadata, FileHolder fileHolder, bool isIgnoreExtension, bool isValidImageFormatExtension, ASCIIEncoding asciiEncoding)
internal static (DateTime?, DateTime[], int?, string?) Get(bool populateId, IMetadata<MetadataExtractor.Directory>? metadata, FilePath filePath, bool isIgnoreExtension, bool isValidImageFormatExtension, ASCIIEncoding asciiEncoding)
{
int? id = null;
string? message;
@ -373,7 +362,7 @@ internal partial class Property
if (isIgnoreExtension || !isValidImageFormatExtension)
(message, dateTimes, property) = (null, [], null);
else
(message, dateTimes, property) = GetProperty(populateId, metadata, fileHolder, property, isIgnoreExtension, isValidImageFormatExtension, id, asciiEncoding);
(message, dateTimes, property) = GetProperty(populateId, metadata, filePath, property, isIgnoreExtension, isValidImageFormatExtension, id, asciiEncoding);
return new(property?.DateTimeOriginal, dateTimes, property?.Id, message);
}