using System.Collections.ObjectModel; using System.Text.Json; using System.Text.Json.Serialization; namespace View_by_Distance.Shared.Models; public record MappingFromItem(DateTime[] ContainerDateTimes, DateTime? DateTimeOriginal, int Id, bool? IsArchive, FilePath FilePath, bool? IsWrongYear, ReadOnlyCollection Keywords, DateTime MinimumDateTime, string? Model, string RelativePath, FileHolder ResizedFileHolder) { public override string ToString() { string result = JsonSerializer.Serialize(this, MappingFromItemGenerationContext.Default.MappingFromItem); return result; } public DateTime GetDateTimeOriginalThenMinimumDateTime() => DateTimeOriginal is not null ? DateTimeOriginal.Value : MinimumDateTime; internal static MappingFromItem GetMappingFromItem(DateTime[] containerDateTimes, Item item, FileHolder? resizedFileHolder) { MappingFromItem result; if (item.ExifDirectory?.FilePath.Id is null) throw new NotSupportedException(); if (resizedFileHolder is null) throw new NotSupportedException(); ExifDirectory exifDirectory = item.ExifDirectory; DateTime minimumDateTime = Stateless.Methods.IDate.GetMinimum(exifDirectory); DateTime? dateTime = Stateless.Methods.IDate.GetDateTimeOriginal(exifDirectory); string? model = Stateless.Methods.MetaBase.GetModel(exifDirectory.ExifBaseDirectories); ReadOnlyCollection dateTimes = Stateless.Methods.IDate.GetDateTimes(exifDirectory); (bool? isWrongYear, _) = Stateless.Methods.IProperty.IsWrongYear(item.FilePath, dateTime, dateTimes.ToList()); ReadOnlyCollection keywords = Stateless.Methods.MetaBase.GetKeywords(exifDirectory.ExifBaseDirectories); result = new(containerDateTimes, dateTime, exifDirectory.FilePath.Id.Value, item.IsArchive, item.FilePath, isWrongYear, keywords, minimumDateTime, model, item.RelativePath, resizedFileHolder); return result; } } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(MappingFromItem))] public partial class MappingFromItemGenerationContext : JsonSerializerContext { }