Offset-Date-Time-Original

Rename updates again
Mirror-Length in place
Delete-By-Distinct long to string
Copy-Distinct handle move and move back
This commit is contained in:
2023-07-02 17:57:50 -07:00
parent 131d24882e
commit d23398db7a
28 changed files with 1148 additions and 341 deletions

View File

@ -3,15 +3,10 @@ namespace View_by_Distance.Metadata.Models.Stateless.Methods;
public interface IMetadata
{
DateTime? TestStatic_GetMinimumDateTime(IReadOnlyList<MetadataExtractor.Directory> directories) =>
GetMinimumDateTime(directories);
static DateTime? GetMinimumDateTime(IReadOnlyList<MetadataExtractor.Directory> directories) =>
Metadata.GetMinimumDateTime(directories);
DateTime? TestStatic_GetMinimumDateTime(IReadOnlyList<MetadataExtractor.Directory> directories, Shared.Models.FileHolder fileHolder) =>
GetMinimumDateTime(directories, fileHolder);
static DateTime? GetMinimumDateTime(IReadOnlyList<MetadataExtractor.Directory> directories, Shared.Models.FileHolder fileHolder) =>
Metadata.GetMinimumDateTime(directories, fileHolder);
(DateTime?, DateTime?[]) TestStatic_GetDateTimes(Shared.Models.FileHolder fileHolder, IReadOnlyList<MetadataExtractor.Directory> directories) =>
GetDateTimes(fileHolder, directories);
static (DateTime?, DateTime?[]) GetDateTimes(Shared.Models.FileHolder fileHolder, IReadOnlyList<MetadataExtractor.Directory> directories) =>
Metadata.GetDateTimes(fileHolder, directories);
string? TestStatic_GetModel(IReadOnlyList<MetadataExtractor.Directory> directories) =>
GetModel(directories);

View File

@ -53,53 +53,104 @@ internal class Metadata
return result;
}
internal static DateTime? GetMinimumDateTime(IReadOnlyList<MetadataExtractor.Directory> directories)
internal static (DateTime?, DateTime?[]) GetDateTimes(Shared.Models.FileHolder fileHolder, IReadOnlyList<MetadataExtractor.Directory> directories)
{
DateTime? result;
DateTime dateTime;
List<DateTime> results = new();
List<DateTime?> results = new();
DateTime? result = null;
DateTime? dateTime;
DateTime checkDateTime;
string dateTimeFormat = Shared.Models.Stateless.Methods.IProperty.DateTimeFormat();
ExifDirectoryBase? exifDirectoryBase = directories.OfType<ExifDirectoryBase>().FirstOrDefault();
results.Add(fileHolder.CreationTime);
results.Add(fileHolder.LastWriteTime);
if (exifDirectoryBase is not null)
{
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTime, out dateTime))
results.Add(dateTime);
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTimeDigitized, out dateTime))
results.Add(dateTime);
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTimeOriginal, out dateTime))
results.Add(dateTime);
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTime, out checkDateTime))
results.Add(checkDateTime);
else
{
dateTime = Shared.Models.Stateless.Methods.IProperty.GetDateTime(dateTimeFormat, exifDirectoryBase.GetString(ExifDirectoryBase.TagDateTime));
if (dateTime is not null)
results.Add(dateTime.Value);
}
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTimeDigitized, out checkDateTime))
results.Add(checkDateTime);
else
{
dateTime = Shared.Models.Stateless.Methods.IProperty.GetDateTime(dateTimeFormat, exifDirectoryBase.GetString(ExifDirectoryBase.TagDateTimeDigitized));
if (dateTime is not null)
results.Add(dateTime.Value);
}
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTimeOriginal, out checkDateTime))
{
result ??= checkDateTime;
results.Add(checkDateTime);
}
else
{
dateTime = Shared.Models.Stateless.Methods.IProperty.GetDateTime(dateTimeFormat, exifDirectoryBase.GetString(ExifDirectoryBase.TagDateTimeOriginal));
if (dateTime is not null)
{
result ??= dateTime.Value;
results.Add(dateTime.Value);
}
}
}
AviDirectory? aviDirectory = directories.OfType<AviDirectory>().FirstOrDefault();
if (aviDirectory is not null)
{
if (aviDirectory.TryGetDateTime(AviDirectory.TagDateTimeOriginal, out dateTime))
results.Add(dateTime);
if (aviDirectory.TryGetDateTime(AviDirectory.TagDateTimeOriginal, out checkDateTime))
{
result ??= checkDateTime;
results.Add(checkDateTime);
}
else
{
dateTime = Shared.Models.Stateless.Methods.IProperty.GetDateTime(dateTimeFormat, aviDirectory.GetString(AviDirectory.TagDateTimeOriginal));
if (dateTime is not null)
{
result ??= dateTime.Value;
results.Add(dateTime.Value);
}
}
}
QuickTimeMovieHeaderDirectory? quickTimeMovieHeaderDirectory = directories.OfType<QuickTimeMovieHeaderDirectory>().FirstOrDefault();
if (quickTimeMovieHeaderDirectory is not null)
{
if (quickTimeMovieHeaderDirectory.TryGetDateTime(QuickTimeMovieHeaderDirectory.TagCreated, out dateTime))
results.Add(dateTime);
if (quickTimeMovieHeaderDirectory.TryGetDateTime(QuickTimeMovieHeaderDirectory.TagCreated, out checkDateTime))
{
result ??= checkDateTime;
results.Add(checkDateTime);
}
else
{
dateTime = Shared.Models.Stateless.Methods.IProperty.GetDateTime(dateTimeFormat, quickTimeMovieHeaderDirectory.GetString(QuickTimeMovieHeaderDirectory.TagCreated));
if (dateTime is not null)
{
result ??= dateTime.Value;
results.Add(dateTime.Value);
}
}
}
QuickTimeTrackHeaderDirectory? quickTimeTrackHeaderDirectory = directories.OfType<QuickTimeTrackHeaderDirectory>().FirstOrDefault();
if (quickTimeTrackHeaderDirectory is not null)
{
if (quickTimeTrackHeaderDirectory.TryGetDateTime(QuickTimeTrackHeaderDirectory.TagCreated, out dateTime))
results.Add(dateTime);
if (quickTimeTrackHeaderDirectory.TryGetDateTime(QuickTimeTrackHeaderDirectory.TagCreated, out checkDateTime))
{
result ??= checkDateTime;
results.Add(checkDateTime);
}
else
{
dateTime = Shared.Models.Stateless.Methods.IProperty.GetDateTime(dateTimeFormat, quickTimeTrackHeaderDirectory.GetString(QuickTimeTrackHeaderDirectory.TagCreated));
if (dateTime is not null)
{
result ??= dateTime.Value;
results.Add(dateTime.Value);
}
}
}
if (results.Any())
result = results.Min();
else
result = null;
return result;
}
internal static DateTime? GetMinimumDateTime(IReadOnlyList<MetadataExtractor.Directory> directories, Shared.Models.FileHolder fileHolder)
{
DateTime? result;
DateTime? dateTime = GetMinimumDateTime(directories);
List<DateTime?> results = new() { fileHolder.CreationTime, fileHolder.LastWriteTime, dateTime };
result = results.Min();
return result;
return new(result, results.ToArray());
}
internal static string? GetModel(IReadOnlyList<MetadataExtractor.Directory> directories)