using System.Text.Json; using System.Text.Json.Serialization; namespace View_by_Distance.Shared.Models; public class Item : Properties.IItem { protected readonly bool? _Abandoned; protected List _Faces; protected readonly bool? _FileSizeChanged; protected readonly FileHolder _ImageFileHolder; protected bool? _LastWriteTimeChanged; protected bool? _Moved; protected readonly bool? _NoJson; protected Property? _Property; protected readonly string _RelativePath; protected FileHolder? _ResizedFileHolder; protected readonly string _SourceDirectoryFile; protected bool _ValidImageFormatExtension; public bool? Abandoned => _Abandoned; public List Faces => _Faces; public bool? FileSizeChanged => _FileSizeChanged; public FileHolder ImageFileHolder => _ImageFileHolder; public bool? LastWriteTimeChanged => _LastWriteTimeChanged; public bool? Moved => _Moved; public bool? NoJson => _NoJson; public Property? Property => _Property; public string RelativePath => _RelativePath; public FileHolder? ResizedFileHolder => _ResizedFileHolder; public string SourceDirectoryFile => _SourceDirectoryFile; public bool ValidImageFormatExtension => _ValidImageFormatExtension; [JsonConstructor] public Item(bool? abandoned, List faces, bool? fileSizeChanged, FileHolder imageFileHolder, bool? lastWriteTimeChanged, bool? moved, bool? noJson, Property? property, string relativePath, FileHolder? resizedFileHolder, string sourceDirectoryFile, bool validImageFormatExtension) { _Faces = faces; _Moved = moved; _NoJson = noJson; _Property = property; _Abandoned = abandoned; _RelativePath = relativePath; _FileSizeChanged = fileSizeChanged; _ImageFileHolder = imageFileHolder; _ResizedFileHolder = resizedFileHolder; _SourceDirectoryFile = sourceDirectoryFile; _LastWriteTimeChanged = lastWriteTimeChanged; _ValidImageFormatExtension = validImageFormatExtension; } public Item(string sourceDirectoryFile, string relativePath, FileHolder imageFileInfo, bool validImageFormatExtension, Property? property, bool? abandoned, bool? fileSizeChanged, bool? lastWriteTimeChanged) : this(abandoned, new(), fileSizeChanged, imageFileInfo, lastWriteTimeChanged, null, abandoned is null, property, relativePath, null, sourceDirectoryFile, validImageFormatExtension) { if (relativePath.EndsWith(".json")) throw new ArgumentException("Can not be a *.json file!"); if (imageFileInfo is not null && imageFileInfo.ExtensionLowered is ".json") throw new ArgumentException("Can not be a *.json file!"); } public Item(string sourceDirectoryFile, string relativePath, bool isValidImageFormatExtension) : this(sourceDirectoryFile, relativePath, new(sourceDirectoryFile), isValidImageFormatExtension, null, null, null, null) { } public override string ToString() { string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); return result; } public void SetMoved(bool moved) => _Moved = moved; public void SetResizedFileHolder(string filenameExtension, FileHolder fileHolder) { if (fileHolder.ExtensionLowered == filenameExtension) _ResizedFileHolder = fileHolder; else if (fileHolder.ExtensionLowered.Length > 3 && fileHolder.ExtensionLowered[3] == 'e' && fileHolder.ExtensionLowered.Remove(3, 1) == filenameExtension) _ResizedFileHolder = fileHolder; else _ResizedFileHolder = fileHolder; } public bool Any() => (_Abandoned.HasValue && _Abandoned.Value) || (_FileSizeChanged.HasValue && _FileSizeChanged.Value) || (_LastWriteTimeChanged.HasValue && _LastWriteTimeChanged.Value) || (_Moved.HasValue && _Moved.Value) || (_NoJson.HasValue && _NoJson.Value); public void Update(Property property) => _Property = property; }