using System.Text.Json; using System.Text.Json.Serialization; namespace View_by_Distance.Shared.Models; public class FileHolder { protected readonly DateTime? _CreationTime; protected readonly string? _DirectoryName; protected readonly bool _Exists; protected readonly string _ExtensionLowered; protected readonly string _FullName; protected readonly int? _Id; protected readonly DateTime? _LastWriteTime; protected readonly long? _Length; protected readonly string _Name; protected readonly string _NameWithoutExtension; public DateTime? CreationTime => _CreationTime; public string? DirectoryName => _DirectoryName; public bool Exists => _Exists; public string ExtensionLowered => _ExtensionLowered; public string FullName => _FullName; public int? Id => _Id; public DateTime? LastWriteTime => _LastWriteTime; public long? Length => _Length; public string Name => _Name; public string NameWithoutExtension => _NameWithoutExtension; public FileHolder(DateTime? creationTime, string? directoryName, bool exists, string extensionLowered, string fullName, int? id, DateTime? lastWriteTime, long? length, string name, string nameWithoutExtension) { _CreationTime = creationTime; _DirectoryName = directoryName; _Exists = exists; _ExtensionLowered = extensionLowered; _FullName = fullName; _Id = id; _LastWriteTime = lastWriteTime; _Length = length; _Name = name; _NameWithoutExtension = nameWithoutExtension; } public FileHolder(FileInfo fileInfo, int? id) { if (fileInfo.Exists) { _CreationTime = fileInfo.CreationTime; _CreationTime = fileInfo.CreationTime; _LastWriteTime = fileInfo.LastWriteTime; _Length = fileInfo.Length; } _DirectoryName = fileInfo.DirectoryName; _Exists = fileInfo.Exists; _ExtensionLowered = fileInfo.Extension.ToLower(); _Id = id; _FullName = fileInfo.FullName; _Name = fileInfo.Name; _NameWithoutExtension = Path.GetFileNameWithoutExtension(fileInfo.FullName); } public FileHolder(string fileName) : this(new FileInfo(fileName), null) { } public FileHolder(string fileName, int? id) : this(new FileInfo(fileName), id) { } public override string ToString() { string result = JsonSerializer.Serialize(this, FileHolderSourceGenerationContext.Default.FileHolder); return result; } } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(FileHolder))] internal partial class FileHolderSourceGenerationContext : JsonSerializerContext { }