Shared.Models.Properties.IMetadataConfiguration

This commit is contained in:
Mike Phares 2023-10-22 12:46:10 -07:00
parent f7573e95e4
commit 42d202e287
17 changed files with 475 additions and 123 deletions

View File

@ -33,7 +33,6 @@
"Phgtv", "Phgtv",
"Photoshop", "Photoshop",
"RDHC", "RDHC",
"recognise",
"Rects", "Rects",
"resnet", "resnet",
"Serilog", "Serilog",
@ -41,7 +40,6 @@
"Subfiles", "Subfiles",
"Syncthing", "Syncthing",
"Unmanaged", "Unmanaged",
"unrecognised",
"Upsample", "Upsample",
"Vericruz" "Vericruz"
], ],

View File

@ -10,12 +10,12 @@ namespace View_by_Distance.Metadata.Models;
public class A_Metadata public class A_Metadata
{ {
private readonly IAAConfiguration _AAConfiguration; private readonly IMetadataConfiguration _AAConfiguration;
private readonly bool _PropertiesChangedForMetadata; private readonly bool _PropertiesChangedForMetadata;
private readonly bool _ForceMetadataLastWriteTimeToCreationTime; private readonly bool _ForceMetadataLastWriteTimeToCreationTime;
private readonly IReadOnlyDictionary<string, string[]> _FileGroups; private readonly IReadOnlyDictionary<string, string[]> _FileGroups;
public A_Metadata(IAAConfiguration aAConfiguration, bool forceMetadataLastWriteTimeToCreationTime, bool propertiesChangedForMetadata) public A_Metadata(IMetadataConfiguration aAConfiguration, bool forceMetadataLastWriteTimeToCreationTime, bool propertiesChangedForMetadata)
{ {
_AAConfiguration = aAConfiguration; _AAConfiguration = aAConfiguration;
_PropertiesChangedForMetadata = propertiesChangedForMetadata; _PropertiesChangedForMetadata = propertiesChangedForMetadata;
@ -29,14 +29,13 @@ public class A_Metadata
_FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(aAConfiguration, bResultsFullGroupDirectory, [aAConfiguration.ResultSingleton]); _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; ExifDirectory? results;
string fileName = Path.GetFileName(file); string fileName = Path.GetFileName(file);
string fileExtensionLowered = Path.GetExtension(file).ToLower(); string fileExtensionLowered = Path.GetExtension(file).ToLower();
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file);
(_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_AAConfiguration.ResultAllInOneSubdirectoryLength, fileName); (_, 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"))) if (_ForceMetadataLastWriteTimeToCreationTime && !fileInfo.Exists && File.Exists(Path.ChangeExtension(fileInfo.FullName, ".delete")))
{ {
File.Move(Path.ChangeExtension(fileInfo.FullName, ".delete"), fileInfo.FullName); File.Move(Path.ChangeExtension(fileInfo.FullName, ".delete"), fileInfo.FullName);
@ -73,6 +72,8 @@ public class A_Metadata
try try
{ size = Dimensions.GetDimensions(file); } { size = Dimensions.GetDimensions(file); }
catch (Exception) { size = null; } catch (Exception) { size = null; }
IReadOnlyList<MetadataExtractor.Directory> directories = ImageMetadataReader.ReadMetadata(file); IReadOnlyList<MetadataExtractor.Directory> directories = ImageMetadataReader.ReadMetadata(file);
results = Exif.Covert(file, fileInfo, size, directories); results = Exif.Covert(file, fileInfo, size, directories);
string json = JsonSerializer.Serialize(results, ExifDirectorySourceGenerationContext.Default.ExifDirectory); string json = JsonSerializer.Serialize(results, ExifDirectorySourceGenerationContext.Default.ExifDirectory);
@ -85,13 +86,15 @@ public class A_Metadata
return results; return results;
} }
public static Action<string> GetResultCollection(A_Metadata metadata, List<ExifDirectory> exifDirectories, Action tick) public static Action<string> GetResultCollection(IMetadataConfiguration metadataConfiguration, A_Metadata metadata, List<ExifDirectory> exifDirectories, Action tick)
{ {
return file => return file =>
{ {
tick.Invoke(); tick.Invoke();
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file);
NameWithoutExtension nameWithoutExtension = Shared.Models.Stateless.Methods.IId.GetNameWithoutExtension(metadataConfiguration, fileNameWithoutExtension);
lock (exifDirectories) lock (exifDirectories)
exifDirectories.Add(metadata.GetMetadataCollection(file)); exifDirectories.Add(metadata.GetMetadataCollection(metadataConfiguration, file, nameWithoutExtension));
}; };
} }

View File

@ -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<Configuration>();
// #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
// {
// }

View File

@ -8,17 +8,13 @@ public class Configuration
{ {
public string? DateGroup { get; set; } public string? DateGroup { get; set; }
public string? FileNameDirectorySeparator { get; set; }
public bool? ForcePropertyLastWriteTimeToCreationTime { get; set; } public bool? ForcePropertyLastWriteTimeToCreationTime { get; set; }
public string[]? IgnoreExtensions { get; set; } public string[]? IgnoreExtensions { get; set; }
public string[]? IgnoreRulesKeyWords { get; set; }
public int? MaxImagesInDirectoryForTopLevelFirstPass { get; set; } public int? MaxImagesInDirectoryForTopLevelFirstPass { get; set; }
public string? ModelName { init; get; } public string? ModelName { init; get; }
public int? NumberOfJitters { init; get; } public int? NumberOfJitters { init; get; }
public int? NumberOfTimesToUpsample { init; get; } public int? NumberOfTimesToUpsample { init; get; }
public int? Offset { init; get; } public int? Offset { init; get; }
public string? Pattern { get; set; }
public string? PersonBirthdayFormat { get; set; }
public bool? PopulatePropertyId { get; set; } public bool? PopulatePropertyId { get; set; }
public string? PredictorModelName { get; set; } public string? PredictorModelName { get; set; }
public bool? PropertiesChangedForProperty { get; set; } public bool? PropertiesChangedForProperty { get; set; }
@ -42,17 +38,13 @@ public class Configuration
MetadataConfiguration result; MetadataConfiguration result;
if (configuration is null) throw new NullReferenceException(nameof(configuration)); if (configuration is null) throw new NullReferenceException(nameof(configuration));
if (configuration.DateGroup is null) throw new NullReferenceException(nameof(configuration.DateGroup)); 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.ForcePropertyLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForcePropertyLastWriteTimeToCreationTime));
if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); 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.MaxImagesInDirectoryForTopLevelFirstPass is null) throw new NullReferenceException(nameof(configuration.MaxImagesInDirectoryForTopLevelFirstPass));
// if (configuration.ModelName is null) throw new NullReferenceException(nameof(configuration.ModelName)); // if (configuration.ModelName is null) throw new NullReferenceException(nameof(configuration.ModelName));
// if (configuration.NumberOfJitters is null) throw new NullReferenceException(nameof(configuration.NumberOfJitters)); // if (configuration.NumberOfJitters is null) throw new NullReferenceException(nameof(configuration.NumberOfJitters));
// if (configuration.NumberOfTimesToUpsample is null) throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample)); // if (configuration.NumberOfTimesToUpsample is null) throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample));
if (configuration.Offset is null) throw new NullReferenceException(nameof(configuration.Offset)); ; 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.PopulatePropertyId is null) throw new NullReferenceException(nameof(configuration.PopulatePropertyId));
// if (configuration.PredictorModelName is null) throw new NullReferenceException(nameof(configuration.PredictorModelName)); // if (configuration.PredictorModelName is null) throw new NullReferenceException(nameof(configuration.PredictorModelName));
if (configuration.PropertiesChangedForProperty is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForProperty)); 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.RootDirectory is null) throw new NullReferenceException(nameof(configuration.RootDirectory));
if (configuration.ValidImageFormatExtensions is null) throw new NullReferenceException(nameof(configuration.ValidImageFormatExtensions)); if (configuration.ValidImageFormatExtensions is null) throw new NullReferenceException(nameof(configuration.ValidImageFormatExtensions));
result = new(configuration.DateGroup, result = new(configuration.DateGroup,
configuration.FileNameDirectorySeparator,
configuration.ForcePropertyLastWriteTimeToCreationTime.Value, configuration.ForcePropertyLastWriteTimeToCreationTime.Value,
configuration.IgnoreExtensions, configuration.IgnoreExtensions,
configuration.IgnoreRulesKeyWords,
configuration.MaxImagesInDirectoryForTopLevelFirstPass.Value, configuration.MaxImagesInDirectoryForTopLevelFirstPass.Value,
configuration.ModelName, configuration.ModelName,
configuration.NumberOfJitters, configuration.NumberOfJitters,
configuration.NumberOfTimesToUpsample, configuration.NumberOfTimesToUpsample,
configuration.Offset.Value, configuration.Offset.Value,
configuration.Pattern,
configuration.PersonBirthdayFormat,
configuration.PopulatePropertyId.Value, configuration.PopulatePropertyId.Value,
configuration.PredictorModelName, configuration.PredictorModelName,
configuration.PropertiesChangedForProperty.Value, configuration.PropertiesChangedForProperty.Value,

View File

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

View File

@ -3,7 +3,7 @@ using System.Text.Json.Serialization;
namespace View_by_Distance.Metadata.Models; namespace View_by_Distance.Metadata.Models;
public class MetadataConfiguration : Shared.Models.Properties.IAAConfiguration public class MetadataConfiguration : Shared.Models.Properties.IMetadataConfiguration
{ {
protected string _RootDirectory; protected string _RootDirectory;
@ -11,17 +11,13 @@ public class MetadataConfiguration : Shared.Models.Properties.IAAConfiguration
public string RootDirectory => _RootDirectory; public string RootDirectory => _RootDirectory;
public string DateGroup { init; get; } public string DateGroup { init; get; }
public string FileNameDirectorySeparator { init; get; }
public bool ForcePropertyLastWriteTimeToCreationTime { init; get; } public bool ForcePropertyLastWriteTimeToCreationTime { init; get; }
public string[] IgnoreExtensions { init; get; } public string[] IgnoreExtensions { init; get; }
public string[] IgnoreRulesKeyWords { init; get; }
public int MaxImagesInDirectoryForTopLevelFirstPass { init; get; } public int MaxImagesInDirectoryForTopLevelFirstPass { init; get; }
public string? ModelName { init; get; } public string? ModelName { init; get; }
public int? NumberOfJitters { init; get; } public int? NumberOfJitters { init; get; }
public int? NumberOfTimesToUpsample { init; get; } public int? NumberOfTimesToUpsample { init; get; }
public int Offset { init; get; } public int Offset { init; get; }
public string Pattern { init; get; }
public string PersonBirthdayFormat { init; get; }
public bool PopulatePropertyId { init; get; } public bool PopulatePropertyId { init; get; }
public string? PredictorModelName { init; get; } public string? PredictorModelName { init; get; }
public bool PropertiesChangedForProperty { init; get; } public bool PropertiesChangedForProperty { init; get; }
@ -35,17 +31,13 @@ public class MetadataConfiguration : Shared.Models.Properties.IAAConfiguration
[JsonConstructor] [JsonConstructor]
public MetadataConfiguration(string dateGroup, public MetadataConfiguration(string dateGroup,
string fileNameDirectorySeparator,
bool forcePropertyLastWriteTimeToCreationTime, bool forcePropertyLastWriteTimeToCreationTime,
string[] ignoreExtensions, string[] ignoreExtensions,
string[] ignoreRulesKeyWords,
int maxImagesInDirectoryForTopLevelFirstPass, int maxImagesInDirectoryForTopLevelFirstPass,
string? modelName, string? modelName,
int? numberOfJitters, int? numberOfJitters,
int? numberOfTimesToUpsample, int? numberOfTimesToUpsample,
int offset, int offset,
string pattern,
string personBirthdayFormat,
bool populatePropertyId, bool populatePropertyId,
string? predictorModelName, string? predictorModelName,
bool propertiesChangedForProperty, bool propertiesChangedForProperty,
@ -59,17 +51,13 @@ public class MetadataConfiguration : Shared.Models.Properties.IAAConfiguration
string[] validImageFormatExtensions) string[] validImageFormatExtensions)
{ {
DateGroup = dateGroup; DateGroup = dateGroup;
FileNameDirectorySeparator = fileNameDirectorySeparator;
ForcePropertyLastWriteTimeToCreationTime = forcePropertyLastWriteTimeToCreationTime; ForcePropertyLastWriteTimeToCreationTime = forcePropertyLastWriteTimeToCreationTime;
IgnoreExtensions = ignoreExtensions; IgnoreExtensions = ignoreExtensions;
IgnoreRulesKeyWords = ignoreRulesKeyWords;
MaxImagesInDirectoryForTopLevelFirstPass = maxImagesInDirectoryForTopLevelFirstPass; MaxImagesInDirectoryForTopLevelFirstPass = maxImagesInDirectoryForTopLevelFirstPass;
ModelName = modelName; ModelName = modelName;
NumberOfJitters = numberOfJitters; NumberOfJitters = numberOfJitters;
NumberOfTimesToUpsample = numberOfTimesToUpsample; NumberOfTimesToUpsample = numberOfTimesToUpsample;
Offset = offset; Offset = offset;
Pattern = pattern;
PersonBirthdayFormat = personBirthdayFormat;
PredictorModelName = predictorModelName; PredictorModelName = predictorModelName;
PopulatePropertyId = populatePropertyId; PopulatePropertyId = populatePropertyId;
PropertiesChangedForProperty = propertiesChangedForProperty; PropertiesChangedForProperty = propertiesChangedForProperty;
@ -92,29 +80,23 @@ public class MetadataConfiguration : Shared.Models.Properties.IAAConfiguration
public void ChangeRootDirectory(string rootDirectory) => public void ChangeRootDirectory(string rootDirectory) =>
_RootDirectory = Path.GetFullPath(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) if (metadataConfiguration is null)
throw new NullReferenceException(nameof(propertyConfiguration)); throw new NullReferenceException(nameof(metadataConfiguration));
if (propertyConfiguration.IgnoreExtensions is null || propertyConfiguration.IgnoreExtensions.Length == 0) if (metadataConfiguration.IgnoreExtensions is null || metadataConfiguration.IgnoreExtensions.Length == 0)
throw new NullReferenceException(nameof(propertyConfiguration.IgnoreExtensions)); throw new NullReferenceException(nameof(metadataConfiguration.IgnoreExtensions));
if (propertyConfiguration.IgnoreRulesKeyWords is null || propertyConfiguration.IgnoreRulesKeyWords.Length == 0) if (metadataConfiguration.PropertyContentCollectionFiles is null)
throw new NullReferenceException(nameof(propertyConfiguration.IgnoreRulesKeyWords)); throw new NullReferenceException(nameof(metadataConfiguration.PropertyContentCollectionFiles));
if (propertyConfiguration.PropertyContentCollectionFiles is null) if (metadataConfiguration.ValidImageFormatExtensions is null || metadataConfiguration.ValidImageFormatExtensions.Length == 0)
throw new NullReferenceException(nameof(propertyConfiguration.PropertyContentCollectionFiles)); throw new NullReferenceException(nameof(metadataConfiguration.ValidImageFormatExtensions));
if (propertyConfiguration.ValidImageFormatExtensions is null || propertyConfiguration.ValidImageFormatExtensions.Length == 0) if (metadataConfiguration is null)
throw new NullReferenceException(nameof(propertyConfiguration.ValidImageFormatExtensions)); throw new NullReferenceException(nameof(metadataConfiguration));
if (propertyConfiguration is null) if (string.IsNullOrEmpty(metadataConfiguration.DateGroup))
throw new NullReferenceException(nameof(propertyConfiguration)); throw new NullReferenceException(nameof(metadataConfiguration.DateGroup));
if (string.IsNullOrEmpty(propertyConfiguration.DateGroup)) if (string.IsNullOrEmpty(metadataConfiguration.RootDirectory) || (requireExist && !Directory.Exists(metadataConfiguration.RootDirectory)))
throw new NullReferenceException(nameof(propertyConfiguration.DateGroup)); throw new NullReferenceException(nameof(metadataConfiguration.RootDirectory));
if (string.IsNullOrEmpty(propertyConfiguration.FileNameDirectorySeparator)) if (metadataConfiguration.RootDirectory != Path.GetFullPath(metadataConfiguration.RootDirectory))
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(); throw new Exception();
} }

View File

@ -34,6 +34,7 @@
<SupportedPlatform Include="browser" /> <SupportedPlatform Include="browser" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="CliWrap" Version="3.6.4" />
<PackageReference Include="runtime.win-x64.Microsoft.DotNet.ILCompiler" Version="8.0.0-rc.2.23479.6" /> <PackageReference Include="runtime.win-x64.Microsoft.DotNet.ILCompiler" Version="8.0.0-rc.2.23479.6" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="7.0.0" />

View File

@ -25,19 +25,21 @@ public class Rename
if (console is null) if (console is null)
throw new NullReferenceException(nameof(console)); throw new NullReferenceException(nameof(console));
_AppSettings = appSettings; _AppSettings = appSettings;
long ticks = DateTime.Now.Ticks;
_ConfigurationRoot = configurationRoot; _ConfigurationRoot = configurationRoot;
MetadataConfiguration metadataConfiguration = Metadata.Models.Binder.Configuration.Get(configurationRoot); MetadataConfiguration metadataConfiguration = Metadata.Models.Binder.Configuration.Get(configurationRoot);
Configuration configuration = Models.Binder.Configuration.Get(configurationRoot, metadataConfiguration); Configuration configuration = Models.Binder.Configuration.Get(configurationRoot, metadataConfiguration);
_MetadataConfiguration = metadataConfiguration; _MetadataConfiguration = metadataConfiguration;
_Configuration = configuration; _Configuration = configuration;
logger?.LogInformation("{RootDirectory}", metadataConfiguration.RootDirectory); DirectoryInfo directoryInfo = new(Path.GetFullPath(metadataConfiguration.RootDirectory));
logger?.LogInformation("{RootDirectory}", directoryInfo.FullName);
MetadataConfiguration.Verify(metadataConfiguration, requireExist: false); MetadataConfiguration.Verify(metadataConfiguration, requireExist: false);
Verify(); Verify();
List<string> linesB = RenameFilesInDirectories(logger); List<string> linesB = RenameFilesInDirectories(logger, ticks, directoryInfo);
if (linesB.Count != 0) if (linesB.Count != 0)
{ {
File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", linesB); 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)); throw new NullReferenceException(nameof(_MetadataConfiguration));
} }
private List<string> 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<string> RenameFilesInDirectories(ILogger? logger, long ticks, DirectoryInfo directoryInfo)
{ {
List<string> old = []; List<string> old = [];
List<ExifDirectory> exifDirectories = []; List<ExifDirectory> exifDirectories = [];
string rootDirectoryFullPath = Path.GetFullPath(_MetadataConfiguration.RootDirectory); bool runToDoCollectionFirst = GetRunToDoCollectionFirst(ticks, directoryInfo);
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism }; IEnumerable<string> files = Directory.EnumerateFiles(directoryInfo.FullName, "*", SearchOption.AllDirectories);
IEnumerable<string> files = Directory.EnumerateFiles(rootDirectoryFullPath, "*", SearchOption.AllDirectories);
A_Metadata metadata = new(_MetadataConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata); A_Metadata metadata = new(_MetadataConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata);
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 }); ProgressBar progressBar = new(123000, "EnumerateFiles load", new ProgressBarOptions() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true });
files.AsParallel().ForAll(A_Metadata.GetResultCollection(metadata, exifDirectories, () => progressBar.Tick())); files.AsParallel().ForAll(A_Metadata.GetResultCollection(_MetadataConfiguration, metadata, exifDirectories, () => progressBar.Tick()));
if (progressBar.CurrentTick != exifDirectories.Count) if (progressBar.CurrentTick != exifDirectories.Count)
throw new NotSupportedException(); throw new NotSupportedException();
}
return old; return old;
} }

View File

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

View File

@ -1,12 +1,10 @@
namespace View_by_Distance.Shared.Models.Properties; namespace View_by_Distance.Shared.Models.Properties;
public interface IAAConfiguration public interface IMetadataConfiguration
{ {
public string DateGroup { init; get; } public string DateGroup { init; get; }
public string[] IgnoreExtensions { init; get; } public string[] IgnoreExtensions { init; get; }
public string[] IgnoreRulesKeyWords { init; get; }
public string PersonBirthdayFormat { init; get; }
public bool PropertiesChangedForProperty { init; get; } public bool PropertiesChangedForProperty { init; get; }
public string[] PropertyContentCollectionFiles { init; get; } public string[] PropertyContentCollectionFiles { init; get; }
public string ResultAllInOne { init; get; } public string ResultAllInOne { init; get; }

View File

@ -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; }
}

View File

@ -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; namespace View_by_Distance.Shared.Models.Stateless;
internal abstract class Id internal abstract class Id
@ -17,4 +20,46 @@ internal abstract class Id
return result; 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;
}
} }

View File

@ -1,3 +1,5 @@
using View_by_Distance.Shared.Models.Properties;
namespace View_by_Distance.Shared.Models.Stateless.Methods; namespace View_by_Distance.Shared.Models.Stateless.Methods;
public interface IId public interface IId
@ -18,9 +20,9 @@ public interface IId
static string GetPaddedId(int intMinValueLength, int index, int id) => 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')}"; 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); NameWithoutExtensionIsPaddedIdFormat(fileNameWithoutExtension, sortOrderOnlyLengthIndex);
static bool NameWithoutExtensionIsPaddedIdFormat(string fileNameWithoutExtension, int sortOrderOnlyLengthIndex) => static bool NameWithoutExtensionIsPaddedIdFormat(string fileNameWithoutExtension, short sortOrderOnlyLengthIndex) =>
fileNameWithoutExtension.Length > sortOrderOnlyLengthIndex fileNameWithoutExtension.Length > sortOrderOnlyLengthIndex
&& fileNameWithoutExtension[sortOrderOnlyLengthIndex] == '0' && fileNameWithoutExtension[sortOrderOnlyLengthIndex] == '0'
&& fileNameWithoutExtension[sortOrderOnlyLengthIndex - 3] == '0' && fileNameWithoutExtension[sortOrderOnlyLengthIndex - 3] == '0'
@ -31,9 +33,9 @@ public interface IId
static short GetSortOrderOnlyLengthIndex(int offset) => static short GetSortOrderOnlyLengthIndex(int offset) =>
(short)(offset.ToString().Length + 3); (short)(offset.ToString().Length + 3);
bool TestStatic_NameWithoutExtensionIsPaddedIdFormat(FileHolder fileHolder, int sortOrderOnlyLengthIndex) => NameWithoutExtension TestStatic_GetNameWithoutExtension(IMetadataConfiguration configuration, string file) =>
NameWithoutExtensionIsPaddedIdFormat(fileHolder, sortOrderOnlyLengthIndex); GetNameWithoutExtension(configuration, file);
static bool NameWithoutExtensionIsPaddedIdFormat(FileHolder fileHolder, int sortOrderOnlyLengthIndex) => static NameWithoutExtension GetNameWithoutExtension(IMetadataConfiguration configuration, string file) =>
NameWithoutExtensionIsPaddedIdFormat(fileHolder.NameWithoutExtension, sortOrderOnlyLengthIndex); Id.GetNameWithoutExtension(configuration, file);
} }

View File

@ -66,9 +66,9 @@ public interface IPath
static (string, int) GetDirectoryNameAndIndex(int resultAllInOneSubdirectoryLength, string fileName) => static (string, int) GetDirectoryNameAndIndex(int resultAllInOneSubdirectoryLength, string fileName) =>
XPath.GetDirectoryNameAndIndex(resultAllInOneSubdirectoryLength, fileName); XPath.GetDirectoryNameAndIndex(resultAllInOneSubdirectoryLength, fileName);
Dictionary<string, string[]> TestStatic_GetKeyValuePairs(IAAConfiguration aAConfiguration, string? resultsFullGroupDirectory, string[]? directories) => Dictionary<string, string[]> TestStatic_GetKeyValuePairs(IMetadataConfiguration aAConfiguration, string? resultsFullGroupDirectory, string[]? directories) =>
GetKeyValuePairs(aAConfiguration, resultsFullGroupDirectory, directories); GetKeyValuePairs(aAConfiguration, resultsFullGroupDirectory, directories);
static Dictionary<string, string[]> GetKeyValuePairs(IAAConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? directories) => static Dictionary<string, string[]> GetKeyValuePairs(IMetadataConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? directories) =>
XPath.GetKeyValuePairs(propertyConfiguration, resultsFullGroupDirectory, directories); XPath.GetKeyValuePairs(propertyConfiguration, resultsFullGroupDirectory, directories);
} }

View File

@ -5,44 +5,44 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
public interface IResult public interface IResult
{ {
string TestStatic_GetRelativePath(IAAConfiguration aAConfiguration, string path) => string TestStatic_GetRelativePath(IMetadataConfiguration aAConfiguration, string path) =>
GetRelativePath(aAConfiguration, path); GetRelativePath(aAConfiguration, path);
static string GetRelativePath(IAAConfiguration aAConfiguration, string path) => static string GetRelativePath(IMetadataConfiguration aAConfiguration, string path) =>
XResult.GetRelativePath(aAConfiguration, 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); 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); XResult.GetResultsGroupDirectory(aAConfiguration, description, create);
string TestStatic_GetResultsGroupDirectory(IAAConfiguration aAConfiguration, string description) => string TestStatic_GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description) =>
GetResultsGroupDirectory(aAConfiguration, description); GetResultsGroupDirectory(aAConfiguration, description);
static string GetResultsGroupDirectory(IAAConfiguration aAConfiguration, string description) => static string GetResultsGroupDirectory(IMetadataConfiguration aAConfiguration, string description) =>
XResult.GetResultsGroupDirectory(aAConfiguration, description, create: true); XResult.GetResultsGroupDirectory(aAConfiguration, description, create: true);
string TestStatic_GetResultsDateGroupDirectory(IAAConfiguration aAConfiguration, string description) => string TestStatic_GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description) =>
GetResultsDateGroupDirectory(aAConfiguration, description); GetResultsDateGroupDirectory(aAConfiguration, description);
static string GetResultsDateGroupDirectory(IAAConfiguration aAConfiguration, string description) => static string GetResultsDateGroupDirectory(IMetadataConfiguration aAConfiguration, string description) =>
XResult.GetResultsDateGroupDirectory(aAConfiguration, 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); 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); XResult.GetResultsDateGroupDirectory(aAConfiguration, description, jsonGroup);
List<string> TestStatic_GetDirectoryInfoCollection(IAAConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) => List<string> TestStatic_GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) =>
GetDirectoryInfoCollection(aAConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted); GetDirectoryInfoCollection(aAConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted);
static List<string> GetDirectoryInfoCollection(IAAConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) => static List<string> GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) =>
XResult.GetDirectoryInfoCollection(aAConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, 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); 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); XResult.GetResultsFullGroupDirectory(aAConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
List<string> TestStatic_GetDirectoryInfoCollection(IAAConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) => List<string> 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); GetDirectoryInfoCollection(aAConfiguration, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription);
static List<string> GetDirectoryInfoCollection(IAAConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) => static List<string> 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); XResult.GetDirectoryInfoCollection(aAConfiguration, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription);
} }

View File

@ -283,7 +283,7 @@ internal abstract class XPath
return (result, converted); return (result, converted);
} }
internal static Dictionary<string, string[]> GetKeyValuePairs(IAAConfiguration aAConfiguration, string? resultsFullGroupDirectory, string[]? directories) internal static Dictionary<string, string[]> GetKeyValuePairs(IMetadataConfiguration aAConfiguration, string? resultsFullGroupDirectory, string[]? directories)
{ {
Dictionary<string, string[]> results = []; Dictionary<string, string[]> results = [];
string directory; string directory;

View File

@ -5,7 +5,7 @@ namespace View_by_Distance.Shared.Models.Stateless;
internal abstract class XResult 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); string result = Path.Combine(GetResultsDateGroupDirectory(aAConfiguration, description), jsonGroup);
if (!Directory.Exists(result)) if (!Directory.Exists(result))
@ -13,7 +13,7 @@ internal abstract class XResult
return result; 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); string result = Path.Combine(GetResultsGroupDirectory(aAConfiguration, description, create: true), aAConfiguration.DateGroup);
if (!Directory.Exists(result)) if (!Directory.Exists(result))
@ -21,13 +21,13 @@ internal abstract class XResult
return result; 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); string result = Methods.IPath.GetRelativePath(path, aAConfiguration.RootDirectory.Length);
return result; 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; string checkDirectory;
checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultContent, aAConfiguration.ResultAllInOne); checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultContent, aAConfiguration.ResultAllInOne);
@ -41,7 +41,7 @@ internal abstract class XResult
_ = Directory.CreateDirectory(checkDirectory); _ = 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; string checkDirectory;
checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultSingleton, aAConfiguration.ResultAllInOne); checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultSingleton, aAConfiguration.ResultAllInOne);
@ -58,7 +58,7 @@ internal abstract class XResult
_ = Directory.CreateDirectory(checkDirectory); _ = 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); string checkDirectory = Path.Combine(dateGroupDirectory, aAConfiguration.ResultCollection, aAConfiguration.ResultAllInOne);
if (!Directory.Exists(checkDirectory)) if (!Directory.Exists(checkDirectory))
@ -74,7 +74,7 @@ internal abstract class XResult
_ = Directory.CreateDirectory(checkDirectory); _ = 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); string result = GetResultsDateGroupDirectory(aAConfiguration, description);
if (includeResizeGroup) if (includeResizeGroup)
@ -103,7 +103,7 @@ internal abstract class XResult
return result; return result;
} }
internal static List<string> GetDirectoryInfoCollection(IAAConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) internal static List<string> GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted)
{ {
List<string> results = []; List<string> results = [];
string sourceDirectorySegment = GetRelativePath(aAConfiguration, sourceDirectory); string sourceDirectorySegment = GetRelativePath(aAConfiguration, sourceDirectory);
@ -118,7 +118,7 @@ internal abstract class XResult
return results; 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('_', ')')); string result = Path.Combine($"{aAConfiguration.RootDirectory}-Results", description.Replace('_', ')'));
if (create && !Directory.Exists(result)) if (create && !Directory.Exists(result))
@ -126,7 +126,7 @@ internal abstract class XResult
return result; return result;
} }
internal static List<string> GetDirectoryInfoCollection(IAAConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) internal static List<string> GetDirectoryInfoCollection(IMetadataConfiguration aAConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription)
{ {
List<string> results; List<string> results;
bool converted = false; bool converted = false;