109 lines
5.4 KiB
C#
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
|
|
{
|
|
} |