From 42d202e287c7c05b1f716f74cab89114e49a78f9 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Sun, 22 Oct 2023 12:46:10 -0700 Subject: [PATCH] Shared.Models.Properties.IMetadataConfiguration --- .vscode/settings.json | 2 - Metadata/Models/A_Metadata.cs | 17 ++- Metadata/Models/Binder/Configuration copy.cs | 119 ++++++++++++++++ Metadata/Models/Binder/Configuration.cs | 12 -- Metadata/Models/MetadataConfiguration copy.cs | 127 ++++++++++++++++++ Metadata/Models/MetadataConfiguration.cs | 88 +++++------- Rename/AA.Rename.csproj | 1 + Rename/Rename.cs | 76 +++++++++-- Shared/Models/NameWithoutExtension.cs | 24 ++++ ...iguration.cs => IMetadataConfiguration.cs} | 4 +- Shared/Models/Properties/IZZConfiguration.cs | 11 ++ Shared/Models/Stateless/Id.cs | 45 +++++++ Shared/Models/Stateless/Methods/IId.cs | 14 +- Shared/Models/Stateless/Methods/IPath.cs | 4 +- Shared/Models/Stateless/Methods/IResult.cs | 32 ++--- Shared/Models/Stateless/XPath.cs | 2 +- Shared/Models/Stateless/XResult.cs | 20 +-- 17 files changed, 475 insertions(+), 123 deletions(-) create mode 100644 Metadata/Models/Binder/Configuration copy.cs create mode 100644 Metadata/Models/MetadataConfiguration copy.cs create mode 100644 Shared/Models/NameWithoutExtension.cs rename Shared/Models/Properties/{IAAConfiguration.cs => IMetadataConfiguration.cs} (85%) create mode 100644 Shared/Models/Properties/IZZConfiguration.cs diff --git a/.vscode/settings.json b/.vscode/settings.json index 754cdcc..1e598c7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -33,7 +33,6 @@ "Phgtv", "Photoshop", "RDHC", - "recognise", "Rects", "resnet", "Serilog", @@ -41,7 +40,6 @@ "Subfiles", "Syncthing", "Unmanaged", - "unrecognised", "Upsample", "Vericruz" ], diff --git a/Metadata/Models/A_Metadata.cs b/Metadata/Models/A_Metadata.cs index 023f133..2e93269 100644 --- a/Metadata/Models/A_Metadata.cs +++ b/Metadata/Models/A_Metadata.cs @@ -10,12 +10,12 @@ namespace View_by_Distance.Metadata.Models; public class A_Metadata { - private readonly IAAConfiguration _AAConfiguration; + private readonly IMetadataConfiguration _AAConfiguration; private readonly bool _PropertiesChangedForMetadata; private readonly bool _ForceMetadataLastWriteTimeToCreationTime; private readonly IReadOnlyDictionary _FileGroups; - public A_Metadata(IAAConfiguration aAConfiguration, bool forceMetadataLastWriteTimeToCreationTime, bool propertiesChangedForMetadata) + public A_Metadata(IMetadataConfiguration aAConfiguration, bool forceMetadataLastWriteTimeToCreationTime, bool propertiesChangedForMetadata) { _AAConfiguration = aAConfiguration; _PropertiesChangedForMetadata = propertiesChangedForMetadata; @@ -29,14 +29,13 @@ public class A_Metadata _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(aAConfiguration, bResultsFullGroupDirectory, [aAConfiguration.ResultSingleton]); } - public ExifDirectory GetMetadataCollection(string file) + public ExifDirectory GetMetadataCollection(IMetadataConfiguration metadataConfiguration, string file, NameWithoutExtension nameWithoutExtension) { ExifDirectory? results; string fileName = Path.GetFileName(file); string fileExtensionLowered = Path.GetExtension(file).ToLower(); - string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file); (_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_AAConfiguration.ResultAllInOneSubdirectoryLength, fileName); - FileInfo fileInfo = new(Path.Combine(_FileGroups[_AAConfiguration.ResultSingleton][directoryIndex], $"{fileNameWithoutExtension}{fileExtensionLowered}.json")); + FileInfo fileInfo = new(Path.Combine(_FileGroups[_AAConfiguration.ResultSingleton][directoryIndex], $"{nameWithoutExtension.FileNameWithoutExtension}{fileExtensionLowered}.json")); if (_ForceMetadataLastWriteTimeToCreationTime && !fileInfo.Exists && File.Exists(Path.ChangeExtension(fileInfo.FullName, ".delete"))) { File.Move(Path.ChangeExtension(fileInfo.FullName, ".delete"), fileInfo.FullName); @@ -73,6 +72,8 @@ public class A_Metadata try { size = Dimensions.GetDimensions(file); } catch (Exception) { size = null; } + + IReadOnlyList directories = ImageMetadataReader.ReadMetadata(file); results = Exif.Covert(file, fileInfo, size, directories); string json = JsonSerializer.Serialize(results, ExifDirectorySourceGenerationContext.Default.ExifDirectory); @@ -85,13 +86,15 @@ public class A_Metadata return results; } - public static Action GetResultCollection(A_Metadata metadata, List exifDirectories, Action tick) + public static Action GetResultCollection(IMetadataConfiguration metadataConfiguration, A_Metadata metadata, List exifDirectories, Action tick) { return file => { tick.Invoke(); + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file); + NameWithoutExtension nameWithoutExtension = Shared.Models.Stateless.Methods.IId.GetNameWithoutExtension(metadataConfiguration, fileNameWithoutExtension); lock (exifDirectories) - exifDirectories.Add(metadata.GetMetadataCollection(file)); + exifDirectories.Add(metadata.GetMetadataCollection(metadataConfiguration, file, nameWithoutExtension)); }; } diff --git a/Metadata/Models/Binder/Configuration copy.cs b/Metadata/Models/Binder/Configuration copy.cs new file mode 100644 index 0000000..edf8664 --- /dev/null +++ b/Metadata/Models/Binder/Configuration copy.cs @@ -0,0 +1,119 @@ +// 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 index bd061c9..01ae522 100644 --- a/Metadata/Models/Binder/Configuration.cs +++ b/Metadata/Models/Binder/Configuration.cs @@ -8,17 +8,13 @@ public class Configuration { 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; } @@ -42,17 +38,13 @@ public class 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)); @@ -65,17 +57,13 @@ public class Configuration 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, diff --git a/Metadata/Models/MetadataConfiguration copy.cs b/Metadata/Models/MetadataConfiguration copy.cs new file mode 100644 index 0000000..2e39fde --- /dev/null +++ b/Metadata/Models/MetadataConfiguration copy.cs @@ -0,0 +1,127 @@ +// using System.Text.Json; +// using System.Text.Json.Serialization; + +// namespace View_by_Distance.Metadata.Models; + +// public class ZMetadataConfiguration : Shared.Models.Properties.IAAConfiguration +// { + +// protected string _RootDirectory; + +// public string RootDirectory => _RootDirectory; + +// public string DateGroup { init; get; } +// public string FileNameDirectorySeparator { init; get; } +// public bool ForcePropertyLastWriteTimeToCreationTime { init; get; } +// public string[] IgnoreExtensions { init; get; } +// public string[] IgnoreRulesKeyWords { init; get; } +// public int MaxImagesInDirectoryForTopLevelFirstPass { init; get; } +// public string? ModelName { init; get; } +// public int? NumberOfJitters { init; get; } +// public int? NumberOfTimesToUpsample { init; get; } +// public int Offset { init; get; } +// public string Pattern { init; get; } +// public string PersonBirthdayFormat { init; get; } +// public bool PopulatePropertyId { init; get; } +// public string? PredictorModelName { init; get; } +// public bool PropertiesChangedForProperty { init; get; } +// public string[] PropertyContentCollectionFiles { init; get; } +// public string ResultAllInOne { init; get; } +// public int ResultAllInOneSubdirectoryLength { init; get; } +// public string ResultCollection { init; get; } +// public string ResultContent { init; get; } +// public string ResultSingleton { init; get; } +// public string[] ValidImageFormatExtensions { init; get; } + +// [JsonConstructor] +// public MetadataConfiguration(string dateGroup, +// string fileNameDirectorySeparator, +// bool forcePropertyLastWriteTimeToCreationTime, +// string[] ignoreExtensions, +// string[] ignoreRulesKeyWords, +// int maxImagesInDirectoryForTopLevelFirstPass, +// string? modelName, +// int? numberOfJitters, +// int? numberOfTimesToUpsample, +// int offset, +// string pattern, +// string personBirthdayFormat, +// bool populatePropertyId, +// string? predictorModelName, +// bool propertiesChangedForProperty, +// string[] propertyContentCollectionFiles, +// string resultAllInOne, +// int resultAllInOneSubdirectoryLength, +// string resultCollection, +// string resultContent, +// string resultSingleton, +// string rootDirectory, +// string[] validImageFormatExtensions) +// { +// DateGroup = dateGroup; +// FileNameDirectorySeparator = fileNameDirectorySeparator; +// ForcePropertyLastWriteTimeToCreationTime = forcePropertyLastWriteTimeToCreationTime; +// IgnoreExtensions = ignoreExtensions; +// IgnoreRulesKeyWords = ignoreRulesKeyWords; +// MaxImagesInDirectoryForTopLevelFirstPass = maxImagesInDirectoryForTopLevelFirstPass; +// ModelName = modelName; +// NumberOfJitters = numberOfJitters; +// NumberOfTimesToUpsample = numberOfTimesToUpsample; +// Offset = offset; +// Pattern = pattern; +// PersonBirthdayFormat = personBirthdayFormat; +// PredictorModelName = predictorModelName; +// PopulatePropertyId = populatePropertyId; +// PropertiesChangedForProperty = propertiesChangedForProperty; +// PropertyContentCollectionFiles = propertyContentCollectionFiles; +// ResultAllInOne = resultAllInOne; +// ResultAllInOneSubdirectoryLength = resultAllInOneSubdirectoryLength; +// ResultCollection = resultCollection; +// ResultContent = resultContent; +// ResultSingleton = resultSingleton; +// _RootDirectory = rootDirectory; +// ValidImageFormatExtensions = validImageFormatExtensions; +// } + +// public override string ToString() +// { +// string result = JsonSerializer.Serialize(this, MetadataConfigurationSourceGenerationContext.Default.MetadataConfiguration); +// return result; +// } + +// public void ChangeRootDirectory(string rootDirectory) => +// _RootDirectory = Path.GetFullPath(rootDirectory); + +// public static void Verify(MetadataConfiguration propertyConfiguration, bool requireExist) +// { +// if (propertyConfiguration is null) +// throw new NullReferenceException(nameof(propertyConfiguration)); +// if (propertyConfiguration.IgnoreExtensions is null || propertyConfiguration.IgnoreExtensions.Length == 0) +// throw new NullReferenceException(nameof(propertyConfiguration.IgnoreExtensions)); +// if (propertyConfiguration.IgnoreRulesKeyWords is null || propertyConfiguration.IgnoreRulesKeyWords.Length == 0) +// throw new NullReferenceException(nameof(propertyConfiguration.IgnoreRulesKeyWords)); +// if (propertyConfiguration.PropertyContentCollectionFiles is null) +// throw new NullReferenceException(nameof(propertyConfiguration.PropertyContentCollectionFiles)); +// if (propertyConfiguration.ValidImageFormatExtensions is null || propertyConfiguration.ValidImageFormatExtensions.Length == 0) +// throw new NullReferenceException(nameof(propertyConfiguration.ValidImageFormatExtensions)); +// if (propertyConfiguration is null) +// throw new NullReferenceException(nameof(propertyConfiguration)); +// if (string.IsNullOrEmpty(propertyConfiguration.DateGroup)) +// throw new NullReferenceException(nameof(propertyConfiguration.DateGroup)); +// if (string.IsNullOrEmpty(propertyConfiguration.FileNameDirectorySeparator)) +// throw new NullReferenceException(nameof(propertyConfiguration.FileNameDirectorySeparator)); +// if (string.IsNullOrEmpty(propertyConfiguration.Pattern)) +// throw new NullReferenceException(nameof(propertyConfiguration.Pattern)); +// if (string.IsNullOrEmpty(propertyConfiguration.RootDirectory) || (requireExist && !Directory.Exists(propertyConfiguration.RootDirectory))) +// throw new NullReferenceException(nameof(propertyConfiguration.RootDirectory)); +// if (propertyConfiguration.RootDirectory != Path.GetFullPath(propertyConfiguration.RootDirectory)) +// throw new Exception(); +// } + +// } + +// [JsonSourceGenerationOptions(WriteIndented = true)] +// [JsonSerializable(typeof(MetadataConfiguration))] +// internal partial class MetadataConfigurationSourceGenerationContext : JsonSerializerContext +// { +// } \ No newline at end of file diff --git a/Metadata/Models/MetadataConfiguration.cs b/Metadata/Models/MetadataConfiguration.cs index 4a2068e..3552e2c 100644 --- a/Metadata/Models/MetadataConfiguration.cs +++ b/Metadata/Models/MetadataConfiguration.cs @@ -3,7 +3,7 @@ using System.Text.Json.Serialization; namespace View_by_Distance.Metadata.Models; -public class MetadataConfiguration : Shared.Models.Properties.IAAConfiguration +public class MetadataConfiguration : Shared.Models.Properties.IMetadataConfiguration { protected string _RootDirectory; @@ -11,17 +11,13 @@ public class MetadataConfiguration : Shared.Models.Properties.IAAConfiguration public string RootDirectory => _RootDirectory; public string DateGroup { init; get; } - public string FileNameDirectorySeparator { init; get; } public bool ForcePropertyLastWriteTimeToCreationTime { init; get; } public string[] IgnoreExtensions { init; get; } - public string[] IgnoreRulesKeyWords { init; get; } public int MaxImagesInDirectoryForTopLevelFirstPass { init; get; } public string? ModelName { init; get; } public int? NumberOfJitters { init; get; } public int? NumberOfTimesToUpsample { init; get; } public int Offset { init; get; } - public string Pattern { init; get; } - public string PersonBirthdayFormat { init; get; } public bool PopulatePropertyId { init; get; } public string? PredictorModelName { init; get; } public bool PropertiesChangedForProperty { init; get; } @@ -35,41 +31,33 @@ public class MetadataConfiguration : Shared.Models.Properties.IAAConfiguration [JsonConstructor] public MetadataConfiguration(string dateGroup, - string fileNameDirectorySeparator, - bool forcePropertyLastWriteTimeToCreationTime, - string[] ignoreExtensions, - string[] ignoreRulesKeyWords, - int maxImagesInDirectoryForTopLevelFirstPass, - string? modelName, - int? numberOfJitters, - int? numberOfTimesToUpsample, - int offset, - string pattern, - string personBirthdayFormat, - bool populatePropertyId, - string? predictorModelName, - bool propertiesChangedForProperty, - string[] propertyContentCollectionFiles, - string resultAllInOne, - int resultAllInOneSubdirectoryLength, - string resultCollection, - string resultContent, - string resultSingleton, - string rootDirectory, - string[] validImageFormatExtensions) + 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; - FileNameDirectorySeparator = fileNameDirectorySeparator; ForcePropertyLastWriteTimeToCreationTime = forcePropertyLastWriteTimeToCreationTime; IgnoreExtensions = ignoreExtensions; - IgnoreRulesKeyWords = ignoreRulesKeyWords; MaxImagesInDirectoryForTopLevelFirstPass = maxImagesInDirectoryForTopLevelFirstPass; ModelName = modelName; NumberOfJitters = numberOfJitters; NumberOfTimesToUpsample = numberOfTimesToUpsample; Offset = offset; - Pattern = pattern; - PersonBirthdayFormat = personBirthdayFormat; PredictorModelName = predictorModelName; PopulatePropertyId = populatePropertyId; PropertiesChangedForProperty = propertiesChangedForProperty; @@ -92,29 +80,23 @@ public class MetadataConfiguration : Shared.Models.Properties.IAAConfiguration public void ChangeRootDirectory(string rootDirectory) => _RootDirectory = Path.GetFullPath(rootDirectory); - public static void Verify(MetadataConfiguration propertyConfiguration, bool requireExist) + public static void Verify(Shared.Models.Properties.IMetadataConfiguration metadataConfiguration, bool requireExist) { - if (propertyConfiguration is null) - throw new NullReferenceException(nameof(propertyConfiguration)); - if (propertyConfiguration.IgnoreExtensions is null || propertyConfiguration.IgnoreExtensions.Length == 0) - throw new NullReferenceException(nameof(propertyConfiguration.IgnoreExtensions)); - if (propertyConfiguration.IgnoreRulesKeyWords is null || propertyConfiguration.IgnoreRulesKeyWords.Length == 0) - throw new NullReferenceException(nameof(propertyConfiguration.IgnoreRulesKeyWords)); - if (propertyConfiguration.PropertyContentCollectionFiles is null) - throw new NullReferenceException(nameof(propertyConfiguration.PropertyContentCollectionFiles)); - if (propertyConfiguration.ValidImageFormatExtensions is null || propertyConfiguration.ValidImageFormatExtensions.Length == 0) - throw new NullReferenceException(nameof(propertyConfiguration.ValidImageFormatExtensions)); - if (propertyConfiguration is null) - throw new NullReferenceException(nameof(propertyConfiguration)); - if (string.IsNullOrEmpty(propertyConfiguration.DateGroup)) - throw new NullReferenceException(nameof(propertyConfiguration.DateGroup)); - if (string.IsNullOrEmpty(propertyConfiguration.FileNameDirectorySeparator)) - throw new NullReferenceException(nameof(propertyConfiguration.FileNameDirectorySeparator)); - if (string.IsNullOrEmpty(propertyConfiguration.Pattern)) - throw new NullReferenceException(nameof(propertyConfiguration.Pattern)); - if (string.IsNullOrEmpty(propertyConfiguration.RootDirectory) || (requireExist && !Directory.Exists(propertyConfiguration.RootDirectory))) - throw new NullReferenceException(nameof(propertyConfiguration.RootDirectory)); - if (propertyConfiguration.RootDirectory != Path.GetFullPath(propertyConfiguration.RootDirectory)) + 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(); } diff --git a/Rename/AA.Rename.csproj b/Rename/AA.Rename.csproj index 181d035..b9ce1a6 100644 --- a/Rename/AA.Rename.csproj +++ b/Rename/AA.Rename.csproj @@ -34,6 +34,7 @@ + diff --git a/Rename/Rename.cs b/Rename/Rename.cs index 968c168..6f84db2 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -25,19 +25,21 @@ public class Rename if (console is null) 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; - logger?.LogInformation("{RootDirectory}", metadataConfiguration.RootDirectory); + DirectoryInfo directoryInfo = new(Path.GetFullPath(metadataConfiguration.RootDirectory)); + logger?.LogInformation("{RootDirectory}", directoryInfo.FullName); MetadataConfiguration.Verify(metadataConfiguration, requireExist: false); Verify(); - List linesB = RenameFilesInDirectories(logger); + List linesB = RenameFilesInDirectories(logger, ticks, directoryInfo); if (linesB.Count != 0) { File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", linesB); - _ = IPath.DeleteEmptyDirectories(metadataConfiguration.RootDirectory); + _ = IPath.DeleteEmptyDirectories(directoryInfo.FullName); } } @@ -53,18 +55,70 @@ public class Rename throw new NullReferenceException(nameof(_MetadataConfiguration)); } - private List RenameFilesInDirectories(ILogger? logger) + private bool GetRunToDoCollectionFirst(long ticks, DirectoryInfo directoryInfo) + { + bool result = false; + string[] directories; + string seasonDirectory; + DateTime dateTime = new(ticks); + (int season, string seasonName) = IDate.GetSeason(dateTime.DayOfYear); + string eDistanceContentDirectory = IResult.GetResultsDateGroupDirectory(_MetadataConfiguration, nameof(A_Metadata), _MetadataConfiguration.ResultContent); + FileSystemInfo fileSystemInfo = new DirectoryInfo(eDistanceContentDirectory); + string[] checkDirectories = + [ + Path.Combine(directoryInfo.FullName, "Ancestry"), + Path.Combine(directoryInfo.FullName, "Facebook"), + Path.Combine(directoryInfo.FullName, "LinkedIn"), + directoryInfo.FullName, + ]; + foreach (string checkDirectory in checkDirectories) + { + if (checkDirectory == directoryInfo.FullName) + seasonDirectory = Path.Combine(checkDirectory, $"{dateTime.Year}.{season} {seasonName}"); + else + seasonDirectory = Path.Combine(checkDirectory, $"{dateTime.Year}.{season} {seasonName} {Path.GetFileName(checkDirectory)}"); + if (!Directory.Exists(seasonDirectory)) + _ = Directory.CreateDirectory(seasonDirectory); + if (result) + continue; + directories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly); + foreach (string directory in directories) + { + if (new DirectoryInfo(directory).LastWriteTime > fileSystemInfo.LastWriteTime) + { + result = true; + break; + } + } + } + return result; + } + + private List RenameFilesInDirectories(ILogger? logger, long ticks, DirectoryInfo directoryInfo) { List old = []; List exifDirectories = []; - string rootDirectoryFullPath = Path.GetFullPath(_MetadataConfiguration.RootDirectory); - ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism }; - IEnumerable files = Directory.EnumerateFiles(rootDirectoryFullPath, "*", SearchOption.AllDirectories); + bool runToDoCollectionFirst = GetRunToDoCollectionFirst(ticks, directoryInfo); + IEnumerable files = Directory.EnumerateFiles(directoryInfo.FullName, "*", SearchOption.AllDirectories); A_Metadata metadata = new(_MetadataConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata); - ProgressBar progressBar = new(123000, "EnumerateFiles load", new ProgressBarOptions() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }); - files.AsParallel().ForAll(A_Metadata.GetResultCollection(metadata, exifDirectories, () => progressBar.Tick())); - if (progressBar.CurrentTick != exifDirectories.Count) - throw new NotSupportedException(); + if (runToDoCollectionFirst) + { + foreach (string file in files) + { + NameWithoutExtension nameWithoutExtension = IId.GetNameWithoutExtension(_MetadataConfiguration, file); + exifDirectories.Add(metadata.GetMetadataCollection(_MetadataConfiguration, file, nameWithoutExtension)); + if (nameWithoutExtension.Id is null || (!nameWithoutExtension.IsIdFormat && !nameWithoutExtension.IsPaddedIdFormat)) + ; + } + } + else + { + ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism }; + ProgressBar progressBar = new(123000, "EnumerateFiles load", new ProgressBarOptions() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }); + files.AsParallel().ForAll(A_Metadata.GetResultCollection(_MetadataConfiguration, metadata, exifDirectories, () => progressBar.Tick())); + if (progressBar.CurrentTick != exifDirectories.Count) + throw new NotSupportedException(); + } return old; } diff --git a/Shared/Models/NameWithoutExtension.cs b/Shared/Models/NameWithoutExtension.cs new file mode 100644 index 0000000..3e42822 --- /dev/null +++ b/Shared/Models/NameWithoutExtension.cs @@ -0,0 +1,24 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace View_by_Distance.Shared.Models; + +public record NameWithoutExtension(string FileNameWithoutExtension, + int? Id, + bool IsIdFormat, + bool IsPaddedIdFormat) +{ + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, NameWithoutExtensionSourceGenerationContext.Default.NameWithoutExtension); + return result; + } + +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(NameWithoutExtension))] +public partial class NameWithoutExtensionSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/Shared/Models/Properties/IAAConfiguration.cs b/Shared/Models/Properties/IMetadataConfiguration.cs similarity index 85% rename from Shared/Models/Properties/IAAConfiguration.cs rename to Shared/Models/Properties/IMetadataConfiguration.cs index 0ab856d..d843bfb 100644 --- a/Shared/Models/Properties/IAAConfiguration.cs +++ b/Shared/Models/Properties/IMetadataConfiguration.cs @@ -1,12 +1,10 @@ namespace View_by_Distance.Shared.Models.Properties; -public interface IAAConfiguration +public interface IMetadataConfiguration { public string DateGroup { init; get; } public string[] IgnoreExtensions { init; get; } - public string[] IgnoreRulesKeyWords { init; get; } - public string PersonBirthdayFormat { init; get; } public bool PropertiesChangedForProperty { init; get; } public string[] PropertyContentCollectionFiles { init; get; } public string ResultAllInOne { init; get; } diff --git a/Shared/Models/Properties/IZZConfiguration.cs b/Shared/Models/Properties/IZZConfiguration.cs new file mode 100644 index 0000000..72aaae7 --- /dev/null +++ b/Shared/Models/Properties/IZZConfiguration.cs @@ -0,0 +1,11 @@ +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/Stateless/Id.cs b/Shared/Models/Stateless/Id.cs index a048f37..406d5f0 100644 --- a/Shared/Models/Stateless/Id.cs +++ b/Shared/Models/Stateless/Id.cs @@ -1,3 +1,6 @@ +using View_by_Distance.Shared.Models.Properties; +using View_by_Distance.Shared.Models.Stateless.Methods; + namespace View_by_Distance.Shared.Models.Stateless; internal abstract class Id @@ -17,4 +20,46 @@ internal abstract class Id return result; } + internal static NameWithoutExtension GetNameWithoutExtension(IMetadataConfiguration configuration, string file) + { + NameWithoutExtension result; + int? id; + short? multiplier; + char negativeMarker; + int absoluteValueOfId; + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file); + short sortOrderOnlyLengthIndex = IId.GetSortOrderOnlyLengthIndex(configuration.Offset); + bool nameWithoutExtensionIsIdFormat = IId.NameWithoutExtensionIsIdFormat(fileNameWithoutExtension); + bool nameWithoutExtensionIsPaddedIdFormat = IId.NameWithoutExtensionIsPaddedIdFormat(fileNameWithoutExtension, sortOrderOnlyLengthIndex); + if (!nameWithoutExtensionIsIdFormat && !nameWithoutExtensionIsPaddedIdFormat) + id = null; + else if (nameWithoutExtensionIsIdFormat) + { + if (!int.TryParse(fileNameWithoutExtension, out absoluteValueOfId)) + id = null; + else + id = absoluteValueOfId; + } + else + { + negativeMarker = fileNameWithoutExtension[sortOrderOnlyLengthIndex - 2]; + if (negativeMarker == '7') + multiplier = 1; + else if (negativeMarker == '3') + multiplier = -1; + else + multiplier = null; + if (!int.TryParse(fileNameWithoutExtension[sortOrderOnlyLengthIndex..], out absoluteValueOfId)) + id = null; + else + { + id = absoluteValueOfId * multiplier; + if (id is null || !fileNameWithoutExtension.EndsWith(id.Value.ToString()[1..])) + id = null; + } + } + result = new(fileNameWithoutExtension, id, nameWithoutExtensionIsIdFormat, nameWithoutExtensionIsPaddedIdFormat); + return result; + } + } \ No newline at end of file diff --git a/Shared/Models/Stateless/Methods/IId.cs b/Shared/Models/Stateless/Methods/IId.cs index 4e44718..e09ac54 100644 --- a/Shared/Models/Stateless/Methods/IId.cs +++ b/Shared/Models/Stateless/Methods/IId.cs @@ -1,3 +1,5 @@ +using View_by_Distance.Shared.Models.Properties; + namespace View_by_Distance.Shared.Models.Stateless.Methods; public interface IId @@ -18,9 +20,9 @@ public interface IId static string GetPaddedId(int intMinValueLength, int index, int id) => id > -1 ? $"{index}070{id.ToString().PadLeft(intMinValueLength, '0')}" : $"{index}030{id.ToString()[1..].PadLeft(intMinValueLength, '0')}"; - bool TestStatic_NameWithoutExtensionIsPaddedIdFormat(string fileNameWithoutExtension, int sortOrderOnlyLengthIndex) => + bool TestStatic_NameWithoutExtensionIsPaddedIdFormat(string fileNameWithoutExtension, short sortOrderOnlyLengthIndex) => NameWithoutExtensionIsPaddedIdFormat(fileNameWithoutExtension, sortOrderOnlyLengthIndex); - static bool NameWithoutExtensionIsPaddedIdFormat(string fileNameWithoutExtension, int sortOrderOnlyLengthIndex) => + static bool NameWithoutExtensionIsPaddedIdFormat(string fileNameWithoutExtension, short sortOrderOnlyLengthIndex) => fileNameWithoutExtension.Length > sortOrderOnlyLengthIndex && fileNameWithoutExtension[sortOrderOnlyLengthIndex] == '0' && fileNameWithoutExtension[sortOrderOnlyLengthIndex - 3] == '0' @@ -31,9 +33,9 @@ public interface IId static short GetSortOrderOnlyLengthIndex(int offset) => (short)(offset.ToString().Length + 3); - bool TestStatic_NameWithoutExtensionIsPaddedIdFormat(FileHolder fileHolder, int sortOrderOnlyLengthIndex) => - NameWithoutExtensionIsPaddedIdFormat(fileHolder, sortOrderOnlyLengthIndex); - static bool NameWithoutExtensionIsPaddedIdFormat(FileHolder fileHolder, int sortOrderOnlyLengthIndex) => - NameWithoutExtensionIsPaddedIdFormat(fileHolder.NameWithoutExtension, sortOrderOnlyLengthIndex); + NameWithoutExtension TestStatic_GetNameWithoutExtension(IMetadataConfiguration configuration, string file) => + GetNameWithoutExtension(configuration, file); + static NameWithoutExtension GetNameWithoutExtension(IMetadataConfiguration configuration, string file) => + Id.GetNameWithoutExtension(configuration, file); } \ No newline at end of file diff --git a/Shared/Models/Stateless/Methods/IPath.cs b/Shared/Models/Stateless/Methods/IPath.cs index 121c625..8b6f2b5 100644 --- a/Shared/Models/Stateless/Methods/IPath.cs +++ b/Shared/Models/Stateless/Methods/IPath.cs @@ -66,9 +66,9 @@ public interface IPath static (string, int) GetDirectoryNameAndIndex(int resultAllInOneSubdirectoryLength, string fileName) => XPath.GetDirectoryNameAndIndex(resultAllInOneSubdirectoryLength, fileName); - Dictionary TestStatic_GetKeyValuePairs(IAAConfiguration aAConfiguration, string? resultsFullGroupDirectory, string[]? directories) => + Dictionary TestStatic_GetKeyValuePairs(IMetadataConfiguration aAConfiguration, string? resultsFullGroupDirectory, string[]? directories) => GetKeyValuePairs(aAConfiguration, resultsFullGroupDirectory, directories); - static Dictionary GetKeyValuePairs(IAAConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? directories) => + static Dictionary GetKeyValuePairs(IMetadataConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? directories) => XPath.GetKeyValuePairs(propertyConfiguration, 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 60cf7ab..8fca437 100644 --- a/Shared/Models/Stateless/Methods/IResult.cs +++ b/Shared/Models/Stateless/Methods/IResult.cs @@ -5,44 +5,44 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods; public interface IResult { - string TestStatic_GetRelativePath(IAAConfiguration aAConfiguration, string path) => + string TestStatic_GetRelativePath(IMetadataConfiguration aAConfiguration, string path) => GetRelativePath(aAConfiguration, path); - static string GetRelativePath(IAAConfiguration aAConfiguration, string path) => + static string GetRelativePath(IMetadataConfiguration aAConfiguration, string path) => XResult.GetRelativePath(aAConfiguration, path); - string TestStatic_GetResultsGroupDirectory(IAAConfiguration aAConfiguration, string description, bool create) => + string TestStatic_GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description, bool create) => GetResultsGroupDirectory(aAConfiguration, description, create); - static string GetResultsGroupDirectory(IAAConfiguration aAConfiguration, string description, bool create) => + static string GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description, bool create) => XResult.GetResultsGroupDirectory(aAConfiguration, description, create); - string TestStatic_GetResultsGroupDirectory(IAAConfiguration aAConfiguration, string description) => + string TestStatic_GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description) => GetResultsGroupDirectory(aAConfiguration, description); - static string GetResultsGroupDirectory(IAAConfiguration aAConfiguration, string description) => + static string GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description) => XResult.GetResultsGroupDirectory(aAConfiguration, description, create: true); - string TestStatic_GetResultsDateGroupDirectory(IAAConfiguration aAConfiguration, string description) => + string TestStatic_GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description) => GetResultsDateGroupDirectory(aAConfiguration, description); - static string GetResultsDateGroupDirectory(IAAConfiguration aAConfiguration, string description) => + static string GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description) => XResult.GetResultsDateGroupDirectory(aAConfiguration, description); - string TestStatic_GetResultsDateGroupDirectory(IAAConfiguration aAConfiguration, string description, string jsonGroup) => + string TestStatic_GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string jsonGroup) => GetResultsDateGroupDirectory(aAConfiguration, description, jsonGroup); - static string GetResultsDateGroupDirectory(IAAConfiguration aAConfiguration, string description, string jsonGroup) => + static string GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string jsonGroup) => XResult.GetResultsDateGroupDirectory(aAConfiguration, description, jsonGroup); - List TestStatic_GetDirectoryInfoCollection(IAAConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) => + 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(IAAConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool 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); - string TestStatic_GetResultsFullGroupDirectory(IAAConfiguration aAConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) => + 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(IAAConfiguration aAConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) => + static string GetResultsFullGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) => XResult.GetResultsFullGroupDirectory(aAConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel); - List TestStatic_GetDirectoryInfoCollection(IAAConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) => + 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(IAAConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string 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); } \ No newline at end of file diff --git a/Shared/Models/Stateless/XPath.cs b/Shared/Models/Stateless/XPath.cs index 4cac013..4818918 100644 --- a/Shared/Models/Stateless/XPath.cs +++ b/Shared/Models/Stateless/XPath.cs @@ -283,7 +283,7 @@ internal abstract class XPath return (result, converted); } - internal static Dictionary GetKeyValuePairs(IAAConfiguration aAConfiguration, string? resultsFullGroupDirectory, string[]? directories) + internal static Dictionary GetKeyValuePairs(IMetadataConfiguration aAConfiguration, string? resultsFullGroupDirectory, string[]? directories) { Dictionary results = []; string directory; diff --git a/Shared/Models/Stateless/XResult.cs b/Shared/Models/Stateless/XResult.cs index 2074f54..4ef53bd 100644 --- a/Shared/Models/Stateless/XResult.cs +++ b/Shared/Models/Stateless/XResult.cs @@ -5,7 +5,7 @@ namespace View_by_Distance.Shared.Models.Stateless; internal abstract class XResult { - internal static string GetResultsDateGroupDirectory(IAAConfiguration aAConfiguration, string description, string jsonGroup) + internal static string GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string jsonGroup) { string result = Path.Combine(GetResultsDateGroupDirectory(aAConfiguration, description), jsonGroup); if (!Directory.Exists(result)) @@ -13,7 +13,7 @@ internal abstract class XResult return result; } - internal static string GetResultsDateGroupDirectory(IAAConfiguration aAConfiguration, string description) + internal static string GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description) { string result = Path.Combine(GetResultsGroupDirectory(aAConfiguration, description, create: true), aAConfiguration.DateGroup); if (!Directory.Exists(result)) @@ -21,13 +21,13 @@ internal abstract class XResult return result; } - internal static string GetRelativePath(IAAConfiguration aAConfiguration, string path) + internal static string GetRelativePath(IMetadataConfiguration aAConfiguration, string path) { string result = Methods.IPath.GetRelativePath(path, aAConfiguration.RootDirectory.Length); return result; } - private static void CheckContent(IAAConfiguration aAConfiguration, string dateGroupDirectory, string contentDescription, string result) + private static void CheckContent(IMetadataConfiguration aAConfiguration, string dateGroupDirectory, string contentDescription, string result) { string checkDirectory; checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultContent, aAConfiguration.ResultAllInOne); @@ -41,7 +41,7 @@ internal abstract class XResult _ = Directory.CreateDirectory(checkDirectory); } - private static void CheckSingleton(IAAConfiguration aAConfiguration, string dateGroupDirectory, string singletonDescription, bool converted, string result) + private static void CheckSingleton(IMetadataConfiguration aAConfiguration, string dateGroupDirectory, string singletonDescription, bool converted, string result) { string checkDirectory; checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultSingleton, aAConfiguration.ResultAllInOne); @@ -58,7 +58,7 @@ internal abstract class XResult _ = Directory.CreateDirectory(checkDirectory); } - private static void CheckCollection(IAAConfiguration aAConfiguration, string dateGroupDirectory, string collectionDescription, bool converted, string result) + private static void CheckCollection(IMetadataConfiguration aAConfiguration, string dateGroupDirectory, string collectionDescription, bool converted, string result) { string checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultCollection, aAConfiguration.ResultAllInOne); if (!Directory.Exists(checkDirectory)) @@ -74,7 +74,7 @@ internal abstract class XResult _ = Directory.CreateDirectory(checkDirectory); } - internal static string GetResultsFullGroupDirectory(IAAConfiguration aAConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) + internal static string GetResultsFullGroupDirectory(IMetadataConfiguration aAConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) { string result = GetResultsDateGroupDirectory(aAConfiguration, description); if (includeResizeGroup) @@ -103,7 +103,7 @@ internal abstract class XResult return result; } - internal static List GetDirectoryInfoCollection(IAAConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) + internal static List GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) { List results = []; string sourceDirectorySegment = GetRelativePath(aAConfiguration, sourceDirectory); @@ -118,7 +118,7 @@ internal abstract class XResult return results; } - internal static string GetResultsGroupDirectory(IAAConfiguration aAConfiguration, string description, bool create) + internal static string GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description, bool create) { string result = Path.Combine($"{aAConfiguration.RootDirectory}-Results", description.Replace('_', ')')); if (create && !Directory.Exists(result)) @@ -126,7 +126,7 @@ internal abstract class XResult return result; } - internal static List GetDirectoryInfoCollection(IAAConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) + internal static List GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) { List results; bool converted = false;