63 lines
2.4 KiB
C#

using System.Collections.ObjectModel;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Shared.Models;
public class Face : Properties.IFace
{
protected DateTime _DateTime;
protected FaceDistance? _FaceDistance;
protected FaceEncoding? _FaceEncoding;
protected Dictionary<Stateless.FacePart, FacePoint[]>? _FaceParts;
protected readonly OutputResolution? _OutputResolution;
protected Location? _Location;
protected Mapping? _Mapping;
public DateTime DateTime => _DateTime;
public FaceDistance? FaceDistance => _FaceDistance;
public FaceEncoding? FaceEncoding => _FaceEncoding;
public Dictionary<Stateless.FacePart, FacePoint[]>? FaceParts => _FaceParts;
public Location? Location => _Location;
public Mapping? Mapping => _Mapping;
public OutputResolution? OutputResolution => _OutputResolution;
[JsonConstructor]
public Face(DateTime dateTime, FaceDistance? faceDistance, FaceEncoding? faceEncoding, Dictionary<Stateless.FacePart, FacePoint[]>? faceParts, Location? location, Mapping? mapping, OutputResolution? outputResolution)
{
_DateTime = dateTime;
_FaceDistance = faceDistance;
_FaceEncoding = faceEncoding;
_FaceParts = faceParts;
_Location = location;
_Mapping = mapping;
_OutputResolution = outputResolution;
}
public Face(ExifDirectory exifDirectory, int outputResolutionWidth, int outputResolutionHeight, int outputResolutionOrientation, Location? location) :
this(DateTime.MinValue, null, null, null, location, null, null)
{
_OutputResolution = new(outputResolutionHeight, outputResolutionOrientation, outputResolutionWidth);
ReadOnlyCollection<DateTime> dateTimes = Stateless.Methods.IDate.GetDateTimes(exifDirectory);
_DateTime = dateTimes.Min();
}
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
return result;
}
public void SetFaceEncoding(FaceEncoding faceEncoding) =>
_FaceEncoding = faceEncoding;
public void SetFaceParts(Dictionary<Stateless.FacePart, FacePoint[]> faceParts) =>
_FaceParts = faceParts;
public void SetMapping(Mapping mapping) =>
_Mapping = mapping;
public void SetFaceDistance(FaceDistance? faceDistance) =>
_FaceDistance = faceDistance;
}