using System.Text.Json; using System.Text.Json.Serialization; namespace View_by_Distance.Metadata.Models; public class MetadataConfiguration : Shared.Models.Properties.IAAConfiguration { protected string _RootDirectory; public string RootDirectory => _RootDirectory; public string DateGroup { init; get; } public string FileNameDirectorySeparator { init; get; } public bool ForcePropertyLastWriteTimeToCreationTime { init; get; } public string[] IgnoreExtensions { init; get; } public string[] IgnoreRulesKeyWords { 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 string Pattern { init; get; } public string PersonBirthdayFormat { 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, string fileNameDirectorySeparator, bool forcePropertyLastWriteTimeToCreationTime, string[] ignoreExtensions, string[] ignoreRulesKeyWords, int maxImagesInDirectoryForTopLevelFirstPass, string? modelName, int? numberOfJitters, int? numberOfTimesToUpsample, int offset, string pattern, string personBirthdayFormat, bool populatePropertyId, string? predictorModelName, bool propertiesChangedForProperty, string[] propertyContentCollectionFiles, string resultAllInOne, int resultAllInOneSubdirectoryLength, string resultCollection, string resultContent, string resultSingleton, string rootDirectory, string[] validImageFormatExtensions) { DateGroup = dateGroup; FileNameDirectorySeparator = fileNameDirectorySeparator; ForcePropertyLastWriteTimeToCreationTime = forcePropertyLastWriteTimeToCreationTime; IgnoreExtensions = ignoreExtensions; IgnoreRulesKeyWords = ignoreRulesKeyWords; MaxImagesInDirectoryForTopLevelFirstPass = maxImagesInDirectoryForTopLevelFirstPass; ModelName = modelName; NumberOfJitters = numberOfJitters; NumberOfTimesToUpsample = numberOfTimesToUpsample; Offset = offset; Pattern = pattern; PersonBirthdayFormat = personBirthdayFormat; 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(MetadataConfiguration propertyConfiguration, bool requireExist) { if (propertyConfiguration is null) throw new NullReferenceException(nameof(propertyConfiguration)); if (propertyConfiguration.IgnoreExtensions is null || propertyConfiguration.IgnoreExtensions.Length == 0) throw new NullReferenceException(nameof(propertyConfiguration.IgnoreExtensions)); if (propertyConfiguration.IgnoreRulesKeyWords is null || propertyConfiguration.IgnoreRulesKeyWords.Length == 0) throw new NullReferenceException(nameof(propertyConfiguration.IgnoreRulesKeyWords)); if (propertyConfiguration.PropertyContentCollectionFiles is null) throw new NullReferenceException(nameof(propertyConfiguration.PropertyContentCollectionFiles)); if (propertyConfiguration.ValidImageFormatExtensions is null || propertyConfiguration.ValidImageFormatExtensions.Length == 0) throw new NullReferenceException(nameof(propertyConfiguration.ValidImageFormatExtensions)); if (propertyConfiguration is null) throw new NullReferenceException(nameof(propertyConfiguration)); if (string.IsNullOrEmpty(propertyConfiguration.DateGroup)) throw new NullReferenceException(nameof(propertyConfiguration.DateGroup)); if (string.IsNullOrEmpty(propertyConfiguration.FileNameDirectorySeparator)) throw new NullReferenceException(nameof(propertyConfiguration.FileNameDirectorySeparator)); if (string.IsNullOrEmpty(propertyConfiguration.Pattern)) throw new NullReferenceException(nameof(propertyConfiguration.Pattern)); if (string.IsNullOrEmpty(propertyConfiguration.RootDirectory) || (requireExist && !Directory.Exists(propertyConfiguration.RootDirectory))) throw new NullReferenceException(nameof(propertyConfiguration.RootDirectory)); if (propertyConfiguration.RootDirectory != Path.GetFullPath(propertyConfiguration.RootDirectory)) throw new Exception(); } } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(MetadataConfiguration))] internal partial class MetadataConfigurationSourceGenerationContext : JsonSerializerContext { }