using System.Text.Json; using System.Text.Json.Serialization; namespace View_by_Distance.Metadata.Models; public class MetadataConfiguration : Shared.Models.Properties.IMetadataConfiguration { protected string _RootDirectory; public string RootDirectory => _RootDirectory; public string DateGroup { init; get; } public bool ForcePropertyLastWriteTimeToCreationTime { init; get; } public string[] IgnoreExtensions { init; get; } public int MaxImagesInDirectoryForTopLevelFirstPass { init; get; } public string? ModelName { init; get; } public int? NumberOfJitters { init; get; } public int? NumberOfTimesToUpsample { init; get; } public int Offset { init; get; } public bool PopulatePropertyId { init; get; } public string? PredictorModelName { init; get; } public bool PropertiesChangedForProperty { init; get; } public string[] PropertyContentCollectionFiles { init; get; } public string ResultAllInOne { init; get; } public int ResultAllInOneSubdirectoryLength { init; get; } public string ResultCollection { init; get; } public string ResultContent { init; get; } public string ResultSingleton { init; get; } public string[] ValidImageFormatExtensions { init; get; } [JsonConstructor] public MetadataConfiguration(string dateGroup, bool forcePropertyLastWriteTimeToCreationTime, string[] ignoreExtensions, int maxImagesInDirectoryForTopLevelFirstPass, string? modelName, int? numberOfJitters, int? numberOfTimesToUpsample, int offset, bool populatePropertyId, string? predictorModelName, bool propertiesChangedForProperty, string[] propertyContentCollectionFiles, string resultAllInOne, int resultAllInOneSubdirectoryLength, string resultCollection, string resultContent, string resultSingleton, string rootDirectory, string[] validImageFormatExtensions) { DateGroup = dateGroup; ForcePropertyLastWriteTimeToCreationTime = forcePropertyLastWriteTimeToCreationTime; IgnoreExtensions = ignoreExtensions; MaxImagesInDirectoryForTopLevelFirstPass = maxImagesInDirectoryForTopLevelFirstPass; ModelName = modelName; NumberOfJitters = numberOfJitters; NumberOfTimesToUpsample = numberOfTimesToUpsample; Offset = offset; PredictorModelName = predictorModelName; PopulatePropertyId = populatePropertyId; PropertiesChangedForProperty = propertiesChangedForProperty; PropertyContentCollectionFiles = propertyContentCollectionFiles; ResultAllInOne = resultAllInOne; ResultAllInOneSubdirectoryLength = resultAllInOneSubdirectoryLength; ResultCollection = resultCollection; ResultContent = resultContent; ResultSingleton = resultSingleton; _RootDirectory = rootDirectory; ValidImageFormatExtensions = validImageFormatExtensions; } public override string ToString() { string result = JsonSerializer.Serialize(this, MetadataConfigurationSourceGenerationContext.Default.MetadataConfiguration); return result; } public void ChangeRootDirectory(string rootDirectory) => _RootDirectory = Path.GetFullPath(rootDirectory); public static void Verify(Shared.Models.Properties.IMetadataConfiguration metadataConfiguration, bool requireExist) { if (metadataConfiguration is null) throw new NullReferenceException(nameof(metadataConfiguration)); if (metadataConfiguration.IgnoreExtensions is null || metadataConfiguration.IgnoreExtensions.Length == 0) throw new NullReferenceException(nameof(metadataConfiguration.IgnoreExtensions)); if (metadataConfiguration.PropertyContentCollectionFiles is null) throw new NullReferenceException(nameof(metadataConfiguration.PropertyContentCollectionFiles)); if (metadataConfiguration.ValidImageFormatExtensions is null || metadataConfiguration.ValidImageFormatExtensions.Length == 0) throw new NullReferenceException(nameof(metadataConfiguration.ValidImageFormatExtensions)); if (metadataConfiguration is null) throw new NullReferenceException(nameof(metadataConfiguration)); if (string.IsNullOrEmpty(metadataConfiguration.DateGroup)) throw new NullReferenceException(nameof(metadataConfiguration.DateGroup)); if (string.IsNullOrEmpty(metadataConfiguration.RootDirectory) || (requireExist && !Directory.Exists(metadataConfiguration.RootDirectory))) throw new NullReferenceException(nameof(metadataConfiguration.RootDirectory)); if (metadataConfiguration.RootDirectory != Path.GetFullPath(metadataConfiguration.RootDirectory)) throw new Exception(); } } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(MetadataConfiguration))] internal partial class MetadataConfigurationSourceGenerationContext : JsonSerializerContext { }