This commit is contained in:
2023-12-26 18:27:04 -07:00
parent 7ec50dd56e
commit 684ba1f0df
12 changed files with 608 additions and 262 deletions

View File

@ -3,20 +3,21 @@ using System.Text.Json.Serialization;
namespace View_by_Distance.Shared.Models;
public record ExifDirectory(AviDirectory AviDirectory,
ExifDirectoryBase ExifDirectoryBase,
FileMetadataDirectory FileMetadataDirectory,
GifHeaderDirectory GifHeaderDirectory,
GpsDirectory GpsDirectory,
public record ExifDirectory(AviDirectory[] AviDirectories,
ExifDirectoryBase[] ExifBaseDirectories,
FileMetadataDirectory[] FileMetadataDirectories,
GifHeaderDirectory[] GifHeaderDirectories,
GpsDirectory[] GpsDirectories,
int? Height,
int? Id,
JpegDirectory JpegDirectory,
JpegDirectory[] JpegDirectories,
MakernoteDirectory[] MakernoteDirectories,
string OriginalFileName,
PhotoshopDirectory PhotoshopDirectory,
PngDirectory PngDirectory,
QuickTimeMovieHeaderDirectory QuickTimeMovieHeaderDirectory,
QuickTimeTrackHeaderDirectory QuickTimeTrackHeaderDirectory,
WebPDirectory WebPDirectory,
PhotoshopDirectory[] PhotoshopDirectories,
PngDirectory[] PngDirectories,
QuickTimeMovieHeaderDirectory[] QuickTimeMovieHeaderDirectories,
QuickTimeTrackHeaderDirectory[] QuickTimeTrackHeaderDirectories,
WebPDirectory[] WebPDirectories,
int? Width)
{
@ -28,7 +29,7 @@ public record ExifDirectory(AviDirectory AviDirectory,
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
[JsonSerializable(typeof(ExifDirectory))]
public partial class ExifDirectorySourceGenerationContext : JsonSerializerContext
{

View File

@ -0,0 +1,23 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Shared.Models;
public record MakernoteDirectory(string? CameraSerialNumber,
string? FirmwareVersion,
string? QualityAndFileFormat)
{
public override string ToString()
{
string result = JsonSerializer.Serialize(this, MakernoteDirectorySourceGenerationContext.Default.MakernoteDirectory);
return result;
}
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(MakernoteDirectory))]
public partial class MakernoteDirectorySourceGenerationContext : JsonSerializerContext
{
}

View File

@ -4,7 +4,8 @@ using System.Text.Json.Serialization;
namespace View_by_Distance.Shared.Models;
public record PngDirectory(string? ImageHeight,
string? ImageWidth)
string? ImageWidth,
string? TextualData)
{
public override string ToString()

View File

@ -54,14 +54,26 @@ internal abstract class XDate
{
DateTime? result;
List<DateTime> results = [];
if (exifDirectory.ExifDirectoryBase.DateTimeOriginal is not null)
results.Add(exifDirectory.ExifDirectoryBase.DateTimeOriginal.Value);
if (exifDirectory.AviDirectory.DateTimeOriginal is not null)
results.Add(exifDirectory.AviDirectory.DateTimeOriginal.Value);
if (exifDirectory.QuickTimeMovieHeaderDirectory.Created is not null)
results.Add(exifDirectory.QuickTimeMovieHeaderDirectory.Created.Value);
if (exifDirectory.QuickTimeTrackHeaderDirectory.Created is not null)
results.Add(exifDirectory.QuickTimeTrackHeaderDirectory.Created.Value);
foreach (ExifDirectoryBase exifDirectoryBase in exifDirectory.ExifBaseDirectories)
{
if (exifDirectoryBase.DateTimeOriginal is not null)
results.Add(exifDirectoryBase.DateTimeOriginal.Value);
}
foreach (AviDirectory aviDirectory in exifDirectory.AviDirectories)
{
if (aviDirectory.DateTimeOriginal is not null)
results.Add(aviDirectory.DateTimeOriginal.Value);
}
foreach (QuickTimeMovieHeaderDirectory quickTimeMovieHeaderDirectory in exifDirectory.QuickTimeMovieHeaderDirectories)
{
if (quickTimeMovieHeaderDirectory.Created is not null)
results.Add(quickTimeMovieHeaderDirectory.Created.Value);
}
foreach (QuickTimeTrackHeaderDirectory quickTimeTrackHeaderDirectory in exifDirectory.QuickTimeTrackHeaderDirectories)
{
if (quickTimeTrackHeaderDirectory.Created is not null)
results.Add(quickTimeTrackHeaderDirectory.Created.Value);
}
result = results.Count == 0 ? null : results.Min();
return result;
}
@ -121,27 +133,48 @@ internal abstract class XDate
{
DateTime result;
List<DateTime> results = [];
if (exifDirectory.ExifDirectoryBase.DateTimeOriginal is not null)
results.Add(exifDirectory.ExifDirectoryBase.DateTimeOriginal.Value);
if (exifDirectory.AviDirectory.DateTimeOriginal is not null)
results.Add(exifDirectory.AviDirectory.DateTimeOriginal.Value);
if (exifDirectory.QuickTimeMovieHeaderDirectory.Created is not null)
results.Add(exifDirectory.QuickTimeMovieHeaderDirectory.Created.Value);
if (exifDirectory.QuickTimeTrackHeaderDirectory.Created is not null)
results.Add(exifDirectory.QuickTimeTrackHeaderDirectory.Created.Value);
foreach (ExifDirectoryBase exifDirectoryBase in exifDirectory.ExifBaseDirectories)
{
if (exifDirectoryBase.DateTimeOriginal is not null)
results.Add(exifDirectoryBase.DateTimeOriginal.Value);
}
foreach (AviDirectory aviDirectory in exifDirectory.AviDirectories)
{
if (aviDirectory.DateTimeOriginal is not null)
results.Add(aviDirectory.DateTimeOriginal.Value);
}
foreach (QuickTimeMovieHeaderDirectory quickTimeMovieHeaderDirectory in exifDirectory.QuickTimeMovieHeaderDirectories)
{
if (quickTimeMovieHeaderDirectory.Created is not null)
results.Add(quickTimeMovieHeaderDirectory.Created.Value);
}
foreach (QuickTimeTrackHeaderDirectory quickTimeTrackHeaderDirectory in exifDirectory.QuickTimeTrackHeaderDirectories)
{
if (quickTimeTrackHeaderDirectory.Created is not null)
results.Add(quickTimeTrackHeaderDirectory.Created.Value);
}
if (results.Count == 0)
{
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(exifDirectory.OriginalFileName);
DateTime? dateTime = GetDateTimeFromName(fileNameWithoutExtension);
if (dateTime is not null)
results.Add(dateTime.Value);
if (exifDirectory.ExifDirectoryBase.DateTime is not null)
results.Add(exifDirectory.ExifDirectoryBase.DateTime.Value);
if (exifDirectory.ExifDirectoryBase.DateTimeDigitized is not null)
results.Add(exifDirectory.ExifDirectoryBase.DateTimeDigitized.Value);
foreach (ExifDirectoryBase exifDirectoryBase in exifDirectory.ExifBaseDirectories)
{
if (exifDirectoryBase.DateTime is not null)
results.Add(exifDirectoryBase.DateTime.Value);
if (exifDirectoryBase.DateTimeDigitized is not null)
results.Add(exifDirectoryBase.DateTimeDigitized.Value);
}
}
if (results.Count == 0)
{
foreach (FileMetadataDirectory fileMetadataDirectory in exifDirectory.FileMetadataDirectories)
{
if (fileMetadataDirectory.FileModifiedDate is not null)
results.Add(fileMetadataDirectory.FileModifiedDate.Value);
}
}
if (results.Count == 0 && exifDirectory.FileMetadataDirectory.FileModifiedDate is not null)
results.Add(exifDirectory.FileMetadataDirectory.FileModifiedDate.Value);
result = results.Count == 0 ? DateTime.MinValue : results.Min();
return result;
}