From 9e60e233910132aa51fea0f4cf5e8b8266b85101 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Sun, 12 Nov 2023 10:12:51 -0700 Subject: [PATCH] re-organized configurations --- Metadata/Models/A_Metadata.cs | 41 +++--- Metadata/Models/Binder/Configuration copy.cs | 119 ------------------ Metadata/Models/Binder/Configuration.cs | 99 --------------- .../Models/Binder/MetadataConfiguration.cs | 74 +++++++++++ Metadata/Models/Binder/ResultConfiguration.cs | 99 +++++++++++++++ Metadata/Models/MetadataConfiguration.cs | 109 ---------------- Rename/Models/AppSettings.cs | 3 +- Rename/Models/Binder/AppSettings.cs | 45 ++++--- Rename/Models/Binder/Configuration.cs | 54 -------- Rename/Models/Binder/RenameConfiguration.cs | 80 ++++++++++++ Rename/Models/Configuration.cs | 26 ---- Rename/Models/RenameConfiguration.cs | 26 ++++ Rename/Rename.cs | 49 +++----- Shared/Models/MetadataConfiguration.cs | 24 ++++ .../Properties/IMetadataConfiguration.cs | 23 ---- Shared/Models/Properties/IZZConfiguration.cs | 11 -- Shared/Models/ResultConfiguration.cs | 31 +++++ Shared/Models/Stateless/Id.cs | 5 +- Shared/Models/Stateless/Methods/IId.cs | 10 +- Shared/Models/Stateless/Methods/IPath.cs | 10 +- Shared/Models/Stateless/Methods/IResult.cs | 66 +++++----- Shared/Models/Stateless/XPath.cs | 18 ++- Shared/Models/Stateless/XResult.cs | 66 +++++----- 23 files changed, 481 insertions(+), 607 deletions(-) delete mode 100644 Metadata/Models/Binder/Configuration copy.cs delete mode 100644 Metadata/Models/Binder/Configuration.cs create mode 100644 Metadata/Models/Binder/MetadataConfiguration.cs create mode 100644 Metadata/Models/Binder/ResultConfiguration.cs delete mode 100644 Metadata/Models/MetadataConfiguration.cs delete mode 100644 Rename/Models/Binder/Configuration.cs create mode 100644 Rename/Models/Binder/RenameConfiguration.cs delete mode 100644 Rename/Models/Configuration.cs create mode 100644 Rename/Models/RenameConfiguration.cs create mode 100644 Shared/Models/MetadataConfiguration.cs delete mode 100644 Shared/Models/Properties/IMetadataConfiguration.cs delete mode 100644 Shared/Models/Properties/IZZConfiguration.cs create mode 100644 Shared/Models/ResultConfiguration.cs diff --git a/Metadata/Models/A_Metadata.cs b/Metadata/Models/A_Metadata.cs index 623ed0b..5d7117e 100644 --- a/Metadata/Models/A_Metadata.cs +++ b/Metadata/Models/A_Metadata.cs @@ -4,7 +4,6 @@ using System.Text.Json; using View_by_Distance.Metadata.Models.Stateless; using View_by_Distance.Metadata.Models.Stateless.Methods; using View_by_Distance.Shared.Models; -using View_by_Distance.Shared.Models.Properties; using View_by_Distance.Shared.Models.Stateless.Methods; namespace View_by_Distance.Metadata.Models; @@ -12,47 +11,43 @@ namespace View_by_Distance.Metadata.Models; public class A_Metadata { - private readonly IMetadataConfiguration _AAConfiguration; - private readonly bool _PropertiesChangedForMetadata; - private readonly bool _ForceMetadataLastWriteTimeToCreationTime; + private readonly MetadataConfiguration _MetadataConfiguration; private readonly IReadOnlyDictionary _FileGroups; - public A_Metadata(IMetadataConfiguration aAConfiguration, bool forceMetadataLastWriteTimeToCreationTime, bool propertiesChangedForMetadata) + public A_Metadata(MetadataConfiguration metadataConfiguration) { - _AAConfiguration = aAConfiguration; - _PropertiesChangedForMetadata = propertiesChangedForMetadata; - _ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime; - string bResultsFullGroupDirectory = IResult.GetResultsFullGroupDirectory(_AAConfiguration, - nameof(A_Metadata), - string.Empty, - includeResizeGroup: false, - includeModel: false, - includePredictorModel: false); - _FileGroups = IPath.GetKeyValuePairs(aAConfiguration, bResultsFullGroupDirectory, [aAConfiguration.ResultSingleton]); + _MetadataConfiguration = metadataConfiguration; + string bResultsFullGroupDirectory = IResult.GetResultsFullGroupDirectory(metadataConfiguration.ResultConfiguration, + nameof(A_Metadata), + string.Empty, + includeResizeGroup: false, + includeModel: false, + includePredictorModel: false); + _FileGroups = IPath.GetKeyValuePairs(metadataConfiguration.ResultConfiguration, bResultsFullGroupDirectory, [metadataConfiguration.ResultConfiguration.ResultSingleton]); } public FileInfo GetFileInfo(FilePath filePath) { FileInfo result; - (_, int directoryIndex) = IPath.GetDirectoryNameAndIndex(_AAConfiguration.ResultAllInOneSubdirectoryLength, filePath.Name); - result = new(Path.Combine(_FileGroups[_AAConfiguration.ResultSingleton][directoryIndex], $"{filePath.NameWithoutExtension}{filePath.ExtensionLowered}.json")); + (_, int directoryIndex) = IPath.GetDirectoryNameAndIndex(_MetadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength, filePath.Name); + result = new(Path.Combine(_FileGroups[_MetadataConfiguration.ResultConfiguration.ResultSingleton][directoryIndex], $"{filePath.NameWithoutExtension}{filePath.ExtensionLowered}.json")); return result; } - public ExifDirectory GetMetadataCollection(IMetadataConfiguration metadataConfiguration, FilePath filePath, FileInfo fileInfo, DeterministicHashCode deterministicHashCode) + public ExifDirectory GetMetadataCollection(MetadataConfiguration metadataConfiguration, FilePath filePath, FileInfo fileInfo, DeterministicHashCode deterministicHashCode) { ExifDirectory? results; - if (_ForceMetadataLastWriteTimeToCreationTime && !fileInfo.Exists && File.Exists(Path.ChangeExtension(fileInfo.FullName, ".delete"))) + if (_MetadataConfiguration.ForceMetadataLastWriteTimeToCreationTime && !fileInfo.Exists && File.Exists(Path.ChangeExtension(fileInfo.FullName, ".delete"))) { File.Move(Path.ChangeExtension(fileInfo.FullName, ".delete"), fileInfo.FullName); fileInfo.Refresh(); } - if (_ForceMetadataLastWriteTimeToCreationTime && fileInfo.Exists && fileInfo.LastWriteTime != fileInfo.CreationTime) + if (_MetadataConfiguration.ForceMetadataLastWriteTimeToCreationTime && fileInfo.Exists && fileInfo.LastWriteTime != fileInfo.CreationTime) { File.SetLastWriteTime(fileInfo.FullName, fileInfo.CreationTime); fileInfo.Refresh(); } - if (_PropertiesChangedForMetadata) + if (_MetadataConfiguration.PropertiesChangedForMetadata) results = null; else if (!fileInfo.Exists) results = null; @@ -81,7 +76,7 @@ public class A_Metadata IReadOnlyList directories = ImageMetadataReader.ReadMetadata(filePath.FullName); results = Exif.Covert(filePath, deterministicHashCode, size, directories); string json = JsonSerializer.Serialize(results, ExifDirectorySourceGenerationContext.Default.ExifDirectory); - if (IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null) && _ForceMetadataLastWriteTimeToCreationTime) + if (IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null) && _MetadataConfiguration.ForceMetadataLastWriteTimeToCreationTime) { File.SetLastWriteTime(fileInfo.FullName, fileInfo.CreationTime); fileInfo.Refresh(); @@ -90,7 +85,7 @@ public class A_Metadata return results; } - public static Action SetExifDirectoryCollection(IRename rename, IMetadataConfiguration metadataConfiguration, A_Metadata metadata, List<(string, FileInfo, ExifDirectory)> exifDirectories, Action tick) + public static Action SetExifDirectoryCollection(IRename rename, MetadataConfiguration metadataConfiguration, A_Metadata metadata, List<(string, FileInfo, ExifDirectory)> exifDirectories, Action tick) { return file => { diff --git a/Metadata/Models/Binder/Configuration copy.cs b/Metadata/Models/Binder/Configuration copy.cs deleted file mode 100644 index edf8664..0000000 --- a/Metadata/Models/Binder/Configuration copy.cs +++ /dev/null @@ -1,119 +0,0 @@ -// using Microsoft.Extensions.Configuration; -// using System.Text.Json; -// using System.Text.Json.Serialization; - -// namespace View_by_Distance.Metadata.Models.Binder; - -// public class ConfigurationZ -// { - -// public string? DateGroup { get; set; } -// public string? FileNameDirectorySeparator { get; set; } -// public bool? ForcePropertyLastWriteTimeToCreationTime { get; set; } -// public string[]? IgnoreExtensions { get; set; } -// public string[]? IgnoreRulesKeyWords { get; set; } -// public int? MaxImagesInDirectoryForTopLevelFirstPass { get; set; } -// public string? ModelName { init; get; } -// public int? NumberOfJitters { init; get; } -// public int? NumberOfTimesToUpsample { init; get; } -// public int? Offset { init; get; } -// public string? Pattern { get; set; } -// public string? PersonBirthdayFormat { get; set; } -// public bool? PopulatePropertyId { get; set; } -// public string? PredictorModelName { get; set; } -// public bool? PropertiesChangedForProperty { get; set; } -// public string[]? PropertyContentCollectionFiles { get; set; } -// public string? ResultAllInOne { get; set; } -// public int? ResultAllInOneSubdirectoryLength { get; set; } -// public string? ResultCollection { get; set; } -// public string? ResultContent { get; set; } -// public string? ResultSingleton { get; set; } -// public string? RootDirectory { get; set; } -// public string[]? ValidImageFormatExtensions { get; set; } - -// public override string ToString() -// { -// string result = JsonSerializer.Serialize(this, BinderMetadataConfigurationSourceGenerationContext.Default.Configuration); -// return result; -// } - -// private static MetadataConfiguration Get(Configuration? configuration) -// { -// MetadataConfiguration result; -// if (configuration is null) throw new NullReferenceException(nameof(configuration)); -// if (configuration.DateGroup is null) throw new NullReferenceException(nameof(configuration.DateGroup)); -// if (configuration.FileNameDirectorySeparator is null) throw new NullReferenceException(nameof(configuration.FileNameDirectorySeparator)); -// if (configuration.ForcePropertyLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForcePropertyLastWriteTimeToCreationTime)); -// if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); -// if (configuration.IgnoreRulesKeyWords is null) throw new NullReferenceException(nameof(configuration.IgnoreRulesKeyWords)); -// if (configuration.MaxImagesInDirectoryForTopLevelFirstPass is null) throw new NullReferenceException(nameof(configuration.MaxImagesInDirectoryForTopLevelFirstPass)); -// // if (configuration.ModelName is null) throw new NullReferenceException(nameof(configuration.ModelName)); -// // if (configuration.NumberOfJitters is null) throw new NullReferenceException(nameof(configuration.NumberOfJitters)); -// // if (configuration.NumberOfTimesToUpsample is null) throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample)); -// if (configuration.Offset is null) throw new NullReferenceException(nameof(configuration.Offset)); ; -// if (configuration.Pattern is null) throw new NullReferenceException(nameof(configuration.Pattern)); -// if (configuration.PersonBirthdayFormat is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat)); -// if (configuration.PopulatePropertyId is null) throw new NullReferenceException(nameof(configuration.PopulatePropertyId)); -// // if (configuration.PredictorModelName is null) throw new NullReferenceException(nameof(configuration.PredictorModelName)); -// if (configuration.PropertiesChangedForProperty is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForProperty)); -// // if (configuration.PropertyContentCollectionFiles is null) throw new NullReferenceException(nameof(configuration.PropertyContentCollectionFiles)); -// if (configuration.ResultAllInOne is null) throw new NullReferenceException(nameof(configuration.ResultAllInOne)); -// if (configuration.ResultAllInOneSubdirectoryLength is null) throw new NullReferenceException(nameof(configuration.ResultAllInOneSubdirectoryLength)); -// if (configuration.ResultCollection is null) throw new NullReferenceException(nameof(configuration.ResultCollection)); -// if (configuration.ResultContent is null) throw new NullReferenceException(nameof(configuration.ResultContent)); -// if (configuration.ResultSingleton is null) throw new NullReferenceException(nameof(configuration.ResultSingleton)); -// if (configuration.RootDirectory is null) throw new NullReferenceException(nameof(configuration.RootDirectory)); -// if (configuration.ValidImageFormatExtensions is null) throw new NullReferenceException(nameof(configuration.ValidImageFormatExtensions)); -// result = new(configuration.DateGroup, -// configuration.FileNameDirectorySeparator, -// configuration.ForcePropertyLastWriteTimeToCreationTime.Value, -// configuration.IgnoreExtensions, -// configuration.IgnoreRulesKeyWords, -// configuration.MaxImagesInDirectoryForTopLevelFirstPass.Value, -// configuration.ModelName, -// configuration.NumberOfJitters, -// configuration.NumberOfTimesToUpsample, -// configuration.Offset.Value, -// configuration.Pattern, -// configuration.PersonBirthdayFormat, -// configuration.PopulatePropertyId.Value, -// configuration.PredictorModelName, -// configuration.PropertiesChangedForProperty.Value, -// configuration.PropertyContentCollectionFiles ?? [], -// configuration.ResultAllInOne, -// configuration.ResultAllInOneSubdirectoryLength.Value, -// configuration.ResultCollection, -// configuration.ResultContent, -// configuration.ResultSingleton, -// Path.GetFullPath(configuration.RootDirectory), -// configuration.ValidImageFormatExtensions); -// return result; -// } - -// public static MetadataConfiguration Get(IConfigurationRoot configurationRoot) -// { -// MetadataConfiguration result; -// #if Linux -// string environmentName = "Linux"; -// #elif OSX -// string environmentName = "OSX"; -// #elif Windows -// string environmentName = "Windows"; -// #endif -// string section = string.Concat(environmentName, ":", nameof(Configuration)); -// IConfigurationSection configurationSection = configurationRoot.GetSection(section); -// #pragma warning disable IL3050, IL2026 -// Configuration? configuration = configurationSection.Get(); -// #pragma warning restore IL3050, IL2026 -// if (configuration is null) throw new NullReferenceException(nameof(configuration)); -// result = Get(configuration); -// return result; -// } - -// } - -// [JsonSourceGenerationOptions(WriteIndented = true)] -// [JsonSerializable(typeof(Configuration))] -// internal partial class BinderMetadataConfigurationSourceGenerationContext : JsonSerializerContext -// { -// } \ No newline at end of file diff --git a/Metadata/Models/Binder/Configuration.cs b/Metadata/Models/Binder/Configuration.cs deleted file mode 100644 index 32a8376..0000000 --- a/Metadata/Models/Binder/Configuration.cs +++ /dev/null @@ -1,99 +0,0 @@ -using Microsoft.Extensions.Configuration; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace View_by_Distance.Metadata.Models.Binder; - -public class Configuration -{ - - public string? DateGroup { get; set; } - public bool? ForcePropertyLastWriteTimeToCreationTime { get; set; } - public string[]? IgnoreExtensions { get; set; } - public int? MaxImagesInDirectoryForTopLevelFirstPass { get; set; } - public string? ModelName { init; get; } - public int? NumberOfJitters { init; get; } - public int? NumberOfTimesToUpsample { init; get; } - public int? Offset { init; get; } - public bool? PopulatePropertyId { get; set; } - public string? PredictorModelName { get; set; } - public bool? PropertiesChangedForProperty { get; set; } - public string[]? PropertyContentCollectionFiles { get; set; } - public string? ResultAllInOne { get; set; } - public int? ResultAllInOneSubdirectoryLength { get; set; } - public string? ResultCollection { get; set; } - public string? ResultContent { get; set; } - public string? ResultSingleton { get; set; } - public string? RootDirectory { get; set; } - public string[]? ValidImageFormatExtensions { get; set; } - - public override string ToString() - { - string result = JsonSerializer.Serialize(this, BinderMetadataConfigurationSourceGenerationContext.Default.Configuration); - return result; - } - - private static MetadataConfiguration Get(Configuration? configuration) - { - MetadataConfiguration result; - if (configuration is null) throw new NullReferenceException(nameof(configuration)); - if (configuration.DateGroup is null) throw new NullReferenceException(nameof(configuration.DateGroup)); - if (configuration.ForcePropertyLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForcePropertyLastWriteTimeToCreationTime)); - if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); - if (configuration.MaxImagesInDirectoryForTopLevelFirstPass is null) throw new NullReferenceException(nameof(configuration.MaxImagesInDirectoryForTopLevelFirstPass)); - // if (configuration.ModelName is null) throw new NullReferenceException(nameof(configuration.ModelName)); - // if (configuration.NumberOfJitters is null) throw new NullReferenceException(nameof(configuration.NumberOfJitters)); - // if (configuration.NumberOfTimesToUpsample is null) throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample)); - if (configuration.Offset is null) throw new NullReferenceException(nameof(configuration.Offset)); ; - if (configuration.PopulatePropertyId is null) throw new NullReferenceException(nameof(configuration.PopulatePropertyId)); - // if (configuration.PredictorModelName is null) throw new NullReferenceException(nameof(configuration.PredictorModelName)); - if (configuration.PropertiesChangedForProperty is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForProperty)); - // if (configuration.PropertyContentCollectionFiles is null) throw new NullReferenceException(nameof(configuration.PropertyContentCollectionFiles)); - if (configuration.ResultAllInOne is null) throw new NullReferenceException(nameof(configuration.ResultAllInOne)); - if (configuration.ResultAllInOneSubdirectoryLength is null) throw new NullReferenceException(nameof(configuration.ResultAllInOneSubdirectoryLength)); - if (configuration.ResultCollection is null) throw new NullReferenceException(nameof(configuration.ResultCollection)); - if (configuration.ResultContent is null) throw new NullReferenceException(nameof(configuration.ResultContent)); - if (configuration.ResultSingleton is null) throw new NullReferenceException(nameof(configuration.ResultSingleton)); - if (configuration.RootDirectory is null) throw new NullReferenceException(nameof(configuration.RootDirectory)); - if (configuration.ValidImageFormatExtensions is null) throw new NullReferenceException(nameof(configuration.ValidImageFormatExtensions)); - result = new(configuration.DateGroup, - configuration.ForcePropertyLastWriteTimeToCreationTime.Value, - configuration.IgnoreExtensions, - configuration.MaxImagesInDirectoryForTopLevelFirstPass.Value, - configuration.ModelName, - configuration.NumberOfJitters, - configuration.NumberOfTimesToUpsample, - configuration.Offset.Value, - configuration.PopulatePropertyId.Value, - configuration.PredictorModelName, - configuration.PropertiesChangedForProperty.Value, - configuration.PropertyContentCollectionFiles ?? [], - configuration.ResultAllInOne, - configuration.ResultAllInOneSubdirectoryLength.Value, - configuration.ResultCollection, - configuration.ResultContent, - configuration.ResultSingleton, - Path.GetFullPath(configuration.RootDirectory), - configuration.ValidImageFormatExtensions); - return result; - } - - public static MetadataConfiguration Get(IConfigurationRoot configurationRoot) - { - MetadataConfiguration result; - IConfigurationSection configurationSection = configurationRoot.GetSection(nameof(Configuration)); -#pragma warning disable IL3050, IL2026 - Configuration? configuration = configurationSection.Get(); -#pragma warning restore IL3050, IL2026 - if (configuration is null) throw new NullReferenceException(nameof(configuration)); - result = Get(configuration); - return result; - } - -} - -[JsonSourceGenerationOptions(WriteIndented = true)] -[JsonSerializable(typeof(Configuration))] -internal partial class BinderMetadataConfigurationSourceGenerationContext : JsonSerializerContext -{ -} \ No newline at end of file diff --git a/Metadata/Models/Binder/MetadataConfiguration.cs b/Metadata/Models/Binder/MetadataConfiguration.cs new file mode 100644 index 0000000..5623369 --- /dev/null +++ b/Metadata/Models/Binder/MetadataConfiguration.cs @@ -0,0 +1,74 @@ +using Microsoft.Extensions.Configuration; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace View_by_Distance.Metadata.Models.Binder; + +public class MetadataConfiguration +{ + + public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; } + public int? Offset { get; set; } + public bool? PropertiesChangedForMetadata { get; set; } + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, BinderMetadataConfigurationSourceGenerationContext.Default.MetadataConfiguration); + return result; + } + + private static void PreVerify(IConfigurationRoot configurationRoot, MetadataConfiguration? configuration) + { + if (configuration?.ForceMetadataLastWriteTimeToCreationTime is null) + { + foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers) + { + if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider) + continue; + if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider) + continue; + if (!physicalFileProvider.Root.Contains("UserSecrets")) + continue; + throw new NotSupportedException(physicalFileProvider.Root); + } + } + } + + private static void Verify(MetadataConfiguration _) + { + } + + private static Shared.Models.MetadataConfiguration Get(MetadataConfiguration? configuration, Shared.Models.ResultConfiguration resultConfiguration) + { + Shared.Models.MetadataConfiguration result; + if (configuration is null) throw new NullReferenceException(nameof(configuration)); + if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime)); + if (configuration.Offset is null) throw new NullReferenceException(nameof(configuration.Offset)); + if (configuration.PropertiesChangedForMetadata is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata)); + Verify(configuration); + result = new(resultConfiguration, + configuration.ForceMetadataLastWriteTimeToCreationTime.Value, + configuration.Offset.Value, + configuration.PropertiesChangedForMetadata.Value); + return result; + } + + public static Shared.Models.MetadataConfiguration Get(IConfigurationRoot configurationRoot, Shared.Models.ResultConfiguration resultConfiguration) + { + Shared.Models.MetadataConfiguration result; + IConfigurationSection configurationSection = configurationRoot.GetSection(nameof(Shared.Models.MetadataConfiguration)); +#pragma warning disable IL3050, IL2026 + MetadataConfiguration? configuration = configurationSection.Get(); +#pragma warning restore IL3050, IL2026 + PreVerify(configurationRoot, configuration); + result = Get(configuration, resultConfiguration); + return result; + } + +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(MetadataConfiguration))] +internal partial class BinderMetadataConfigurationSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/Metadata/Models/Binder/ResultConfiguration.cs b/Metadata/Models/Binder/ResultConfiguration.cs new file mode 100644 index 0000000..be2a553 --- /dev/null +++ b/Metadata/Models/Binder/ResultConfiguration.cs @@ -0,0 +1,99 @@ +using Microsoft.Extensions.Configuration; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace View_by_Distance.Metadata.Models.Binder; + +public class ResultConfiguration +{ + + public string? DateGroup { get; set; } + public string? ModelName { get; set; } + public int? NumberOfJitters { get; set; } + public int? NumberOfTimesToUpsample { get; set; } + public string? PredictorModelName { get; set; } + public string? ResultAllInOne { get; set; } + public int? ResultAllInOneSubdirectoryLength { get; set; } + public string? ResultCollection { get; set; } + public string? ResultContent { get; set; } + public string? RootDirectory { get; set; } + public string? ResultSingleton { get; set; } + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, BinderResultConfigurationSourceGenerationContext.Default.ResultConfiguration); + return result; + } + + private static void PreVerify(IConfigurationRoot configurationRoot, ResultConfiguration? configuration) + { + if (configuration?.DateGroup is null) + { + foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers) + { + if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider) + continue; + if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider) + continue; + if (!physicalFileProvider.Root.Contains("UserSecrets")) + continue; + throw new NotSupportedException(physicalFileProvider.Root); + } + } + } + + public static void Verify(ResultConfiguration configuration, bool requireRootDirectoryExists) + { + if (string.IsNullOrEmpty(configuration.DateGroup)) throw new NullReferenceException(nameof(configuration.DateGroup)); + if (string.IsNullOrEmpty(configuration.RootDirectory) || (requireRootDirectoryExists && !Directory.Exists(configuration.RootDirectory))) throw new NullReferenceException(nameof(configuration.RootDirectory)); + } + + private static Shared.Models.ResultConfiguration Get(ResultConfiguration? configuration, bool requireRootDirectoryExists) + { + Shared.Models.ResultConfiguration result; + if (configuration is null) throw new NullReferenceException(nameof(configuration)); + if (configuration.DateGroup is null) throw new NullReferenceException(nameof(configuration.DateGroup)); + // if (configuration.ModelName is null) throw new NullReferenceException(nameof(configuration.ModelName)); + // if (configuration.NumberOfJitters is null) throw new NullReferenceException(nameof(configuration.NumberOfJitters)); + // if (configuration.NumberOfTimesToUpsample is null) throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample)); + // if (configuration.PredictorModelName is null) throw new NullReferenceException(nameof(configuration.PredictorModelName)); + if (configuration.ResultAllInOne is null) throw new NullReferenceException(nameof(configuration.ResultAllInOne)); + if (configuration.ResultAllInOneSubdirectoryLength is null) throw new NullReferenceException(nameof(configuration.ResultAllInOneSubdirectoryLength)); + if (configuration.ResultCollection is null) throw new NullReferenceException(nameof(configuration.ResultCollection)); + if (configuration.ResultContent is null) throw new NullReferenceException(nameof(configuration.ResultContent)); + if (configuration.RootDirectory is null) throw new NullReferenceException(nameof(configuration.RootDirectory)); + if (configuration.ResultSingleton is null) throw new NullReferenceException(nameof(configuration.ResultSingleton)); + Verify(configuration, requireRootDirectoryExists); + result = new(configuration.DateGroup, + configuration.ModelName, + configuration.NumberOfJitters, + configuration.NumberOfTimesToUpsample, + configuration.PredictorModelName, + configuration.ResultAllInOne, + configuration.ResultAllInOneSubdirectoryLength.Value, + configuration.ResultCollection, + configuration.ResultContent, + Path.GetFullPath(configuration.RootDirectory), + configuration.ResultSingleton); + return result; + } + + public static Shared.Models.ResultConfiguration Get(IConfigurationRoot configurationRoot, bool requireRootDirectoryExists) + { + Shared.Models.ResultConfiguration result; + IConfigurationSection configurationSection = configurationRoot.GetSection(nameof(Shared.Models.ResultConfiguration)); +#pragma warning disable IL3050, IL2026 + ResultConfiguration? configuration = configurationSection.Get(); +#pragma warning restore IL3050, IL2026 + PreVerify(configurationRoot, configuration); + result = Get(configuration, requireRootDirectoryExists); + return result; + } + +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(ResultConfiguration))] +internal partial class BinderResultConfigurationSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/Metadata/Models/MetadataConfiguration.cs b/Metadata/Models/MetadataConfiguration.cs deleted file mode 100644 index 3552e2c..0000000 --- a/Metadata/Models/MetadataConfiguration.cs +++ /dev/null @@ -1,109 +0,0 @@ -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 -{ -} \ No newline at end of file diff --git a/Rename/Models/AppSettings.cs b/Rename/Models/AppSettings.cs index 60b95a8..0ff0b44 100644 --- a/Rename/Models/AppSettings.cs +++ b/Rename/Models/AppSettings.cs @@ -4,7 +4,8 @@ using System.Text.Json.Serialization; namespace View_by_Distance.Rename.Models; public record AppSettings(string Company, - int MaxDegreeOfParallelism) + int MaxDegreeOfParallelism, + bool RequireRootDirectoryExists) { public override string ToString() diff --git a/Rename/Models/Binder/AppSettings.cs b/Rename/Models/Binder/AppSettings.cs index c18b5cb..02b9769 100644 --- a/Rename/Models/Binder/AppSettings.cs +++ b/Rename/Models/Binder/AppSettings.cs @@ -9,6 +9,7 @@ public class AppSettings public string? Company { get; set; } public int? MaxDegreeOfParallelism { get; set; } + public bool? RequireRootDirectoryExists { get; set; } public override string ToString() { @@ -16,23 +17,8 @@ public class AppSettings return result; } - private static Models.AppSettings Get(AppSettings? appSettings) + private static void PreVerify(IConfigurationRoot configurationRoot, AppSettings? appSettings) { - Models.AppSettings result; - if (appSettings?.Company is null) throw new NullReferenceException(nameof(appSettings.Company)); - if (appSettings?.MaxDegreeOfParallelism is null) throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism)); - result = new( - appSettings.Company, - appSettings.MaxDegreeOfParallelism.Value); - return result; - } - - public static Models.AppSettings Get(IConfigurationRoot configurationRoot) - { - Models.AppSettings result; -#pragma warning disable IL3050, IL2026 - AppSettings? appSettings = configurationRoot.Get(); -#pragma warning restore IL3050, IL2026 if (appSettings?.Company is null) { foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers) @@ -46,6 +32,33 @@ public class AppSettings throw new NotSupportedException(physicalFileProvider.Root); } } + } + + private static void Verify(AppSettings _) + { + } + + private static Models.AppSettings Get(AppSettings? appSettings) + { + Models.AppSettings result; + if (appSettings is null) throw new NullReferenceException(nameof(appSettings)); + if (appSettings.Company is null) throw new NullReferenceException(nameof(appSettings.Company)); + if (appSettings.MaxDegreeOfParallelism is null) throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism)); + if (appSettings.RequireRootDirectoryExists is null) throw new NullReferenceException(nameof(appSettings.RequireRootDirectoryExists)); + Verify(appSettings); + result = new(appSettings.Company, + appSettings.MaxDegreeOfParallelism.Value, + appSettings.RequireRootDirectoryExists.Value); + return result; + } + + public static Models.AppSettings Get(IConfigurationRoot configurationRoot) + { + Models.AppSettings result; +#pragma warning disable IL3050, IL2026 + AppSettings? appSettings = configurationRoot.Get(); +#pragma warning restore IL3050, IL2026 + PreVerify(configurationRoot, appSettings); result = Get(appSettings); return result; } diff --git a/Rename/Models/Binder/Configuration.cs b/Rename/Models/Binder/Configuration.cs deleted file mode 100644 index e4e2057..0000000 --- a/Rename/Models/Binder/Configuration.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Microsoft.Extensions.Configuration; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace View_by_Distance.Rename.Models.Binder; - -public class Configuration -{ - - public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; } - public string[]? IgnoreExtensions { get; set; } - public string? PersonBirthdayFormat { get; set; } - public bool? PropertiesChangedForMetadata { get; set; } - - public override string ToString() - { - string result = JsonSerializer.Serialize(this, BinderConfigurationSourceGenerationContext.Default.Configuration); - return result; - } - - private static Models.Configuration Get(Configuration? configuration, Metadata.Models.MetadataConfiguration metadataConfiguration) - { - Models.Configuration result; - if (configuration is null) throw new NullReferenceException(nameof(configuration)); - if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime)); - if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); - if (configuration.PersonBirthdayFormat is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat)); - if (configuration.PropertiesChangedForMetadata is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata)); - result = new(metadataConfiguration, - configuration.ForceMetadataLastWriteTimeToCreationTime.Value, - configuration.IgnoreExtensions, - configuration.PersonBirthdayFormat, - configuration.PropertiesChangedForMetadata.Value); - return result; - } - - public static Models.Configuration Get(IConfigurationRoot configurationRoot, Metadata.Models.MetadataConfiguration metadataConfiguration) - { - Models.Configuration result; - IConfigurationSection configurationSection = configurationRoot.GetSection(nameof(Configuration)); -#pragma warning disable IL3050, IL2026 - Configuration? configuration = configurationSection.Get(); -#pragma warning restore IL3050, IL2026 - result = Get(configuration, metadataConfiguration); - return result; - } - -} - -[JsonSourceGenerationOptions(WriteIndented = true)] -[JsonSerializable(typeof(Configuration))] -internal partial class BinderConfigurationSourceGenerationContext : JsonSerializerContext -{ -} \ No newline at end of file diff --git a/Rename/Models/Binder/RenameConfiguration.cs b/Rename/Models/Binder/RenameConfiguration.cs new file mode 100644 index 0000000..f99db57 --- /dev/null +++ b/Rename/Models/Binder/RenameConfiguration.cs @@ -0,0 +1,80 @@ +using Microsoft.Extensions.Configuration; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace View_by_Distance.Rename.Models.Binder; + +public class RenameConfiguration +{ + + public int? EpicYear { get; set; } + public string[]? IgnoreExtensions { get; set; } + public string[]? IgnoreRulesKeyWords { get; set; } + public string[]? ValidImageFormatExtensions { get; set; } + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, BinderConfigurationSourceGenerationContext.Default.RenameConfiguration); + return result; + } + + private static void PreVerify(IConfigurationRoot configurationRoot, RenameConfiguration? configuration) + { + if (configuration?.EpicYear is null) + { + foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers) + { + if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider) + continue; + if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider) + continue; + if (!physicalFileProvider.Root.Contains("UserSecrets")) + continue; + throw new NotSupportedException(physicalFileProvider.Root); + } + } + } + + private static void Verify(RenameConfiguration configuration) + { + if (configuration.IgnoreExtensions is null || configuration.IgnoreExtensions.Length == 0) throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); + if (configuration.IgnoreRulesKeyWords is null || configuration.IgnoreRulesKeyWords.Length == 0) throw new NullReferenceException(nameof(configuration.IgnoreRulesKeyWords)); + if (configuration.ValidImageFormatExtensions is null || configuration.ValidImageFormatExtensions.Length == 0) throw new NullReferenceException(nameof(configuration.ValidImageFormatExtensions)); + } + + private static Models.RenameConfiguration Get(RenameConfiguration? configuration, Shared.Models.MetadataConfiguration metadataConfiguration) + { + Models.RenameConfiguration result; + if (configuration is null) throw new NullReferenceException(nameof(configuration)); + if (configuration.EpicYear is null) throw new NullReferenceException(nameof(configuration.EpicYear)); + if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); + if (configuration.IgnoreRulesKeyWords is null) throw new NullReferenceException(nameof(configuration.IgnoreRulesKeyWords)); + if (configuration.ValidImageFormatExtensions is null) throw new NullReferenceException(nameof(configuration.ValidImageFormatExtensions)); + Verify(configuration); + result = new(metadataConfiguration, + configuration.EpicYear.Value, + configuration.IgnoreExtensions, + configuration.IgnoreRulesKeyWords, + configuration.ValidImageFormatExtensions); + return result; + } + + public static Models.RenameConfiguration Get(IConfigurationRoot configurationRoot, Shared.Models.MetadataConfiguration metadataConfiguration) + { + Models.RenameConfiguration result; + IConfigurationSection configurationSection = configurationRoot.GetSection(nameof(RenameConfiguration)); +#pragma warning disable IL3050, IL2026 + RenameConfiguration? configuration = configurationSection.Get(); +#pragma warning restore IL3050, IL2026 + PreVerify(configurationRoot, configuration); + result = Get(configuration, metadataConfiguration); + return result; + } + +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(RenameConfiguration))] +internal partial class BinderConfigurationSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/Rename/Models/Configuration.cs b/Rename/Models/Configuration.cs deleted file mode 100644 index 29d27d9..0000000 --- a/Rename/Models/Configuration.cs +++ /dev/null @@ -1,26 +0,0 @@ - -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace View_by_Distance.Rename.Models; - -public record Configuration(Metadata.Models.MetadataConfiguration MetadataConfiguration, - bool ForceMetadataLastWriteTimeToCreationTime, - string[] IgnoreExtensions, - string PersonBirthdayFormat, - bool PropertiesChangedForMetadata) -{ - - public override string ToString() - { - string result = JsonSerializer.Serialize(this, ConfigurationSourceGenerationContext.Default.Configuration); - return result; - } - -} - -[JsonSourceGenerationOptions(WriteIndented = true)] -[JsonSerializable(typeof(Configuration))] -internal partial class ConfigurationSourceGenerationContext : JsonSerializerContext -{ -} \ No newline at end of file diff --git a/Rename/Models/RenameConfiguration.cs b/Rename/Models/RenameConfiguration.cs new file mode 100644 index 0000000..7c91894 --- /dev/null +++ b/Rename/Models/RenameConfiguration.cs @@ -0,0 +1,26 @@ + +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace View_by_Distance.Rename.Models; + +public record RenameConfiguration(Shared.Models.MetadataConfiguration MetadataConfiguration, + int EpicYear, + string[] IgnoreExtensions, + string[] IgnoreRulesKeyWords, + string[] ValidImageFormatExtensions) +{ + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, RenameConfigurationSourceGenerationContext.Default.RenameConfiguration); + return result; + } + +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(RenameConfiguration))] +internal partial class RenameConfigurationSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/Rename/Rename.cs b/Rename/Rename.cs index 9b90b31..2333483 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -20,9 +20,7 @@ public class Rename : IRename private record Record(DateTime DateTime, ExifDirectory ExifDirectory, string File, string JsonFile); private readonly AppSettings _AppSettings; - private readonly Configuration _Configuration; - private readonly IConfigurationRoot _ConfigurationRoot; - private readonly MetadataConfiguration _MetadataConfiguration; + private readonly RenameConfiguration _RenameConfiguration; public Rename(List args, ILogger? logger, IConfigurationRoot configurationRoot, AppSettings appSettings, bool isSilent, IConsole console) { @@ -34,15 +32,12 @@ public class Rename : IRename throw new NullReferenceException(nameof(console)); _AppSettings = appSettings; long ticks = DateTime.Now.Ticks; - _ConfigurationRoot = configurationRoot; - MetadataConfiguration metadataConfiguration = Metadata.Models.Binder.Configuration.Get(configurationRoot); - Configuration configuration = Models.Binder.Configuration.Get(configurationRoot, metadataConfiguration); - _MetadataConfiguration = metadataConfiguration; - _Configuration = configuration; - DirectoryInfo directoryInfo = new(Path.GetFullPath(metadataConfiguration.RootDirectory)); + ResultConfiguration resultConfiguration = Metadata.Models.Binder.ResultConfiguration.Get(configurationRoot, appSettings.RequireRootDirectoryExists); + MetadataConfiguration metadataConfiguration = Metadata.Models.Binder.MetadataConfiguration.Get(configurationRoot, resultConfiguration); + RenameConfiguration renameConfiguration = Models.Binder.RenameConfiguration.Get(configurationRoot, metadataConfiguration); + _RenameConfiguration = renameConfiguration; + DirectoryInfo directoryInfo = new(Path.GetFullPath(resultConfiguration.RootDirectory)); logger?.LogInformation("{RootDirectory}", directoryInfo.FullName); - MetadataConfiguration.Verify(metadataConfiguration, requireExist: false); - Verify(); ReadOnlyCollection exifDirectories = GetExifDirectoryCollection(directoryInfo); ReadOnlyCollection toDoCollection = GetToDoCollection(logger, ticks, exifDirectories); ReadOnlyCollection lines = RenameFilesInDirectories(toDoCollection); @@ -53,25 +48,13 @@ public class Rename : IRename } } - private void Verify() - { - if (_AppSettings is null) - throw new NullReferenceException(nameof(_AppSettings)); - if (_Configuration is null) - throw new NullReferenceException(nameof(_Configuration)); - if (_ConfigurationRoot is null) - throw new NullReferenceException(nameof(_ConfigurationRoot)); - if (_MetadataConfiguration is null) - throw new NullReferenceException(nameof(_MetadataConfiguration)); - } - (ReadOnlyCollection, FilePath?) IRename.ConvertAndGetFfmpegFiles(FilePath filePath) { List results = []; FilePath? result; bool isIgnoreExtension; - bool isValidImageFormatExtension = _MetadataConfiguration.ValidImageFormatExtensions.Contains(filePath.ExtensionLowered); - isIgnoreExtension = isValidImageFormatExtension && _MetadataConfiguration.IgnoreExtensions.Contains(filePath.ExtensionLowered); + bool isValidImageFormatExtension = _RenameConfiguration.ValidImageFormatExtensions.Contains(filePath.ExtensionLowered); + isIgnoreExtension = isValidImageFormatExtension && _RenameConfiguration.IgnoreExtensions.Contains(filePath.ExtensionLowered); if (!isIgnoreExtension && isValidImageFormatExtension) result = null; else @@ -85,11 +68,11 @@ public class Rename : IRename results.AddRange(Directory.GetFiles(filePath.DirectoryName, $"{filePath.Name}-*.jpg", SearchOption.TopDirectoryOnly)); if (results.Count == 0) throw new Exception(); - result = IId.GetFilePath(_MetadataConfiguration, results[0]); + result = IId.GetFilePath(_RenameConfiguration.MetadataConfiguration, results[0]); if (!result.Name.EndsWith("-0001.jpg")) throw new Exception(); - isValidImageFormatExtension = _MetadataConfiguration.ValidImageFormatExtensions.Contains(result.ExtensionLowered); - isIgnoreExtension = isValidImageFormatExtension && _MetadataConfiguration.IgnoreExtensions.Contains(result.ExtensionLowered); + isValidImageFormatExtension = _RenameConfiguration.ValidImageFormatExtensions.Contains(result.ExtensionLowered); + isIgnoreExtension = isValidImageFormatExtension && _RenameConfiguration.IgnoreExtensions.Contains(result.ExtensionLowered); if (isIgnoreExtension || !isValidImageFormatExtension) throw new Exception(); if (result.DirectoryName is null) @@ -143,7 +126,7 @@ public class Rename : IRename DeterministicHashCode deterministicHashCode; foreach (string file in files) { - filePath = IId.GetFilePath(_MetadataConfiguration, file); + filePath = IId.GetFilePath(_RenameConfiguration.MetadataConfiguration, file); if (filePath.ExtensionLowered is ".paddedId" or ".lsv") continue; if (files.Contains($"{filePath.FullName}.paddedId")) @@ -158,7 +141,7 @@ public class Rename : IRename deterministicHashCode = new(null, filePath.Id, null); else deterministicHashCode = rename.GetDeterministicHashCode(filePath); - exifDirectory = metadata.GetMetadataCollection(_MetadataConfiguration, filePath, fileInfo, deterministicHashCode); + exifDirectory = metadata.GetMetadataCollection(_RenameConfiguration.MetadataConfiguration, filePath, fileInfo, deterministicHashCode); exifDirectories.Add(new(file, fileInfo, exifDirectory)); foreach (string ffmpegFile in ffmpegFiles) File.Delete(ffmpegFile); @@ -185,14 +168,14 @@ public class Rename : IRename List<(string, FileInfo, ExifDirectory)> exifDirectories = []; int appSettingsMaxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism; IEnumerable files = Directory.EnumerateFiles(directoryInfo.FullName, "*", SearchOption.AllDirectories); - A_Metadata metadata = new(_MetadataConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata); + A_Metadata metadata = new(_RenameConfiguration.MetadataConfiguration); if (appSettingsMaxDegreeOfParallelism == 1) GetExifDirectoryCollection(rename, exifDirectories, files, metadata); else { ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = appSettingsMaxDegreeOfParallelism }; ProgressBar progressBar = new(123000, "EnumerateFiles load", new ProgressBarOptions() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }); - files.AsParallel().ForAll(A_Metadata.SetExifDirectoryCollection(rename, _MetadataConfiguration, metadata, exifDirectories, () => progressBar.Tick())); + files.AsParallel().ForAll(A_Metadata.SetExifDirectoryCollection(rename, _RenameConfiguration.MetadataConfiguration, metadata, exifDirectories, () => progressBar.Tick())); if (progressBar.CurrentTick != exifDirectories.Count) throw new NotSupportedException(); } @@ -241,7 +224,7 @@ public class Rename : IRename jsonFileDirectory = Path.GetDirectoryName(record.JsonFile) ?? throw new Exception(); checkFileExtension = fileHolder.ExtensionLowered == jpeg ? jpg : fileHolder.ExtensionLowered; seasonDirectory = Path.Combine(fileHolder.DirectoryName, $"{record.DateTime.Year}.{season} {seasonName}"); - paddedId = IId.GetPaddedId(intMinValueLength, _MetadataConfiguration.Offset + i, record.ExifDirectory.Id.Value); + paddedId = IId.GetPaddedId(intMinValueLength, _RenameConfiguration.MetadataConfiguration.Offset + i, record.ExifDirectory.Id.Value); checkFile = Path.Combine(seasonDirectory, $"{paddedId}{checkFileExtension}"); if (checkFile == fileHolder.FullName) continue; diff --git a/Shared/Models/MetadataConfiguration.cs b/Shared/Models/MetadataConfiguration.cs new file mode 100644 index 0000000..8b96c5a --- /dev/null +++ b/Shared/Models/MetadataConfiguration.cs @@ -0,0 +1,24 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace View_by_Distance.Shared.Models; + +public record MetadataConfiguration(ResultConfiguration ResultConfiguration, + bool ForceMetadataLastWriteTimeToCreationTime, + int Offset, + bool PropertiesChangedForMetadata) +{ + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, MetadataConfigurationSourceGenerationContext.Default.MetadataConfiguration); + return result; + } + +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(MetadataConfiguration))] +internal partial class MetadataConfigurationSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/Shared/Models/Properties/IMetadataConfiguration.cs b/Shared/Models/Properties/IMetadataConfiguration.cs deleted file mode 100644 index d843bfb..0000000 --- a/Shared/Models/Properties/IMetadataConfiguration.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace View_by_Distance.Shared.Models.Properties; - -public interface IMetadataConfiguration -{ - - public string DateGroup { init; get; } - public string[] IgnoreExtensions { 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; } - public string? ModelName { get; } - public int? NumberOfJitters { get; } - public int? NumberOfTimesToUpsample { get; } - public int Offset { init; get; } - public string? PredictorModelName { get; } - public string RootDirectory { get; } - -} \ No newline at end of file diff --git a/Shared/Models/Properties/IZZConfiguration.cs b/Shared/Models/Properties/IZZConfiguration.cs deleted file mode 100644 index 72aaae7..0000000 --- a/Shared/Models/Properties/IZZConfiguration.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace View_by_Distance.Shared.Models.Properties; - -public interface IZZConfiguration : IMetadataConfiguration -{ - - public string[] IgnoreRulesKeyWords { init; get; } - public string FileNameDirectorySeparator { init; get; } - public string PersonBirthdayFormat { init; get; } - public string Pattern { init; get; } - -} \ No newline at end of file diff --git a/Shared/Models/ResultConfiguration.cs b/Shared/Models/ResultConfiguration.cs new file mode 100644 index 0000000..60f82f2 --- /dev/null +++ b/Shared/Models/ResultConfiguration.cs @@ -0,0 +1,31 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace View_by_Distance.Shared.Models; + +public record ResultConfiguration(string DateGroup, + string? ModelName, + int? NumberOfJitters, + int? NumberOfTimesToUpsample, + string? PredictorModelName, + string ResultAllInOne, + int ResultAllInOneSubdirectoryLength, + string ResultCollection, + string ResultContent, + string RootDirectory, + string ResultSingleton) +{ + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, ResultConfigurationSourceGenerationContext.Default.ResultConfiguration); + return result; + } + +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(ResultConfiguration))] +internal partial class ResultConfigurationSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/Shared/Models/Stateless/Id.cs b/Shared/Models/Stateless/Id.cs index 77a3ead..19b8da2 100644 --- a/Shared/Models/Stateless/Id.cs +++ b/Shared/Models/Stateless/Id.cs @@ -1,4 +1,3 @@ -using View_by_Distance.Shared.Models.Properties; using View_by_Distance.Shared.Models.Stateless.Methods; namespace View_by_Distance.Shared.Models.Stateless; @@ -29,7 +28,7 @@ internal abstract class Id return result; } - internal static FilePath GetFilePath(IMetadataConfiguration configuration, string file) + internal static FilePath GetFilePath(MetadataConfiguration metadataConfiguration, string file) { FilePath result; int? id; @@ -39,8 +38,8 @@ internal abstract class Id string fileName = Path.GetFileName(file); string fileExtensionLowered = Path.GetExtension(file).ToLower(); string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file); - short sortOrderOnlyLengthIndex = IId.GetSortOrderOnlyLengthIndex(configuration.Offset); string fileDirectoryName = Path.GetDirectoryName(file) ?? throw new NullReferenceException(); + short sortOrderOnlyLengthIndex = IId.GetSortOrderOnlyLengthIndex(metadataConfiguration.Offset); bool nameWithoutExtensionIsIdFormat = IId.NameWithoutExtensionIsIdFormat(fileNameWithoutExtension); bool nameWithoutExtensionIsPaddedIdFormat = IId.NameWithoutExtensionIsPaddedIdFormat(fileNameWithoutExtension, sortOrderOnlyLengthIndex); if (!nameWithoutExtensionIsIdFormat && !nameWithoutExtensionIsPaddedIdFormat) diff --git a/Shared/Models/Stateless/Methods/IId.cs b/Shared/Models/Stateless/Methods/IId.cs index 4999f7f..507cdfd 100644 --- a/Shared/Models/Stateless/Methods/IId.cs +++ b/Shared/Models/Stateless/Methods/IId.cs @@ -1,5 +1,3 @@ -using View_by_Distance.Shared.Models.Properties; - namespace View_by_Distance.Shared.Models.Stateless.Methods; public interface IId @@ -38,10 +36,10 @@ public interface IId static FilePath GetFilePath(FilePath filePath, string file) => Id.GetFilePath(filePath, file); - FilePath TestStatic_GetFilePath(IMetadataConfiguration configuration, string file) => - GetFilePath(configuration, file); - static FilePath GetFilePath(IMetadataConfiguration configuration, string file) => - Id.GetFilePath(configuration, file); + FilePath TestStatic_GetFilePath(MetadataConfiguration metadataConfiguration, string file) => + GetFilePath(metadataConfiguration, file); + static FilePath GetFilePath(MetadataConfiguration metadataConfiguration, string file) => + Id.GetFilePath(metadataConfiguration, file); int TestStatic_GetDeterministicHashCode(byte[] value) => GetDeterministicHashCode(value); diff --git a/Shared/Models/Stateless/Methods/IPath.cs b/Shared/Models/Stateless/Methods/IPath.cs index 8b6f2b5..66df479 100644 --- a/Shared/Models/Stateless/Methods/IPath.cs +++ b/Shared/Models/Stateless/Methods/IPath.cs @@ -1,5 +1,3 @@ -using View_by_Distance.Shared.Models.Properties; - namespace View_by_Distance.Shared.Models.Stateless.Methods; public interface IPath @@ -66,9 +64,9 @@ public interface IPath static (string, int) GetDirectoryNameAndIndex(int resultAllInOneSubdirectoryLength, string fileName) => XPath.GetDirectoryNameAndIndex(resultAllInOneSubdirectoryLength, fileName); - Dictionary TestStatic_GetKeyValuePairs(IMetadataConfiguration aAConfiguration, string? resultsFullGroupDirectory, string[]? directories) => - GetKeyValuePairs(aAConfiguration, resultsFullGroupDirectory, directories); - static Dictionary GetKeyValuePairs(IMetadataConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? directories) => - XPath.GetKeyValuePairs(propertyConfiguration, resultsFullGroupDirectory, directories); + Dictionary TestStatic_GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? directories) => + GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, directories); + static Dictionary GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? directories) => + XPath.GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, directories); } \ No newline at end of file diff --git a/Shared/Models/Stateless/Methods/IResult.cs b/Shared/Models/Stateless/Methods/IResult.cs index 8fca437..f90abd0 100644 --- a/Shared/Models/Stateless/Methods/IResult.cs +++ b/Shared/Models/Stateless/Methods/IResult.cs @@ -1,48 +1,46 @@ -using View_by_Distance.Shared.Models.Properties; - namespace View_by_Distance.Shared.Models.Stateless.Methods; public interface IResult { - string TestStatic_GetRelativePath(IMetadataConfiguration aAConfiguration, string path) => - GetRelativePath(aAConfiguration, path); - static string GetRelativePath(IMetadataConfiguration aAConfiguration, string path) => - XResult.GetRelativePath(aAConfiguration, path); + string TestStatic_GetRelativePath(ResultConfiguration resultConfiguration, string path) => + GetRelativePath(resultConfiguration, path); + static string GetRelativePath(ResultConfiguration resultConfiguration, string path) => + XResult.GetRelativePath(resultConfiguration, path); - string TestStatic_GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description, bool create) => - GetResultsGroupDirectory(aAConfiguration, description, create); - static string GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description, bool create) => - XResult.GetResultsGroupDirectory(aAConfiguration, description, create); + string TestStatic_GetResultsGroupDirectory(ResultConfiguration resultConfiguration, string description, bool create) => + GetResultsGroupDirectory(resultConfiguration, description, create); + static string GetResultsGroupDirectory(ResultConfiguration resultConfiguration, string description, bool create) => + XResult.GetResultsGroupDirectory(resultConfiguration, description, create); - string TestStatic_GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description) => - GetResultsGroupDirectory(aAConfiguration, description); - static string GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description) => - XResult.GetResultsGroupDirectory(aAConfiguration, description, create: true); + string TestStatic_GetResultsGroupDirectory(ResultConfiguration resultConfiguration, string description) => + GetResultsGroupDirectory(resultConfiguration, description); + static string GetResultsGroupDirectory(ResultConfiguration resultConfiguration, string description) => + XResult.GetResultsGroupDirectory(resultConfiguration, description, create: true); - string TestStatic_GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description) => - GetResultsDateGroupDirectory(aAConfiguration, description); - static string GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description) => - XResult.GetResultsDateGroupDirectory(aAConfiguration, description); + string TestStatic_GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description) => + GetResultsDateGroupDirectory(resultConfiguration, description); + static string GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description) => + XResult.GetResultsDateGroupDirectory(resultConfiguration, description); - string TestStatic_GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string jsonGroup) => - GetResultsDateGroupDirectory(aAConfiguration, description, jsonGroup); - static string GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string jsonGroup) => - XResult.GetResultsDateGroupDirectory(aAConfiguration, description, jsonGroup); + string TestStatic_GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description, string jsonGroup) => + GetResultsDateGroupDirectory(resultConfiguration, description, jsonGroup); + static string GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description, string jsonGroup) => + XResult.GetResultsDateGroupDirectory(resultConfiguration, description, jsonGroup); - List TestStatic_GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) => - GetDirectoryInfoCollection(aAConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted); - static List GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) => - XResult.GetDirectoryInfoCollection(aAConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted); + List TestStatic_GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) => + GetDirectoryInfoCollection(resultConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted); + static List GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) => + XResult.GetDirectoryInfoCollection(resultConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted); - string TestStatic_GetResultsFullGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) => - GetResultsFullGroupDirectory(aAConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel); - static string GetResultsFullGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) => - XResult.GetResultsFullGroupDirectory(aAConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel); + string TestStatic_GetResultsFullGroupDirectory(ResultConfiguration resultConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) => + GetResultsFullGroupDirectory(resultConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel); + static string GetResultsFullGroupDirectory(ResultConfiguration resultConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) => + XResult.GetResultsFullGroupDirectory(resultConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel); - List TestStatic_GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) => - GetDirectoryInfoCollection(aAConfiguration, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription); - static List GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) => - XResult.GetDirectoryInfoCollection(aAConfiguration, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription); + List TestStatic_GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) => + GetDirectoryInfoCollection(resultConfiguration, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription); + static List GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) => + XResult.GetDirectoryInfoCollection(resultConfiguration, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription); } \ No newline at end of file diff --git a/Shared/Models/Stateless/XPath.cs b/Shared/Models/Stateless/XPath.cs index 4818918..a51f9ca 100644 --- a/Shared/Models/Stateless/XPath.cs +++ b/Shared/Models/Stateless/XPath.cs @@ -1,5 +1,3 @@ -using View_by_Distance.Shared.Models.Properties; - namespace View_by_Distance.Shared.Models.Stateless; internal abstract class XPath @@ -283,12 +281,12 @@ internal abstract class XPath return (result, converted); } - internal static Dictionary GetKeyValuePairs(IMetadataConfiguration aAConfiguration, string? resultsFullGroupDirectory, string[]? directories) + internal static Dictionary GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? directories) { Dictionary results = []; string directory; string checkDirectory; - int converted = int.Parse($"1{new string('0', aAConfiguration.ResultAllInOneSubdirectoryLength)}"); + int converted = int.Parse($"1{new string('0', resultConfiguration.ResultAllInOneSubdirectoryLength)}"); int plusOne = converted + 1; List collection = []; if (directories is not null) @@ -303,17 +301,17 @@ internal abstract class XPath if (string.IsNullOrEmpty(key)) { if (i == converted) - checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, new('-', aAConfiguration.ResultAllInOneSubdirectoryLength))); + checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, new('-', resultConfiguration.ResultAllInOneSubdirectoryLength))); else - checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, i.ToString().PadLeft(aAConfiguration.ResultAllInOneSubdirectoryLength, '0'))); + checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, i.ToString().PadLeft(resultConfiguration.ResultAllInOneSubdirectoryLength, '0'))); } else { - directory = Path.Combine(resultsFullGroupDirectory, key, aAConfiguration.ResultAllInOne); + directory = Path.Combine(resultsFullGroupDirectory, key, resultConfiguration.ResultAllInOne); if (i == converted) - checkDirectory = Path.GetFullPath(Path.Combine(directory, new('-', aAConfiguration.ResultAllInOneSubdirectoryLength))); + checkDirectory = Path.GetFullPath(Path.Combine(directory, new('-', resultConfiguration.ResultAllInOneSubdirectoryLength))); else - checkDirectory = Path.GetFullPath(Path.Combine(directory, i.ToString().PadLeft(aAConfiguration.ResultAllInOneSubdirectoryLength, '0'))); + checkDirectory = Path.GetFullPath(Path.Combine(directory, i.ToString().PadLeft(resultConfiguration.ResultAllInOneSubdirectoryLength, '0'))); } if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); @@ -322,7 +320,7 @@ internal abstract class XPath if (!string.IsNullOrEmpty(key)) results.Add(key, collection.ToArray()); else - results.Add(aAConfiguration.ResultAllInOne, collection.ToArray()); + results.Add(resultConfiguration.ResultAllInOne, collection.ToArray()); } } return results; diff --git a/Shared/Models/Stateless/XResult.cs b/Shared/Models/Stateless/XResult.cs index 4ef53bd..3a5923d 100644 --- a/Shared/Models/Stateless/XResult.cs +++ b/Shared/Models/Stateless/XResult.cs @@ -1,39 +1,37 @@ -using View_by_Distance.Shared.Models.Properties; - namespace View_by_Distance.Shared.Models.Stateless; internal abstract class XResult { - internal static string GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string jsonGroup) + internal static string GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description, string jsonGroup) { - string result = Path.Combine(GetResultsDateGroupDirectory(aAConfiguration, description), jsonGroup); + string result = Path.Combine(GetResultsDateGroupDirectory(resultConfiguration, description), jsonGroup); if (!Directory.Exists(result)) _ = Directory.CreateDirectory(result); return result; } - internal static string GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description) + internal static string GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description) { - string result = Path.Combine(GetResultsGroupDirectory(aAConfiguration, description, create: true), aAConfiguration.DateGroup); + string result = Path.Combine(GetResultsGroupDirectory(resultConfiguration, description, create: true), resultConfiguration.DateGroup); if (!Directory.Exists(result)) _ = Directory.CreateDirectory(result); return result; } - internal static string GetRelativePath(IMetadataConfiguration aAConfiguration, string path) + internal static string GetRelativePath(ResultConfiguration resultConfiguration, string path) { - string result = Methods.IPath.GetRelativePath(path, aAConfiguration.RootDirectory.Length); + string result = Methods.IPath.GetRelativePath(path, resultConfiguration.RootDirectory.Length); return result; } - private static void CheckContent(IMetadataConfiguration aAConfiguration, string dateGroupDirectory, string contentDescription, string result) + private static void CheckContent(ResultConfiguration resultConfiguration, string dateGroupDirectory, string contentDescription, string result) { string checkDirectory; - checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultContent, aAConfiguration.ResultAllInOne); + checkDirectory = Path.Combine(dateGroupDirectory, resultConfiguration.ResultContent, resultConfiguration.ResultAllInOne); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); - string contentDirectory = new(result.Replace("<>", aAConfiguration.ResultContent)); + string contentDirectory = new(result.Replace("<>", resultConfiguration.ResultContent)); if (!Directory.Exists(contentDirectory)) _ = Directory.CreateDirectory(contentDirectory); checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("() - ", contentDescription)); @@ -41,15 +39,15 @@ internal abstract class XResult _ = Directory.CreateDirectory(checkDirectory); } - private static void CheckSingleton(IMetadataConfiguration aAConfiguration, string dateGroupDirectory, string singletonDescription, bool converted, string result) + private static void CheckSingleton(ResultConfiguration resultConfiguration, string dateGroupDirectory, string singletonDescription, bool converted, string result) { string checkDirectory; - checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultSingleton, aAConfiguration.ResultAllInOne); + checkDirectory = Path.Combine(dateGroupDirectory, resultConfiguration.ResultSingleton, resultConfiguration.ResultAllInOne); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); if (!converted) { - string singletonDirectory = new(result.Replace("<>", aAConfiguration.ResultSingleton)); + string singletonDirectory = new(result.Replace("<>", resultConfiguration.ResultSingleton)); if (!Directory.Exists(singletonDirectory)) _ = Directory.CreateDirectory(singletonDirectory); } @@ -58,14 +56,14 @@ internal abstract class XResult _ = Directory.CreateDirectory(checkDirectory); } - private static void CheckCollection(IMetadataConfiguration aAConfiguration, string dateGroupDirectory, string collectionDescription, bool converted, string result) + private static void CheckCollection(ResultConfiguration resultConfiguration, string dateGroupDirectory, string collectionDescription, bool converted, string result) { - string checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultCollection, aAConfiguration.ResultAllInOne); + string checkDirectory = Path.Combine(dateGroupDirectory, resultConfiguration.ResultCollection, resultConfiguration.ResultAllInOne); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); if (!converted) { - string collectionDirectory = new(result.Replace("<>", aAConfiguration.ResultCollection)); + string collectionDirectory = new(result.Replace("<>", resultConfiguration.ResultCollection)); if (!Directory.Exists(collectionDirectory)) _ = Directory.CreateDirectory(collectionDirectory); } @@ -74,24 +72,24 @@ internal abstract class XResult _ = Directory.CreateDirectory(checkDirectory); } - internal static string GetResultsFullGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) + internal static string GetResultsFullGroupDirectory(ResultConfiguration resultConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) { - string result = GetResultsDateGroupDirectory(aAConfiguration, description); + string result = GetResultsDateGroupDirectory(resultConfiguration, description); if (includeResizeGroup) result = Path.Combine(result, outputResolution); if (includeModel && includePredictorModel) { string modelName; string predictorModelName; - if (aAConfiguration.ModelName is null) + if (resultConfiguration.ModelName is null) modelName = Model.Hog.ToString(); else - modelName = aAConfiguration.ModelName; - if (aAConfiguration.PredictorModelName is null) + modelName = resultConfiguration.ModelName; + if (resultConfiguration.PredictorModelName is null) predictorModelName = PredictorModel.Large.ToString(); else - predictorModelName = aAConfiguration.PredictorModelName; - string dateGroupDirectory = string.Concat(outputResolution.Replace(" ", string.Empty), "-", modelName, "-", predictorModelName, "-", aAConfiguration.NumberOfJitters, "-", aAConfiguration.NumberOfTimesToUpsample); + predictorModelName = resultConfiguration.PredictorModelName; + string dateGroupDirectory = string.Concat(outputResolution.Replace(" ", string.Empty), "-", modelName, "-", predictorModelName, "-", resultConfiguration.NumberOfJitters, "-", resultConfiguration.NumberOfTimesToUpsample); result = Path.Combine(result, dateGroupDirectory); } else if (includeModel) @@ -103,35 +101,35 @@ internal abstract class XResult return result; } - internal static List GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) + internal static List GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) { List results = []; - string sourceDirectorySegment = GetRelativePath(aAConfiguration, sourceDirectory); + string sourceDirectorySegment = GetRelativePath(resultConfiguration, sourceDirectory); string result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment); if (!string.IsNullOrEmpty(contentDescription)) - CheckContent(aAConfiguration, dateGroupDirectory, contentDescription, result); + CheckContent(resultConfiguration, dateGroupDirectory, contentDescription, result); if (!string.IsNullOrEmpty(singletonDescription)) - CheckSingleton(aAConfiguration, dateGroupDirectory, singletonDescription, converted, result); + CheckSingleton(resultConfiguration, dateGroupDirectory, singletonDescription, converted, result); if (!string.IsNullOrEmpty(collectionDescription)) - CheckCollection(aAConfiguration, dateGroupDirectory, collectionDescription, converted, result); + CheckCollection(resultConfiguration, dateGroupDirectory, collectionDescription, converted, result); results.Add(result); return results; } - internal static string GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description, bool create) + internal static string GetResultsGroupDirectory(ResultConfiguration resultConfiguration, string description, bool create) { - string result = Path.Combine($"{aAConfiguration.RootDirectory}-Results", description.Replace('_', ')')); + string result = Path.Combine($"{resultConfiguration.RootDirectory}-Results", description.Replace('_', ')')); if (create && !Directory.Exists(result)) _ = Directory.CreateDirectory(result); return result; } - internal static List GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) + internal static List GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) { List results; bool converted = false; - string dateGroupDirectory = GetResultsFullGroupDirectory(aAConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel); - results = GetDirectoryInfoCollection(aAConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted); + string dateGroupDirectory = GetResultsFullGroupDirectory(resultConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel); + results = GetDirectoryInfoCollection(resultConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted); return results; }