aa/Metadata/Models/MetadataConfiguration.cs

109 lines
5.4 KiB
C#

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
{
}