Removed Configuration.SetAndUpdate

This commit is contained in:
Mike Phares 2023-08-12 10:45:38 -07:00
parent 2f5d309ed1
commit 1c5a2f1d93
57 changed files with 1065 additions and 1542 deletions

View File

@ -36,10 +36,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration, int? numberOfJitters, int? numberOfTimesToUpsample, string? modelName, string? predictorModelName)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update(numberOfJitters, numberOfTimesToUpsample, modelName, predictorModelName);
}
} }

View File

@ -19,7 +19,6 @@ public abstract class Configuration
if (result is null) if (result is null)
throw new Exception(json); throw new Exception(json);
string jsonThis = result.ToString(); string jsonThis = result.ToString();
result.SetAndUpdate(propertyConfiguration, null, null, null, null);
if (jsonThis != json) if (jsonThis != json)
{ {
int? check = null; int? check = null;

View File

@ -34,7 +34,6 @@ public class CopyDistinct
Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_Configuration = configuration; _Configuration = configuration;
propertyConfiguration.Update();
log.Information(propertyConfiguration.RootDirectory); log.Information(propertyConfiguration.RootDirectory);
(bool move, List<string[]> filesCollection, bool anyLenFiles, bool moveBack) = Verify(); (bool move, List<string[]> filesCollection, bool anyLenFiles, bool moveBack) = Verify();
_FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, appSettings.CopyTo, new string[] { appSettings.ResultDirectoryKey }); _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, appSettings.CopyTo, new string[] { appSettings.ResultDirectoryKey });

View File

@ -52,7 +52,6 @@ public class Configuration
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration);
result.SetAndUpdate(propertyConfiguration);
return result; return result;
} }

View File

@ -29,10 +29,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
} }

View File

@ -70,7 +70,6 @@ public class Configuration
result = Get(configuration); result = Get(configuration);
if (configuration is null) if (configuration is null)
throw new NullReferenceException(nameof(configuration)); throw new NullReferenceException(nameof(configuration));
result.SetAndUpdate(propertyConfiguration);
return result; return result;
} }

View File

@ -34,10 +34,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
} }

View File

@ -22,7 +22,6 @@ public class DeleteByDistinct
Dictionary<string, List<string>> keyValuePairs = new(); Dictionary<string, List<string>> keyValuePairs = new();
Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
configuration.Update();
log.Information(configuration.RootDirectory); log.Information(configuration.RootDirectory);
if (!appSettings.TicksForLong && !appSettings.SizeForLong) if (!appSettings.TicksForLong && !appSettings.SizeForLong)
throw new Exception("Check appSettings file!"); throw new Exception("Check appSettings file!");

View File

@ -22,7 +22,6 @@ public class DeleteByRelative
long ticks = DateTime.Now.Ticks; long ticks = DateTime.Now.Ticks;
ILogger? log = Log.ForContext<DeleteByRelative>(); ILogger? log = Log.ForContext<DeleteByRelative>();
Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);
configuration.Update();
log.Information(configuration.RootDirectory); log.Information(configuration.RootDirectory);
int length = configuration.RootDirectory.Length; int length = configuration.RootDirectory.Length;
if (string.IsNullOrEmpty(appSettings.CompareRootDirectory) || Path.GetFullPath(appSettings.CompareRootDirectory) == Path.GetFullPath(configuration.RootDirectory)) if (string.IsNullOrEmpty(appSettings.CompareRootDirectory) || Path.GetFullPath(appSettings.CompareRootDirectory) == Path.GetFullPath(configuration.RootDirectory))

View File

@ -180,7 +180,6 @@ public class Configuration
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration);
result.SetAndUpdate(propertyConfiguration);
return result; return result;
} }

View File

@ -136,10 +136,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
} }

View File

@ -41,12 +41,4 @@
<ProjectReference Include="..\Property\Property.csproj" /> <ProjectReference Include="..\Property\Property.csproj" />
<ProjectReference Include="..\Shared\View-by-Distance.Shared.csproj" /> <ProjectReference Include="..\Shared\View-by-Distance.Shared.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="appsettings.Development.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>

View File

@ -48,8 +48,6 @@ public partial class DragDropSetPropertyItem : Form
isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero);
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables() .AddEnvironmentVariables()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true)
.AddUserSecrets<Program>(); .AddUserSecrets<Program>();
configurationRoot = configurationBuilder.Build(); configurationRoot = configurationBuilder.Build();
appSettings = Models.Binder.AppSettings.Get(configurationRoot); appSettings = Models.Binder.AppSettings.Get(configurationRoot);
@ -62,7 +60,6 @@ public partial class DragDropSetPropertyItem : Form
logger = Log.ForContext<DragDropSetPropertyItem>(); logger = Log.ForContext<DragDropSetPropertyItem>();
Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
propertyConfiguration.Update();
logger.Information("Complete"); logger.Information("Complete");
_Logger = logger; _Logger = logger;
_AppSettings = appSettings; _AppSettings = appSettings;

View File

@ -1,11 +0,0 @@
{
"Logging": {
"LogLevel": {
"Log4netProvider": "Debug"
}
},
"MaxDegreeOfParallelism": 6,
"Serilog": {
"MinimumLevel": "Debug"
}
}

View File

@ -1,97 +0,0 @@
{
"Company": "Mike Phares",
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Log4netProvider": "Debug",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"IgnoreRulesKeyWords": [],
"MaxDegreeOfParallelism": 6,
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.File"
],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "Debug",
"Args": {
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}"
}
},
{
"Name": "Console",
"Args": {
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}"
}
},
{
"Name": "File",
"Args": {
"path": "%workingDirectory% - Log/log-.txt",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}",
"rollingInterval": "Hour"
}
}
],
"Enrich": [
"FromLogContext",
"WithMachineName",
"WithThreadId"
],
"Properties": {
"Application": "Sample"
}
},
"ValidKeyWords": [
"Review"
],
"WorkingDirectoryName": "PharesApps",
"Windows": {
"Configuration": {
"DateGroup": "dd514b88",
"DiffPropertyDirectory": "",
"FileNameDirectorySeparator": ".Z.",
"ForcePropertyLastWriteTimeToCreationTime": false,
"MaxImagesInDirectoryForTopLevelFirstPass": 10,
"OutputExtension": ".jpg",
"Pattern": "[^ABCDEFGHIJKLMNOPQRSTUVWXYZbcdfghjklmnpqrstvwxyz0-9]",
"PopulatePropertyId": true,
"PropertiesChangedForProperty": false,
"ResultAllInOne": "_ _ _",
"ResultAllInOneSubdirectoryLength": 2,
"ResultCollection": "[]",
"ResultContent": "()",
"ResultSingleton": "{}",
"RootDirectory": "C:/Tmp/Phares/Compare/Images-dd514b88",
"IgnoreExtensions": [
".gif",
".GIF",
".nef",
".NEF",
".pdf",
".PDF"
],
"ValidImageFormatExtensions": [
".bmp",
".BMP",
".gif",
".GIF",
".jpeg",
".JPEG",
".jpg",
".JPG",
".png",
".PNG",
".tiff",
".TIFF",
".tif",
".TIF"
]
}
}
}

View File

@ -24,7 +24,6 @@ public class DuplicateSearch
long ticks = DateTime.Now.Ticks; long ticks = DateTime.Now.Ticks;
ILogger? log = Log.ForContext<DuplicateSearch>(); ILogger? log = Log.ForContext<DuplicateSearch>();
Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);
configuration.Update();
log.Information(configuration.RootDirectory); log.Information(configuration.RootDirectory);
if (appSettings.IndexOnly) if (appSettings.IndexOnly)
WriteIndexData(ticks, configuration, searchPattern); WriteIndexData(ticks, configuration, searchPattern);

View File

@ -195,6 +195,15 @@ public partial class DlibDotNet
private static void Verify(Models.Configuration configuration) private static void Verify(Models.Configuration configuration)
{ {
if (configuration.RangeDaysDeltaTolerance.Length != 3)
throw new NullReferenceException(nameof(configuration.RangeDaysDeltaTolerance));
if (configuration.RangeDistanceTolerance.Length != 3)
throw new NullReferenceException(nameof(configuration.RangeDistanceTolerance));
if (configuration.RangeFaceAreaPermyriadTolerance.Length != 3)
throw new NullReferenceException(nameof(configuration.RangeFaceAreaPermyriadTolerance));
if (configuration.RangeFaceConfidence.Length != 3)
throw new NullReferenceException(nameof(configuration.RangeFaceConfidence));
_ = DateTime.Now.AddDays(-configuration.RangeDaysDeltaTolerance[1]);
if (configuration.OutputResolutions.Length == 0 || string.IsNullOrEmpty(configuration.OutputResolutions[0]) || !configuration.ValidResolutions.Contains(configuration.OutputResolutions[0])) if (configuration.OutputResolutions.Length == 0 || string.IsNullOrEmpty(configuration.OutputResolutions[0]) || !configuration.ValidResolutions.Contains(configuration.OutputResolutions[0]))
throw new NullReferenceException($"{nameof(configuration.OutputResolutions)} must be fileNameToCollection valid outputResolution!"); throw new NullReferenceException($"{nameof(configuration.OutputResolutions)} must be fileNameToCollection valid outputResolution!");
if ((from l in configuration.OutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any()) if ((from l in configuration.OutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any())
@ -783,7 +792,7 @@ public partial class DlibDotNet
SortingContainer[] sortingContainers; SortingContainer[] sortingContainers;
FaceDistanceContainer[] filteredFaceDistanceContainers; FaceDistanceContainer[] filteredFaceDistanceContainers;
long? skipOlderThan = _Configuration.SkipOlderThanDays is null ? null : new DateTime(ticks).AddDays(-_Configuration.SkipOlderThanDays.Value).Ticks; long? skipOlderThan = _Configuration.SkipOlderThanDays is null ? null : new DateTime(ticks).AddDays(-_Configuration.SkipOlderThanDays.Value).Ticks;
distanceLimits = new(_Configuration.FaceAreaPermyriad, _Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeDistanceTolerance, _Configuration.RangeFaceAreaTolerance, _Configuration.RangeFaceConfidence, _Configuration.SortingMaximumPerFaceShouldBeHigh); distanceLimits = new(_Configuration.FaceAreaPermyriad, _Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeDistanceTolerance, _Configuration.RangeFaceAreaPermyriadTolerance, _Configuration.RangeFaceConfidence, _Configuration.SortingMaximumPerFaceShouldBeHigh);
filteredFaceDistanceContainers = E_Distance.FilteredFaceDistanceContainers(mapLogic, faceDistanceContainers, skipOlderThan, distanceLimits); filteredFaceDistanceContainers = E_Distance.FilteredFaceDistanceContainers(mapLogic, faceDistanceContainers, skipOlderThan, distanceLimits);
if (filteredFaceDistanceContainers.Length == 0) if (filteredFaceDistanceContainers.Length == 0)
_Log.Information("All images have been filtered!"); _Log.Information("All images have been filtered!");
@ -794,7 +803,7 @@ public partial class DlibDotNet
{ {
for (useFiltersCounter = 1; useFiltersCounter < _Configuration.UseFilterTries; useFiltersCounter++) for (useFiltersCounter = 1; useFiltersCounter < _Configuration.UseFilterTries; useFiltersCounter++)
{ {
distanceLimits = new(_Configuration.FaceAreaPermyriad, _Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeDistanceTolerance, _Configuration.RangeFaceAreaTolerance, _Configuration.RangeFaceConfidence, _Configuration.SortingMaximumPerFaceShouldBeHigh, useFiltersCounter); distanceLimits = new(_Configuration.FaceAreaPermyriad, _Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeDistanceTolerance, _Configuration.RangeFaceAreaPermyriadTolerance, _Configuration.RangeFaceConfidence, _Configuration.SortingMaximumPerFaceShouldBeHigh, useFiltersCounter);
filteredFaceDistanceContainers = E_Distance.FilteredFaceDistanceContainers(mapLogic, faceDistanceContainers, skipOlderThan, distanceLimits); filteredFaceDistanceContainers = E_Distance.FilteredFaceDistanceContainers(mapLogic, faceDistanceContainers, skipOlderThan, distanceLimits);
if (filteredFaceDistanceContainers.Length == 0) if (filteredFaceDistanceContainers.Length == 0)
_Log.Information("All images have been filtered!"); _Log.Information("All images have been filtered!");
@ -1238,7 +1247,7 @@ public partial class DlibDotNet
&& _Exceptions.Count == 0) && _Exceptions.Count == 0)
MapLogic(ticks, new(containers), fPhotoPrismContentDirectory, mapLogic, outputResolution, new(personKeyToIds), distinctFilteredFaces, distinctFilteredMappingCollection); MapLogic(ticks, new(containers), fPhotoPrismContentDirectory, mapLogic, outputResolution, new(personKeyToIds), distinctFilteredFaces, distinctFilteredMappingCollection);
if (_Configuration.SaveRandomForOutputResolutions.Contains(outputResolution) && personKeyToIds.Count > 0 && distinctFilteredMappingCollection.Count > 0) if (_Configuration.SaveRandomForOutputResolutions.Contains(outputResolution) && personKeyToIds.Count > 0 && distinctFilteredMappingCollection.Count > 0)
_Random.Random(_Configuration.PropertyConfiguration, _Configuration.ValidKeyWordsToIgnoreInRandom, outputResolution, personKeyToIds, distinctFilteredMappingCollection); _Random.Random(_Configuration.PropertyConfiguration, _Configuration.RadomUseBirthdayMinimum, _Configuration.ValidKeyWordsToIgnoreInRandom, outputResolution, personKeyToIds, distinctFilteredMappingCollection);
if (_IsEnvironment.Development) if (_IsEnvironment.Development)
continue; continue;
if (!_IsEnvironment.Development) if (!_IsEnvironment.Development)

View File

@ -0,0 +1,2 @@
[*.cs]
csharp_preserve_single_line_statements = true

View File

@ -7,13 +7,9 @@ namespace View_by_Distance.Instance.Models.Binder;
public class AppSettings public class AppSettings
{ {
#nullable disable public string? Company { get; set; }
public string Company { get; set; }
public int? MaxDegreeOfParallelism { get; set; } public int? MaxDegreeOfParallelism { get; set; }
public string WorkingDirectoryName { get; set; } public string? WorkingDirectoryName { get; set; }
#nullable restore
public override string ToString() public override string ToString()
{ {
@ -24,8 +20,9 @@ public class AppSettings
private static Models.AppSettings Get(AppSettings? appSettings) private static Models.AppSettings Get(AppSettings? appSettings)
{ {
Models.AppSettings result; Models.AppSettings result;
if (appSettings?.MaxDegreeOfParallelism is null) if (appSettings?.Company is null) throw new NullReferenceException(nameof(appSettings.Company));
throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism)); if (appSettings?.MaxDegreeOfParallelism is null) throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism));
if (appSettings?.WorkingDirectoryName is null) throw new NullReferenceException(nameof(appSettings.WorkingDirectoryName));
result = new( result = new(
appSettings.Company, appSettings.Company,
appSettings.MaxDegreeOfParallelism.Value, appSettings.MaxDegreeOfParallelism.Value,

View File

@ -1,6 +1,5 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Phares.Shared; using Phares.Shared;
using System.ComponentModel.DataAnnotations;
using System.Text.Json; using System.Text.Json;
namespace View_by_Distance.Instance.Models.Binder; namespace View_by_Distance.Instance.Models.Binder;
@ -8,94 +7,90 @@ namespace View_by_Distance.Instance.Models.Binder;
public class Configuration public class Configuration
{ {
#nullable disable public bool? CheckDFaceAndUpWriteDates { get; set; }
public bool? CheckJsonForDistanceResults { get; set; }
[Display(Name = "Check D Face and Up Dates"), Required] public bool? CheckDFaceAndUpWriteDates { get; set; } public string[]? CopyFacesAndSaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Check Json For Distance Results"), Required] public bool? CheckJsonForDistanceResults { get; set; } public int? CrossDirectoryMaxItemsInDistanceCollection { get; set; }
[Display(Name = "Copy Faces and Face Landmark for Output Resolutions"), Required] public string[] CopyFacesAndSaveFaceLandmarkForOutputResolutions { get; set; } public bool? DeletePossibleDuplicates { get; set; }
[Display(Name = "CrossDirectory Max Items In Distance Collection"), Required] public int? CrossDirectoryMaxItemsInDistanceCollection { get; set; } public int? DistanceFactor { get; set; }
[Display(Name = "Delete Possible Duplicates"), Required] public bool? DeletePossibleDuplicates { get; set; } public bool? DistanceMoveUnableToMatch { get; set; }
[Display(Name = "Distance Factor"), Required] public int? DistanceFactor { get; set; } public int? DistancePixelDistanceTolerance { get; set; }
[Display(Name = "Distance Move Unable to Match by 1 Tick"), Required] public bool? DistanceMoveUnableToMatch { get; set; } public bool? DistanceRenameToMatch { get; set; }
[Display(Name = "Distance Pixel Distance Tolerance"), Required] public int? DistancePixelDistanceTolerance { get; set; } public int? EyeThreshold { get; set; }
[Display(Name = "Distance Rename to Match"), Required] public bool? DistanceRenameToMatch { get; set; } public int? FaceAreaPermyriad { get; set; }
[Display(Name = "Eye Threshold"), Required] public int? EyeThreshold { get; set; } public int? FaceConfidencePercent { get; set; }
[Display(Name = "Face Area Permille"), Required] public int? FaceAreaPermyriad { get; set; } public int? FaceDistanceHiddenImageFactor { get; set; }
[Display(Name = "Face Distance Hidden Image Factor"), Required] public int? FaceDistanceHiddenImageFactor { get; set; } public int? FaceDistancePermyriad { get; set; }
[Display(Name = "Face Confidence Percent"), Required] public int? FaceConfidencePercent { get; set; } public string? FocusDirectory { get; set; }
[Display(Name = "Face Distance Permyriad"), Required] public int? FaceDistancePermyriad { get; set; } public string? FocusModel { get; set; }
[Display(Name = "Focus Directory"), Required] public string FocusDirectory { get; set; } public bool? ForceFaceLastWriteTimeToCreationTime { get; set; }
[Display(Name = "Focus Model"), Required] public string FocusModel { get; set; } public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; }
[Display(Name = "Force Face Last Write Time to Creation Time"), Required] public bool? ForceFaceLastWriteTimeToCreationTime { get; set; } public bool? ForceResizeLastWriteTimeToCreationTime { get; set; }
[Display(Name = "Force Metadata Last Write Time to Creation Time"), Required] public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; } public string? GenealogicalDataCommunicationFile { get; set; }
[Display(Name = "Force Resize Last Write Time to Creation Time"), Required] public bool? ForceResizeLastWriteTimeToCreationTime { get; set; } public string[]? IgnoreExtensions { get; set; }
[Display(Name = "GenealogicalDataCommunication File"), Required] public string GenealogicalDataCommunicationFile { get; set; } public string[]? JLinks { get; set; }
[Display(Name = "Ignore Extensions"), Required] public string[] IgnoreExtensions { get; set; } public string[]? LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; }
[Display(Name = "Julie Phares Copy Birthdays"), Required] public string[] JLinks { get; set; } public string[]? LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; }
[Display(Name = "Load Or Create Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } public bool? LoadPhotoPrismLocations { get; set; }
[Display(Name = "Load Or Create Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } public float? LocationContainerDistanceTolerance { get; set; }
[Display(Name = "Load PhotoPrism Locations"), Required] public bool? LoadPhotoPrismLocations { get; set; } public int? LocationDigits { get; set; }
[Display(Name = "Location Containers Distance Tolerance"), Required] public float? LocationContainerDistanceTolerance { get; set; } public int? LocationFactor { get; set; }
[Display(Name = "Location Digits"), Required] public int? LocationDigits { get; set; } public bool? LookForAbandoned { get; set; }
[Display(Name = "Location Factor"), Required] public int? LocationFactor { get; set; } public string? MappingDefaultName { get; set; }
[Display(Name = "Look for Abandoned"), Required] public bool? LookForAbandoned { get; set; } public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { get; set; }
[Display(Name = "Mapping Default Name"), Required] public string MappingDefaultName { get; set; } public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { get; set; }
[Display(Name = "Mapping Use Deterministic Hash Code Unknown Face Key Value Pairs for Add to Mapping"), Required] public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { get; set; } public string[]? MixedYearRelativePaths { get; set; }
[Display(Name = "Mapping Use Deterministic Hash Code Unknown Face Key Value Pairs for Save Mapping"), Required] public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { get; set; } public string? ModelDirectory { get; set; }
[Display(Name = "Mixed Year Relative Paths"), Required] public string[] MixedYearRelativePaths { get; set; } public string? ModelName { get; set; }
[Display(Name = "Model Directory"), Required] public string ModelDirectory { get; set; } public int? NumberOfJitters { get; set; }
[Display(Name = "Model Name"), Required] public string ModelName { get; set; } public int? NumberOfTimesToUpsample { get; set; }
[Display(Name = "Number Jitters"), Required] public int? NumberOfJitters { get; set; } public string? OutputExtension { get; set; }
[Display(Name = "Number of Times To Up Sample"), Required] public int? NumberOfTimesToUpsample { get; set; } public int? OutputQuality { get; set; }
[Display(Name = "Output Extension"), Required] public string OutputExtension { get; set; } public string[]? OutputResolutions { get; set; }
[Display(Name = "Output Quality"), Required] public int? OutputQuality { get; set; } public bool? OverrideForFaceImages { get; set; }
[Display(Name = "Output Resolutions"), Required] public string[] OutputResolutions { get; set; } public bool? OverrideForFaceLandmarkImages { get; set; }
[Display(Name = "Override For Face Images"), Required] public bool? OverrideForFaceImages { get; set; } public bool? OverrideForResizeImages { get; set; }
[Display(Name = "Override For Face Landmark Images"), Required] public bool? OverrideForFaceLandmarkImages { get; set; } public int? PersonBirthdayFirstYear { get; set; }
[Display(Name = "Override For Resize Images"), Required] public bool? OverrideForResizeImages { get; set; } public string? PersonBirthdayFormat { get; set; }
[Display(Name = "Person Birthday First Year"), Required] public int? PersonBirthdayFirstYear { get; set; } public string? PersonCharacters { get; set; }
[Display(Name = "Person Birthday Format"), Required] public string PersonBirthdayFormat { get; set; } public int? PersonCharactersCopyCount { get; set; }
[Display(Name = "Person Characters"), Required] public string PersonCharacters { get; set; } public string? PersonKeyFormat { get; set; }
[Display(Name = "Person Characters Copy Count"), Required] public int? PersonCharactersCopyCount { get; set; } public string? PredictorModelName { get; set; }
[Display(Name = "PersonKey Format"), Required] public string PersonKeyFormat { get; set; } public bool? PropertiesChangedForDistance { get; set; }
[Display(Name = "Predictor Model Name"), Required] public string PredictorModelName { get; set; } public bool? PropertiesChangedForFaces { get; set; }
[Display(Name = "Properties Changed For Distance"), Required] public bool? PropertiesChangedForDistance { get; set; } public bool? PropertiesChangedForIndex { get; set; }
[Display(Name = "Properties Changed For Faces"), Required] public bool? PropertiesChangedForFaces { get; set; } public bool? PropertiesChangedForMetadata { get; set; }
[Display(Name = "Properties Changed For Index"), Required] public bool? PropertiesChangedForIndex { get; set; } public bool? PropertiesChangedForResize { get; set; }
[Display(Name = "Properties Changed For Metadata"), Required] public bool? PropertiesChangedForMetadata { get; set; } public int? RadomUseBirthdayMinimum { get; set; }
[Display(Name = "Properties Changed For Resize"), Required] public bool? PropertiesChangedForResize { get; set; } public int[]? RangeDaysDeltaTolerance { get; set; }
[Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } public float[]? RangeDistanceTolerance { get; set; }
[Display(Name = "Sorting Days Delta Tolerance"), Required] public int[] RangeDaysDeltaTolerance { get; set; } public float[]? RangeFaceAreaTolerance { get; set; }
[Display(Name = "Face Distance Tolerance"), Required] public float[] RangeDistanceTolerance { get; set; } public float[]? RangeFaceConfidence { get; set; }
[Display(Name = "Face Area Permille Tolerance"), Required] public float[] RangeFaceAreaTolerance { get; set; } public float[]? RectangleIntersectMinimums { get; set; }
[Display(Name = "Location Minimum Confidence"), Required] public float[] RangeFaceConfidence { get; set; } public bool? Reverse { get; set; }
[Display(Name = "Rectangle Intersect Minimums"), Required] public float[] RectangleIntersectMinimums { get; set; } public string[]? SaveBlurHashForOutputResolutions { get; set; }
[Display(Name = "Reverse"), Required] public bool? Reverse { get; set; } public string[]? SaveFaceDistancesForOutputResolutions { get; set; }
[Display(Name = "Save Blur Hash For Output Resolutions"), Required] public string[] SaveBlurHashForOutputResolutions { get; set; } public string[]? SaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Save Face Distances For Output Resolutions"), Required] public string[] SaveFaceDistancesForOutputResolutions { get; set; } public string[]? SaveFilteredOriginalImagesFromJLinksForOutputResolutions { get; set; }
[Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; } public bool? SaveFullYearOfRandomFiles { get; set; }
[Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; } public bool? SaveIndividually { get; set; }
[Display(Name = "Save Mapped"), Required] public string[] SaveMappedForOutputResolutions { get; set; } public string[]? SaveMappedForOutputResolutions { get; set; }
[Display(Name = "Save Resized Images by Person Key Formatted"), Required] public string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions { get; set; } public string[]? SavePropertyShortcutsForOutputResolutions { get; set; }
[Display(Name = "Save For Individually"), Required] public bool? SaveIndividually { get; set; } public string[]? SaveRandomForOutputResolutions { get; set; }
[Display(Name = "Save Property Shortcuts for Output Resolutions"), Required] public string[] SavePropertyShortcutsForOutputResolutions { get; set; } public bool? SaveResizedSubfiles { get; set; }
[Display(Name = "Save Random For Output Resolutions"), Required] public string[] SaveRandomForOutputResolutions { get; set; } public string[]? SaveShortcutsForOutputResolutions { get; set; }
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; } public bool? SaveSortingWithoutPerson { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; } public string[]? SkipNotSkipDirectories { get; set; }
[Display(Name = "Save Sorting Without Person"), Required] public bool? SaveSortingWithoutPerson { get; set; } public int? SkipOlderThanDays { get; set; }
[Display(Name = "Skip Not Skip Directories"), Required] public string[] SkipNotSkipDirectories { get; set; } public int? SkipPersonWithMoreThen { get; set; }
[Display(Name = "Skip Older Than Days"), Required] public int? SkipOlderThanDays { get; set; } public bool? SkipSearch { get; set; }
[Display(Name = "Skip Person With More Then"), Required] public int? SkipPersonWithMoreThen { get; set; } public int? SortingMaximumPerFaceShouldBeHigh { get; set; }
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } public int? SortingMaximumPerKey { get; set; }
[Display(Name = "SortingMaximumPerFaceShould be High"), Required] public int? SortingMaximumPerFaceShouldBeHigh { get; set; } public int? SortingMinimumToUseSigma { get; set; }
[Display(Name = "Sorting Maximum Per Key"), Required] public int? SortingMaximumPerKey { get; set; } public bool? TestDistanceResults { get; set; }
[Display(Name = "Sorting Minimum to use Sigma"), Required] public int? SortingMinimumToUseSigma { get; set; } public int? UseFilterTries { get; set; }
[Display(Name = "Test Distance Results"), Required] public bool? TestDistanceResults { get; set; } public string[]? ValidKeyWordsToIgnoreInRandom { get; set; }
[Display(Name = "Use Filter Tries"), Required] public int? UseFilterTries { get; set; } public string[]? ValidResolutions { get; set; }
[Display(Name = "Valid KeyWords to Ignore in Random"), Required] public string[] ValidKeyWordsToIgnoreInRandom { get; set; }
[Display(Name = "Valid Resolutions"), Required] public string[] ValidResolutions { get; set; }
#nullable restore
public override string ToString() public override string ToString()
{ {
@ -103,154 +98,99 @@ public class Configuration
return result; return result;
} }
private static Models.Configuration Get(Configuration? configuration) #pragma warning restore csharp_preserve_single_line_statements
private static Models.Configuration Get(Configuration? configuration, Property.Models.Configuration propertyConfiguration)
{ {
Models.Configuration result; Models.Configuration result;
if (configuration is null) if (configuration is null) throw new NullReferenceException(nameof(configuration));
throw new NullReferenceException(nameof(configuration)); if (configuration.CheckDFaceAndUpWriteDates is null) throw new NullReferenceException(nameof(configuration.CheckDFaceAndUpWriteDates));
if (configuration.CheckDFaceAndUpWriteDates is null) if (configuration?.CheckDFaceAndUpWriteDates is null) throw new NullReferenceException(nameof(configuration.CheckDFaceAndUpWriteDates));
throw new NullReferenceException(nameof(configuration.CheckDFaceAndUpWriteDates)); if (configuration?.CheckJsonForDistanceResults is null) throw new NullReferenceException(nameof(configuration.CheckJsonForDistanceResults));
if (configuration.CheckJsonForDistanceResults is null) // if (configuration?.CopyFacesAndSaveFaceLandmarkForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions));
throw new NullReferenceException(nameof(configuration.CheckJsonForDistanceResults)); if (configuration?.CrossDirectoryMaxItemsInDistanceCollection is null) throw new NullReferenceException(nameof(configuration.CrossDirectoryMaxItemsInDistanceCollection));
configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ??= Array.Empty<string>(); if (configuration?.DeletePossibleDuplicates is null) throw new NullReferenceException(nameof(configuration.DeletePossibleDuplicates));
if (configuration.CrossDirectoryMaxItemsInDistanceCollection is null) if (configuration?.DistanceFactor is null) throw new NullReferenceException(nameof(configuration.DistanceFactor));
throw new NullReferenceException(nameof(configuration.CrossDirectoryMaxItemsInDistanceCollection)); if (configuration?.DistanceMoveUnableToMatch is null) throw new NullReferenceException(nameof(configuration.DistanceMoveUnableToMatch));
if (configuration.DeletePossibleDuplicates is null) if (configuration?.DistancePixelDistanceTolerance is null) throw new NullReferenceException(nameof(configuration.DistancePixelDistanceTolerance));
throw new NullReferenceException(nameof(configuration.DeletePossibleDuplicates)); if (configuration?.DistanceRenameToMatch is null) throw new NullReferenceException(nameof(configuration.DistanceRenameToMatch));
if (configuration.DistanceFactor is null) if (configuration?.EyeThreshold is null) throw new NullReferenceException(nameof(configuration.EyeThreshold));
throw new NullReferenceException(nameof(configuration.DistanceFactor)); if (configuration?.FaceAreaPermyriad is null) throw new NullReferenceException(nameof(configuration.FaceAreaPermyriad));
if (configuration.DistanceMoveUnableToMatch is null) if (configuration?.FaceConfidencePercent is null) throw new NullReferenceException(nameof(configuration.FaceConfidencePercent));
throw new NullReferenceException(nameof(configuration.DistanceMoveUnableToMatch)); if (configuration?.FaceDistanceHiddenImageFactor is null) throw new NullReferenceException(nameof(configuration.FaceDistanceHiddenImageFactor));
if (configuration.DistancePixelDistanceTolerance is null) if (configuration?.FaceDistancePermyriad is null) throw new NullReferenceException(nameof(configuration.FaceDistancePermyriad));
throw new NullReferenceException(nameof(configuration.DistancePixelDistanceTolerance)); if (configuration?.FocusDirectory is null) throw new NullReferenceException(nameof(configuration.FocusDirectory));
if (configuration.DistanceRenameToMatch is null) if (configuration?.FocusModel is null) throw new NullReferenceException(nameof(configuration.FocusModel));
throw new NullReferenceException(nameof(configuration.DistanceRenameToMatch)); if (configuration?.ForceFaceLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceFaceLastWriteTimeToCreationTime));
if (configuration.EyeThreshold is null) if (configuration?.ForceMetadataLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime));
throw new NullReferenceException(nameof(configuration.EyeThreshold)); if (configuration?.ForceResizeLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceResizeLastWriteTimeToCreationTime));
if (configuration.FaceAreaPermyriad is null) if (configuration?.GenealogicalDataCommunicationFile is null) throw new NullReferenceException(nameof(configuration.GenealogicalDataCommunicationFile));
throw new NullReferenceException(nameof(configuration.FaceAreaPermyriad)); // if (configuration?.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions));
if (configuration.FaceDistanceHiddenImageFactor is null) // if (configuration?.JLinks is null) throw new NullReferenceException(nameof(configuration.JLinks));
throw new NullReferenceException(nameof(configuration.FaceDistanceHiddenImageFactor)); // if (configuration?.LoadOrCreateThenSaveDistanceResultsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions));
if (configuration.FaceConfidencePercent is null) // if (configuration?.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions));
throw new NullReferenceException(nameof(configuration.FaceConfidencePercent)); if (configuration?.LoadPhotoPrismLocations is null) throw new NullReferenceException(nameof(configuration.LoadPhotoPrismLocations));
if (configuration.FaceDistancePermyriad is null) // if (configuration?.LocationContainerDistanceTolerance is null) throw new NullReferenceException(nameof(configuration.LocationContainerDistanceTolerance));
throw new NullReferenceException(nameof(configuration.FaceDistancePermyriad)); if (configuration?.LocationDigits is null) throw new NullReferenceException(nameof(configuration.LocationDigits));
if (configuration.FocusDirectory is null) if (configuration?.LocationFactor is null) throw new NullReferenceException(nameof(configuration.LocationFactor));
throw new NullReferenceException(nameof(configuration.FocusDirectory)); if (configuration?.LookForAbandoned is null) throw new NullReferenceException(nameof(configuration.LookForAbandoned));
if (configuration.FocusModel is null) if (configuration?.MappingDefaultName is null) throw new NullReferenceException(nameof(configuration.MappingDefaultName));
throw new NullReferenceException(nameof(configuration.FocusModel)); if (configuration?.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null) throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping));
if (configuration.ForceFaceLastWriteTimeToCreationTime is null) if (configuration?.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping is null) throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping));
throw new NullReferenceException(nameof(configuration.ForceFaceLastWriteTimeToCreationTime)); // if (configuration?.MixedYearRelativePaths is null) throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths));
if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) if (configuration?.ModelDirectory is null) throw new NullReferenceException(nameof(configuration.ModelDirectory));
throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime)); if (configuration?.ModelName is null) throw new NullReferenceException(nameof(configuration.ModelName));
if (configuration.ForceResizeLastWriteTimeToCreationTime is null) if (configuration?.OutputExtension is null) throw new NullReferenceException(nameof(configuration.OutputExtension));
throw new NullReferenceException(nameof(configuration.ForceResizeLastWriteTimeToCreationTime)); if (configuration?.OutputQuality is null) throw new NullReferenceException(nameof(configuration.OutputQuality));
if (configuration.GenealogicalDataCommunicationFile is null) // if (configuration?.OutputResolutions is null) throw new NullReferenceException(nameof(configuration.OutputResolutions));
throw new NullReferenceException(nameof(configuration.GenealogicalDataCommunicationFile)); if (configuration?.OverrideForFaceImages is null) throw new NullReferenceException(nameof(configuration.OverrideForFaceImages));
if (configuration.IgnoreExtensions is null) if (configuration?.OverrideForFaceLandmarkImages is null) throw new NullReferenceException(nameof(configuration.OverrideForFaceLandmarkImages));
throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); if (configuration?.OverrideForResizeImages is null) throw new NullReferenceException(nameof(configuration.OverrideForResizeImages));
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ??= Array.Empty<string>(); if (configuration?.PersonBirthdayFirstYear is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFirstYear));
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ??= Array.Empty<string>(); if (configuration?.PersonBirthdayFormat is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat));
if (configuration.LoadPhotoPrismLocations is null) if (configuration?.PersonCharacters is null) throw new NullReferenceException(nameof(configuration.PersonCharacters));
throw new NullReferenceException(nameof(configuration.LoadPhotoPrismLocations)); if (configuration?.PersonCharactersCopyCount is null) throw new NullReferenceException(nameof(configuration.PersonCharactersCopyCount));
if (configuration.LocationDigits is null) if (configuration?.PersonKeyFormat is null) throw new NullReferenceException(nameof(configuration.PersonKeyFormat));
throw new NullReferenceException(nameof(configuration.LocationDigits)); if (configuration?.PredictorModelName is null) throw new NullReferenceException(nameof(configuration.PredictorModelName));
if (configuration.LocationFactor is null) if (configuration?.PropertiesChangedForDistance is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForDistance));
throw new NullReferenceException(nameof(configuration.LocationFactor)); if (configuration?.PropertiesChangedForFaces is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForFaces));
if (configuration.LookForAbandoned is null) if (configuration?.PropertiesChangedForIndex is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForIndex));
throw new NullReferenceException(nameof(configuration.LookForAbandoned)); if (configuration?.PropertiesChangedForMetadata is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata));
if (configuration.MappingDefaultName is null) if (configuration?.PropertiesChangedForResize is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize));
throw new NullReferenceException(nameof(configuration.MappingDefaultName)); if (configuration?.RadomUseBirthdayMinimum is null) throw new NullReferenceException(nameof(configuration.RadomUseBirthdayMinimum));
if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null) // if (configuration?.RangeDaysDeltaTolerance is null) throw new NullReferenceException(nameof(configuration.RangeDaysDeltaTolerance));
throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping)); // if (configuration?.RangeDistanceTolerance is null) throw new NullReferenceException(nameof(configuration.RangeDistanceTolerance));
if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping is null) // if (configuration?.RangeFaceAreaTolerance is null) throw new NullReferenceException(nameof(configuration.RangeFaceAreaTolerance));
throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping)); // if (configuration?.RangeFaceConfidence is null) throw new NullReferenceException(nameof(configuration.RangeFaceConfidence));
if (configuration.MixedYearRelativePaths is null) // if (configuration?.RectangleIntersectMinimums is null) throw new NullReferenceException(nameof(configuration.RectangleIntersectMinimums));
throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths)); if (configuration?.Reverse is null) throw new NullReferenceException(nameof(configuration.Reverse));
if (configuration.NumberOfJitters is null) // if (configuration?.SaveBlurHashForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveBlurHashForOutputResolutions));
throw new NullReferenceException(nameof(configuration.NumberOfJitters)); // if (configuration?.SaveFaceDistancesForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveFaceDistancesForOutputResolutions));
if (configuration.NumberOfTimesToUpsample is null) // if (configuration?.SaveFaceLandmarkForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveFaceLandmarkForOutputResolutions));
throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample)); // if (configuration?.SaveFilteredOriginalImagesFromJLinksForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions));
if (configuration.OutputQuality is null) if (configuration?.SaveFullYearOfRandomFiles is null) throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
throw new NullReferenceException(nameof(configuration.OutputQuality)); if (configuration?.SaveIndividually is null) throw new NullReferenceException(nameof(configuration.SaveIndividually));
if (configuration.OutputResolutions is null) // if (configuration?.SaveMappedForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveMappedForOutputResolutions));
throw new NullReferenceException(nameof(configuration.OutputResolutions)); // if (configuration?.SavePropertyShortcutsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SavePropertyShortcutsForOutputResolutions));
if (configuration.OverrideForFaceImages is null) // if (configuration?.SaveRandomForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveRandomForOutputResolutions));
throw new NullReferenceException(nameof(configuration.OverrideForFaceImages)); if (configuration?.SaveResizedSubfiles is null) throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
if (configuration.OverrideForFaceLandmarkImages is null) // if (configuration?.SaveShortcutsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveShortcutsForOutputResolutions));
throw new NullReferenceException(nameof(configuration.OverrideForFaceLandmarkImages)); if (configuration?.SaveSortingWithoutPerson is null) throw new NullReferenceException(nameof(configuration.SaveSortingWithoutPerson));
if (configuration.OverrideForResizeImages is null) // if (configuration?.SkipNotSkipDirectories is null) throw new NullReferenceException(nameof(configuration.SkipNotSkipDirectories));
throw new NullReferenceException(nameof(configuration.OverrideForResizeImages)); // if (configuration?.SkipOlderThanDays is null) throw new NullReferenceException(nameof(configuration.SkipOlderThanDays));
if (configuration.PersonBirthdayFirstYear is null) // if (configuration?.SkipPersonWithMoreThen is null) throw new NullReferenceException(nameof(configuration.SkipPersonWithMoreThen));
throw new NullReferenceException(nameof(configuration.PersonBirthdayFirstYear)); if (configuration?.SkipSearch is null) throw new NullReferenceException(nameof(configuration.SkipSearch));
if (configuration.PersonBirthdayFormat is null) if (configuration?.SortingMaximumPerFaceShouldBeHigh is null) throw new NullReferenceException(nameof(configuration.SortingMaximumPerFaceShouldBeHigh));
throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat)); if (configuration?.SortingMaximumPerKey is null) throw new NullReferenceException(nameof(configuration.SortingMaximumPerKey));
if (configuration.PersonCharacters is null) if (configuration?.SortingMinimumToUseSigma is null) throw new NullReferenceException(nameof(configuration.SortingMinimumToUseSigma));
throw new NullReferenceException(nameof(configuration.PersonCharacters)); if (configuration?.TestDistanceResults is null) throw new NullReferenceException(nameof(configuration.TestDistanceResults));
if (configuration.PersonCharactersCopyCount is null) if (configuration?.UseFilterTries is null) throw new NullReferenceException(nameof(configuration.UseFilterTries));
throw new NullReferenceException(nameof(configuration.PersonCharactersCopyCount)); // if (configuration?.ValidKeyWordsToIgnoreInRandom is null) throw new NullReferenceException(nameof(configuration.ValidKeyWordsToIgnoreInRandom));
if (configuration.PersonKeyFormat is null) // if (configuration?.ValidResolutions is null) throw new NullReferenceException(nameof(configuration.ValidResolutions));
throw new NullReferenceException(nameof(configuration.PersonKeyFormat)); result = new(propertyConfiguration,
if (configuration.PropertiesChangedForDistance is null)
throw new NullReferenceException(nameof(configuration.PropertiesChangedForDistance));
if (configuration.PropertiesChangedForFaces is null)
throw new NullReferenceException(nameof(configuration.PropertiesChangedForFaces));
if (configuration.PropertiesChangedForIndex is null)
throw new NullReferenceException(nameof(configuration.PropertiesChangedForIndex));
if (configuration.PropertiesChangedForMetadata is null)
throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata));
if (configuration.PropertiesChangedForResize is null)
throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize));
if (configuration.RangeDaysDeltaTolerance is null || configuration.RangeDaysDeltaTolerance.Length != 3)
throw new NullReferenceException(nameof(configuration.RangeDaysDeltaTolerance));
if (configuration.RangeFaceAreaTolerance is null || configuration.RangeFaceAreaTolerance.Length != 3)
throw new NullReferenceException(nameof(configuration.RangeFaceAreaTolerance));
if (configuration.RangeFaceConfidence is null || configuration.RangeFaceConfidence.Length != 3)
throw new NullReferenceException(nameof(configuration.RangeFaceConfidence));
if (configuration.RangeDistanceTolerance is null || configuration.RangeDistanceTolerance.Length != 3)
throw new NullReferenceException(nameof(configuration.RangeDistanceTolerance));
configuration.RectangleIntersectMinimums ??= Array.Empty<float>();
if (configuration.Reverse is null)
throw new NullReferenceException(nameof(configuration.Reverse));
configuration.SaveBlurHashForOutputResolutions ??= Array.Empty<string>();
configuration.SaveFaceDistancesForOutputResolutions ??= Array.Empty<string>();
configuration.SaveFaceLandmarkForOutputResolutions ??= Array.Empty<string>();
if (configuration.SaveFullYearOfRandomFiles is null)
throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
configuration.SaveMappedForOutputResolutions ??= Array.Empty<string>();
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ??= Array.Empty<string>();
if (configuration.SaveIndividually is null)
throw new NullReferenceException(nameof(configuration.SaveIndividually));
configuration.SavePropertyShortcutsForOutputResolutions ??= Array.Empty<string>();
configuration.SaveRandomForOutputResolutions ??= Array.Empty<string>();
if (configuration.SaveResizedSubfiles is null)
throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
configuration.SaveShortcutsForOutputResolutions ??= Array.Empty<string>();
configuration.SaveShortcutsForOutputResolutions ??= Array.Empty<string>();
configuration.SkipNotSkipDirectories ??= Array.Empty<string>();
if (configuration.SaveSortingWithoutPerson is null)
throw new NullReferenceException(nameof(configuration.SaveSortingWithoutPerson));
if (configuration.SkipSearch is null)
throw new NullReferenceException(nameof(configuration.SkipSearch));
if (configuration.SortingMaximumPerFaceShouldBeHigh is null)
throw new NullReferenceException(nameof(configuration.SortingMaximumPerFaceShouldBeHigh));
if (configuration.SortingMaximumPerKey is null)
throw new NullReferenceException(nameof(configuration.SortingMaximumPerKey));
if (configuration.SortingMinimumToUseSigma is null)
throw new NullReferenceException(nameof(configuration.SortingMinimumToUseSigma));
if (configuration.TestDistanceResults is null)
throw new NullReferenceException(nameof(configuration.TestDistanceResults));
if (configuration.UseFilterTries is null)
throw new NullReferenceException(nameof(configuration.UseFilterTries));
if (configuration.ValidKeyWordsToIgnoreInRandom is null)
throw new NullReferenceException(nameof(configuration.ValidKeyWordsToIgnoreInRandom));
if (configuration.ValidResolutions is null)
throw new NullReferenceException(nameof(configuration.ValidResolutions));
_ = DateTime.Now.AddDays(-configuration.RangeDaysDeltaTolerance[1]);
result = new(configuration.PropertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckDFaceAndUpWriteDates.Value,
configuration.CheckJsonForDistanceResults.Value, configuration.CheckJsonForDistanceResults.Value,
configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions, configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(),
configuration.CrossDirectoryMaxItemsInDistanceCollection.Value, configuration.CrossDirectoryMaxItemsInDistanceCollection.Value,
configuration.DeletePossibleDuplicates.Value, configuration.DeletePossibleDuplicates.Value,
configuration.DistanceFactor.Value, configuration.DistanceFactor.Value,
@ -268,10 +208,10 @@ public class Configuration
configuration.ForceMetadataLastWriteTimeToCreationTime.Value, configuration.ForceMetadataLastWriteTimeToCreationTime.Value,
configuration.ForceResizeLastWriteTimeToCreationTime.Value, configuration.ForceResizeLastWriteTimeToCreationTime.Value,
configuration.GenealogicalDataCommunicationFile, configuration.GenealogicalDataCommunicationFile,
configuration.IgnoreExtensions, configuration.IgnoreExtensions ?? Array.Empty<string>(),
configuration.JLinks, configuration.JLinks ?? Array.Empty<string>(),
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? Array.Empty<string>(),
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? Array.Empty<string>(),
configuration.LoadPhotoPrismLocations.Value, configuration.LoadPhotoPrismLocations.Value,
configuration.LocationContainerDistanceTolerance, configuration.LocationContainerDistanceTolerance,
configuration.LocationDigits.Value, configuration.LocationDigits.Value,
@ -280,12 +220,12 @@ public class Configuration
configuration.MappingDefaultName, configuration.MappingDefaultName,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value,
configuration.MixedYearRelativePaths, configuration.MixedYearRelativePaths ?? Array.Empty<string>(),
configuration.ModelDirectory, configuration.ModelDirectory,
configuration.ModelName, configuration.ModelName,
configuration.OutputExtension, configuration.OutputExtension,
configuration.OutputQuality.Value, configuration.OutputQuality.Value,
configuration.OutputResolutions, configuration.OutputResolutions ?? Array.Empty<string>(),
configuration.OverrideForFaceImages.Value, configuration.OverrideForFaceImages.Value,
configuration.OverrideForFaceLandmarkImages.Value, configuration.OverrideForFaceLandmarkImages.Value,
configuration.OverrideForResizeImages.Value, configuration.OverrideForResizeImages.Value,
@ -300,25 +240,26 @@ public class Configuration
configuration.PropertiesChangedForIndex.Value, configuration.PropertiesChangedForIndex.Value,
configuration.PropertiesChangedForMetadata.Value, configuration.PropertiesChangedForMetadata.Value,
configuration.PropertiesChangedForResize.Value, configuration.PropertiesChangedForResize.Value,
configuration.RangeDaysDeltaTolerance, configuration.RadomUseBirthdayMinimum.Value,
configuration.RangeDistanceTolerance, configuration.RangeDaysDeltaTolerance ?? Array.Empty<int>(),
configuration.RangeFaceAreaTolerance, configuration.RangeDistanceTolerance ?? Array.Empty<float>(),
configuration.RangeFaceConfidence, configuration.RangeFaceAreaTolerance ?? Array.Empty<float>(),
configuration.RectangleIntersectMinimums, configuration.RangeFaceConfidence ?? Array.Empty<float>(),
configuration.RectangleIntersectMinimums ?? Array.Empty<float>(),
configuration.Reverse.Value, configuration.Reverse.Value,
configuration.SaveBlurHashForOutputResolutions, configuration.SaveBlurHashForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveFaceDistancesForOutputResolutions, configuration.SaveFaceDistancesForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveFaceLandmarkForOutputResolutions, configuration.SaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions, configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveIndividually.Value, configuration.SaveIndividually.Value,
configuration.SaveFullYearOfRandomFiles.Value, configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveMappedForOutputResolutions, configuration.SaveMappedForOutputResolutions ?? Array.Empty<string>(),
configuration.SavePropertyShortcutsForOutputResolutions, configuration.SavePropertyShortcutsForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveRandomForOutputResolutions, configuration.SaveRandomForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveResizedSubfiles.Value, configuration.SaveResizedSubfiles.Value,
configuration.SaveShortcutsForOutputResolutions, configuration.SaveShortcutsForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveSortingWithoutPerson.Value, configuration.SaveSortingWithoutPerson.Value,
configuration.SkipNotSkipDirectories, configuration.SkipNotSkipDirectories ?? Array.Empty<string>(),
configuration.SkipOlderThanDays, configuration.SkipOlderThanDays,
configuration.SkipPersonWithMoreThen, configuration.SkipPersonWithMoreThen,
configuration.SkipSearch.Value, configuration.SkipSearch.Value,
@ -327,8 +268,8 @@ public class Configuration
configuration.SortingMinimumToUseSigma.Value, configuration.SortingMinimumToUseSigma.Value,
configuration.TestDistanceResults.Value, configuration.TestDistanceResults.Value,
configuration.UseFilterTries.Value, configuration.UseFilterTries.Value,
configuration.ValidKeyWordsToIgnoreInRandom, configuration.ValidKeyWordsToIgnoreInRandom ?? Array.Empty<string>(),
configuration.ValidResolutions); configuration.ValidResolutions ?? Array.Empty<string>());
return result; return result;
} }
@ -345,8 +286,7 @@ public class Configuration
IConfigurationSection configurationSection = configurationRoot.GetSection(section); IConfigurationSection configurationSection = configurationRoot.GetSection(section);
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration, propertyConfiguration);
result.SetAndUpdate(propertyConfiguration, configuration?.NumberOfJitters, configuration?.NumberOfTimesToUpsample, configuration?.ModelName, configuration?.PredictorModelName);
return result; return result;
} }

View File

@ -1,275 +1,85 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Instance.Models; namespace View_by_Distance.Instance.Models;
public class Configuration public record Configuration(Property.Models.Configuration PropertyConfiguration,
{ bool CheckDFaceAndUpWriteDates,
bool CheckJsonForDistanceResults,
protected Property.Models.Configuration _PropertyConfiguration; string[] CopyFacesAndSaveFaceLandmarkForOutputResolutions,
int CrossDirectoryMaxItemsInDistanceCollection,
public Property.Models.Configuration PropertyConfiguration => _PropertyConfiguration; bool DeletePossibleDuplicates,
int DistanceFactor,
public bool CheckDFaceAndUpWriteDates { init; get; } bool DistanceMoveUnableToMatch,
public bool CheckJsonForDistanceResults { init; get; } int DistancePixelDistanceTolerance,
public string[] CopyFacesAndSaveFaceLandmarkForOutputResolutions { init; get; } bool DistanceRenameToMatch,
public int CrossDirectoryMaxItemsInDistanceCollection { init; get; } int EyeThreshold,
public int DistanceFactor { init; get; } int FaceAreaPermyriad,
public bool DistanceMoveUnableToMatch { init; get; } int FaceConfidencePercent,
public int DistancePixelDistanceTolerance { init; get; } int FaceDistanceHiddenImageFactor,
public bool DistanceRenameToMatch { init; get; } int FaceDistancePermyriad,
public int EyeThreshold { init; get; } string FocusDirectory,
public int FaceAreaPermyriad { init; get; } string FocusModel,
public int FaceConfidencePercent { init; get; } bool ForceFaceLastWriteTimeToCreationTime,
public int FaceDistanceHiddenImageFactor { init; get; } bool ForceMetadataLastWriteTimeToCreationTime,
public int FaceDistancePermyriad { init; get; } bool ForceResizeLastWriteTimeToCreationTime,
public string FocusDirectory { init; get; } string GenealogicalDataCommunicationFile,
public string FocusModel { init; get; } string[] IgnoreExtensions,
public bool ForceFaceLastWriteTimeToCreationTime { init; get; } string[] JLinks,
public bool ForceMetadataLastWriteTimeToCreationTime { init; get; } string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions,
public bool ForceResizeLastWriteTimeToCreationTime { init; get; } string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions,
public string GenealogicalDataCommunicationFile { init; get; } bool LoadPhotoPrismLocations,
public string[] IgnoreExtensions { init; get; } float? LocationContainerDistanceTolerance,
public string[] JLinks { init; get; } int LocationDigits,
public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } int LocationFactor,
public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } bool LookForAbandoned,
public bool LoadPhotoPrismLocations { init; get; } string MappingDefaultName,
public float? LocationContainerDistanceTolerance { init; get; } bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping,
public int LocationDigits { init; get; } bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping,
public int LocationFactor { init; get; } string[] MixedYearRelativePaths,
public bool LookForAbandoned { init; get; } string ModelDirectory,
public string MappingDefaultName { init; get; } string ModelName,
public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { init; get; } string OutputExtension,
public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { init; get; } int OutputQuality,
public string[] MixedYearRelativePaths { init; get; } string[] OutputResolutions,
public string ModelDirectory { init; get; } bool OverrideForFaceImages,
public string ModelName { init; get; } bool OverrideForFaceLandmarkImages,
public string OutputExtension { init; get; } bool OverrideForResizeImages,
public int OutputQuality { init; get; } int PersonBirthdayFirstYear,
public string[] OutputResolutions { init; get; } string PersonBirthdayFormat,
public bool OverrideForFaceImages { init; get; } string PersonCharacters,
public bool OverrideForFaceLandmarkImages { init; get; } int PersonCharactersCopyCount,
public bool OverrideForResizeImages { init; get; } string PersonKeyFormat,
public int PersonBirthdayFirstYear { init; get; } string PredictorModelName,
public string PersonBirthdayFormat { init; get; } bool PropertiesChangedForDistance,
public string PersonCharacters { init; get; } bool PropertiesChangedForFaces,
public int PersonCharactersCopyCount { init; get; } bool PropertiesChangedForIndex,
public string PersonKeyFormat { init; get; } bool PropertiesChangedForMetadata,
public string PredictorModelName { init; get; } bool PropertiesChangedForResize,
public bool PropertiesChangedForDistance { init; get; } int RadomUseBirthdayMinimum,
public bool PropertiesChangedForFaces { init; get; } int[] RangeDaysDeltaTolerance,
public bool PropertiesChangedForIndex { init; get; } float[] RangeDistanceTolerance,
public bool PropertiesChangedForMetadata { init; get; } float[] RangeFaceAreaPermyriadTolerance,
public bool PropertiesChangedForResize { init; get; } float[] RangeFaceConfidence,
public int[] RangeDaysDeltaTolerance { init; get; } float[] RectangleIntersectMinimums,
public float[] RangeDistanceTolerance { init; get; } bool Reverse,
public float[] RangeFaceAreaTolerance { init; get; } string[] SaveBlurHashForOutputResolutions,
public float[] RangeFaceConfidence { init; get; } string[] SaveFaceDistancesForOutputResolutions,
public float[] RectangleIntersectMinimums { init; get; } string[] SaveFaceLandmarkForOutputResolutions,
public bool Reverse { init; get; } string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions,
public string[] SaveBlurHashForOutputResolutions { init; get; } bool SaveIndividually,
public string[] SaveFaceDistancesForOutputResolutions { init; get; } bool SaveFullYearOfRandomFiles,
public string[] SaveFaceLandmarkForOutputResolutions { init; get; } string[] SaveMappedForOutputResolutions,
public string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions { init; get; } string[] SavePropertyShortcutsForOutputResolutions,
public bool SaveFullYearOfRandomFiles { init; get; } string[] SaveRandomForOutputResolutions,
public bool SaveIndividually { init; get; } bool SaveResizedSubfiles,
public string[] SaveMappedForOutputResolutions { init; get; } string[] SaveShortcutsForOutputResolutions,
public string[] SavePropertyShortcutsForOutputResolutions { init; get; } bool SaveSortingWithoutPerson,
public string[] SaveRandomForOutputResolutions { init; get; } string[] SkipNotSkipDirectories,
public bool SaveResizedSubfiles { init; get; } int? SkipOlderThanDays,
public string[] SaveShortcutsForOutputResolutions { init; get; } int? SkipPersonWithMoreThen,
public bool SaveSortingWithoutPerson { init; get; } bool SkipSearch,
public string[] SkipNotSkipDirectories { init; get; } int SortingMaximumPerFaceShouldBeHigh,
public int? SkipOlderThanDays { init; get; } int SortingMaximumPerKey,
public int? SkipPersonWithMoreThen { init; get; } int SortingMinimumToUseSigma,
public bool SkipSearch { init; get; } bool TestDistanceResults,
public int SortingMaximumPerFaceShouldBeHigh { init; get; } int UseFilterTries,
public int SortingMaximumPerKey { init; get; } string[] ValidKeyWordsToIgnoreInRandom,
public int SortingMinimumToUseSigma { init; get; } string[] ValidResolutions);
public bool TestDistanceResults { init; get; }
public int UseFilterTries { init; get; }
public string[] ValidResolutions { init; get; }
public string[] ValidKeyWordsToIgnoreInRandom { init; get; }
public bool DeletePossibleDuplicates { get; internal set; }
[JsonConstructor]
public Configuration(Property.Models.Configuration propertyConfiguration,
bool checkDFaceAndUpWriteDates,
bool checkJsonForDistanceResults,
string[] copyFacesAndSaveFaceLandmarkForOutputResolutions,
int crossDirectoryMaxItemsInDistanceCollection,
bool deletePossibleDuplicates,
int distanceFactor,
bool distanceMoveUnableToMatch,
int distancePixelDistanceTolerance,
bool distanceRenameToMatch,
int eyeThreshold,
int faceAreaPermyriad,
int faceConfidencePercent,
int faceDistanceHiddenImageFactor,
int faceDistancePermyriad,
string focusDirectory,
string focusModel,
bool forceFaceLastWriteTimeToCreationTime,
bool forceMetadataLastWriteTimeToCreationTime,
bool forceResizeLastWriteTimeToCreationTime,
string genealogicalDataCommunicationFile,
string[] ignoreExtensions,
string[] jLinks,
string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions,
string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions,
bool loadPhotoPrismLocations,
float? locationContainerDistanceTolerance,
int locationDigits,
int locationFactor,
bool lookForAbandoned,
string mappingDefaultName,
bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping,
bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping,
string[] mixedYearRelativePaths,
string modelDirectory,
string modelName,
string outputExtension,
int outputQuality,
string[] outputResolutions,
bool overrideForFaceImages,
bool overrideForFaceLandmarkImages,
bool overrideForResizeImages,
int personBirthdayFirstYear,
string personBirthdayFormat,
string personCharacters,
int personCharactersCopyCount,
string personKeyFormat,
string predictorModelName,
bool propertiesChangedForDistance,
bool propertiesChangedForFaces,
bool propertiesChangedForIndex,
bool propertiesChangedForMetadata,
bool propertiesChangedForResize,
int[] rangeDaysDeltaTolerance,
float[] rangeDistanceTolerance,
float[] rangeFaceAreaPermyriadTolerance,
float[] rangeFaceConfidence,
float[] rectangleIntersectMinimums,
bool reverse,
string[] saveBlurHashForOutputResolutions,
string[] saveFaceDistancesForOutputResolutions,
string[] saveFaceLandmarkForOutputResolutions,
string[] saveFilteredOriginalImagesFromJLinksForOutputResolutions,
bool saveIndividually,
bool saveFullYearOfRandomFiles,
string[] saveMappedForOutputResolutions,
string[] savePropertyShortcutsForOutputResolutions,
string[] saveRandomForOutputResolutions,
bool saveResizedSubfiles,
string[] saveShortcutsForOutputResolutions,
bool saveSortingWithoutPerson,
string[] skipNotSkipDirectories,
int? skipOlderThanDays,
int? skipPersonWithMoreThen,
bool skipSearch,
int sortingMaximumPerFaceShouldBeHigh,
int sortingMaximumPerKey,
int sortingSigma,
bool testDistanceResults,
int useFilterTries,
string[] validKeyWordsToIgnoreInRandom,
string[] validResolutions)
{
_PropertyConfiguration = propertyConfiguration;
CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates;
CheckJsonForDistanceResults = checkJsonForDistanceResults;
CopyFacesAndSaveFaceLandmarkForOutputResolutions = copyFacesAndSaveFaceLandmarkForOutputResolutions;
CrossDirectoryMaxItemsInDistanceCollection = crossDirectoryMaxItemsInDistanceCollection;
DeletePossibleDuplicates = deletePossibleDuplicates;
DistanceFactor = distanceFactor;
DistanceMoveUnableToMatch = distanceMoveUnableToMatch;
DistancePixelDistanceTolerance = distancePixelDistanceTolerance;
DistanceRenameToMatch = distanceRenameToMatch;
EyeThreshold = eyeThreshold;
FaceAreaPermyriad = faceAreaPermyriad;
FaceConfidencePercent = faceConfidencePercent;
FaceDistanceHiddenImageFactor = faceDistanceHiddenImageFactor;
FaceDistancePermyriad = faceDistancePermyriad;
FocusDirectory = focusDirectory;
FocusModel = focusModel;
ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime;
ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime;
ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime;
GenealogicalDataCommunicationFile = genealogicalDataCommunicationFile;
IgnoreExtensions = ignoreExtensions;
JLinks = jLinks;
LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions;
LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions;
LoadPhotoPrismLocations = loadPhotoPrismLocations;
LocationContainerDistanceTolerance = locationContainerDistanceTolerance;
LocationDigits = locationDigits;
LocationFactor = locationFactor;
LookForAbandoned = lookForAbandoned;
MappingDefaultName = mappingDefaultName;
MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping;
MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping;
MixedYearRelativePaths = mixedYearRelativePaths;
ModelDirectory = modelDirectory;
ModelName = modelName;
OutputExtension = outputExtension;
OutputQuality = outputQuality;
OutputResolutions = outputResolutions;
OverrideForFaceImages = overrideForFaceImages;
OverrideForFaceLandmarkImages = overrideForFaceLandmarkImages;
OverrideForResizeImages = overrideForResizeImages;
PersonBirthdayFirstYear = personBirthdayFirstYear;
PersonBirthdayFormat = personBirthdayFormat;
PersonCharacters = personCharacters;
PersonCharactersCopyCount = personCharactersCopyCount;
PersonKeyFormat = personKeyFormat;
PredictorModelName = predictorModelName;
PropertiesChangedForDistance = propertiesChangedForDistance;
PropertiesChangedForFaces = propertiesChangedForFaces;
PropertiesChangedForIndex = propertiesChangedForIndex;
PropertiesChangedForMetadata = propertiesChangedForMetadata;
PropertiesChangedForResize = propertiesChangedForResize;
RangeDaysDeltaTolerance = rangeDaysDeltaTolerance;
RangeDistanceTolerance = rangeDistanceTolerance;
RangeFaceAreaTolerance = rangeFaceAreaPermyriadTolerance;
RangeFaceConfidence = rangeFaceConfidence;
RectangleIntersectMinimums = rectangleIntersectMinimums;
Reverse = reverse;
SaveBlurHashForOutputResolutions = saveBlurHashForOutputResolutions;
SaveFaceDistancesForOutputResolutions = saveFaceDistancesForOutputResolutions;
SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions;
SaveFilteredOriginalImagesFromJLinksForOutputResolutions = saveFilteredOriginalImagesFromJLinksForOutputResolutions;
SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles;
SaveIndividually = saveIndividually;
SaveMappedForOutputResolutions = saveMappedForOutputResolutions;
SavePropertyShortcutsForOutputResolutions = savePropertyShortcutsForOutputResolutions;
SaveRandomForOutputResolutions = saveRandomForOutputResolutions;
SaveResizedSubfiles = saveResizedSubfiles;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SaveSortingWithoutPerson = saveSortingWithoutPerson;
SkipNotSkipDirectories = skipNotSkipDirectories;
SkipOlderThanDays = skipOlderThanDays;
SkipPersonWithMoreThen = skipPersonWithMoreThen;
SkipSearch = skipSearch;
SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh;
SortingMaximumPerKey = sortingMaximumPerKey;
SortingMinimumToUseSigma = sortingSigma;
TestDistanceResults = testDistanceResults;
UseFilterTries = useFilterTries;
ValidKeyWordsToIgnoreInRandom = validKeyWordsToIgnoreInRandom;
ValidResolutions = validResolutions;
}
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
return result;
}
public void SetAndUpdate(Property.Models.Configuration configuration, int? numberOfJitters, int? numberOfTimesToUpsample, string? modelName, string? predictorModelName)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update(numberOfJitters, numberOfTimesToUpsample, modelName, predictorModelName);
}
}

View File

@ -58,7 +58,7 @@ internal class F_Random
return new(results); return new(results);
} }
internal void Random(Property.Models.Configuration configuration, string[] validKeyWordsToIgnoreInRandom, string outputResolution, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Shared.Models.Mapping> mappingCollection) internal void Random(Property.Models.Configuration configuration, int radomUseBirthdayMinimum, string[] validKeyWordsToIgnoreInRandom, string outputResolution, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Shared.Models.Mapping> mappingCollection)
{ {
string key; string key;
string json; string json;
@ -92,7 +92,7 @@ internal class F_Random
{ {
random = new(i); random = new(i);
key = dateTime.AddDays(i).ToString(dateFormat); key = dateTime.AddDays(i).ToString(dateFormat);
if (dayToRelativePaths.TryGetValue(key, out collection) && collection.Count > 100) if (dayToRelativePaths.TryGetValue(key, out collection) && collection.Count > radomUseBirthdayMinimum)
collection = (from l in collection orderby random.NextDouble() select l).ToList(); collection = (from l in collection orderby random.NextDouble() select l).ToList();
else else
collection = (from l in relativePaths orderby random.NextDouble() select l).ToList(); collection = (from l in relativePaths orderby random.NextDouble() select l).ToList();

View File

@ -35,7 +35,6 @@ public class MetadataQuery
Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_Configuration = configuration; _Configuration = configuration;
propertyConfiguration.Update();
log.Information(propertyConfiguration.RootDirectory); log.Information(propertyConfiguration.RootDirectory);
Verify(); Verify();
MetadataQueryFilesInDirectories(log, ticks); MetadataQueryFilesInDirectories(log, ticks);

View File

@ -52,7 +52,6 @@ public class Configuration
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration);
result.SetAndUpdate(propertyConfiguration);
return result; return result;
} }

View File

@ -29,10 +29,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
} }

View File

@ -33,7 +33,6 @@ public class MirrorLength
Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_Configuration = configuration; _Configuration = configuration;
propertyConfiguration.Update();
log.Information(propertyConfiguration.RootDirectory); log.Information(propertyConfiguration.RootDirectory);
Verify(); Verify();
MirrorLengthFilesInDirectories(log, ticks); MirrorLengthFilesInDirectories(log, ticks);

View File

@ -52,7 +52,6 @@ public class Configuration
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration);
result.SetAndUpdate(propertyConfiguration);
return result; return result;
} }

View File

@ -29,10 +29,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
} }

View File

@ -52,7 +52,6 @@ public class Configuration
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration);
result.SetAndUpdate(propertyConfiguration);
return result; return result;
} }

View File

@ -29,10 +29,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
} }

View File

@ -36,7 +36,6 @@ public class MoveById
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_Configuration = configuration; _Configuration = configuration;
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
propertyConfiguration.Update();
string? comparePathRoot = Path.GetDirectoryName(appSettings.ComparePathsFile); string? comparePathRoot = Path.GetDirectoryName(appSettings.ComparePathsFile);
if (comparePathRoot is null || comparePathRoot == propertyConfiguration.RootDirectory) if (comparePathRoot is null || comparePathRoot == propertyConfiguration.RootDirectory)
throw new Exception("Nested isn't allowed!"); throw new Exception("Nested isn't allowed!");

View File

@ -52,7 +52,6 @@ public class Configuration
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration);
result.SetAndUpdate(propertyConfiguration);
return result; return result;
} }

View File

@ -29,10 +29,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
} }

View File

@ -45,7 +45,6 @@ public class OffsetDateTimeOriginal
Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_Configuration = configuration; _Configuration = configuration;
propertyConfiguration.Update();
log.Information(propertyConfiguration.RootDirectory); log.Information(propertyConfiguration.RootDirectory);
Verify(); Verify();
List<string> lines = OffsetDateTimeOriginalFilesInDirectories(log); List<string> lines = OffsetDateTimeOriginalFilesInDirectories(log);

View File

@ -24,10 +24,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
} }

View File

@ -19,7 +19,6 @@ public abstract class Configuration
if (result is null) if (result is null)
throw new Exception(json); throw new Exception(json);
string jsonThis = result.ToString(); string jsonThis = result.ToString();
result.SetAndUpdate(propertyConfiguration);
if (jsonThis != json) if (jsonThis != json)
{ {
int? check = null; int? check = null;

View File

@ -0,0 +1,2 @@
[*.cs]
csharp_preserve_single_line_statements = true

View File

@ -1,6 +1,5 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Phares.Shared; using Phares.Shared;
using System.ComponentModel.DataAnnotations;
using System.Text.Json; using System.Text.Json;
namespace View_by_Distance.Property.Models.Binder; namespace View_by_Distance.Property.Models.Binder;
@ -8,28 +7,28 @@ namespace View_by_Distance.Property.Models.Binder;
public class Configuration public class Configuration
{ {
#nullable disable public string? DateGroup { get; set; }
public string? FileNameDirectorySeparator { get; set; }
[Display(Name = "Date Group"), Required] public string DateGroup { get; set; } public bool? ForcePropertyLastWriteTimeToCreationTime { get; set; }
[Display(Name = "File Name Directory Separator"), Required] public string FileNameDirectorySeparator { get; set; } public string[]? IgnoreExtensions { get; set; }
[Display(Name = "Force Property Last Write Time to Creation Time"), Required] public bool? ForcePropertyLastWriteTimeToCreationTime { get; set; } public int? MaxImagesInDirectoryForTopLevelFirstPass { get; set; }
[Display(Name = "Ignore Extensions"), Required] public string[] IgnoreExtensions { get; set; } public string? ModelName { init; get; }
[Display(Name = "Max Images In Directory For Top Level First Pass"), Required] public int? MaxImagesInDirectoryForTopLevelFirstPass { get; set; } public int? NumberOfJitters { init; get; }
[Display(Name = "Pattern"), Required] public string Pattern { get; set; } public int? NumberOfTimesToUpsample { init; get; }
[Display(Name = "Person Birthday Format"), Required] public string PersonBirthdayFormat { get; set; } public string? Pattern { get; set; }
[Display(Name = "Populate Properties FileId"), Required] public bool? PopulatePropertyId { get; set; } public string? PersonBirthdayFormat { get; set; }
[Display(Name = "Properties Changed For Property"), Required] public bool? PropertiesChangedForProperty { get; set; } public bool? PopulatePropertyId { get; set; }
[Display(Name = "Property Content Collection Files"), Required] public string[] PropertyContentCollectionFiles { get; set; } public string? PredictorModelName { get; set; }
[Display(Name = "Result All In One"), Required] public string ResultAllInOne { get; set; } public bool? PropertiesChangedForProperty { get; set; }
[Display(Name = "Result All In One Max Value"), Required] public int? ResultAllInOneSubdirectoryLength { get; set; } public string[]? PropertyContentCollectionFiles { get; set; }
[Display(Name = "Result Collection"), Required] public string ResultCollection { get; set; } public string? ResultAllInOne { get; set; }
[Display(Name = "Result Content"), Required] public string ResultContent { get; set; } public int? ResultAllInOneSubdirectoryLength { get; set; }
[Display(Name = "Result Singleton"), Required] public string ResultSingleton { get; set; } public string? ResultCollection { get; set; }
[Display(Name = "Root Directory"), Required] public string RootDirectory { get; set; } public string? ResultContent { get; set; }
[Display(Name = "Valid Image Format Extensions"), Required] public string[] ValidImageFormatExtensions { get; set; } public string? ResultSingleton { get; set; }
[Display(Name = "Verify to Season"), Required] public string[] VerifyToSeason { get; set; } public string? RootDirectory { get; set; }
public string[]? ValidImageFormatExtensions { get; set; }
#nullable restore public string[]? VerifyToSeason { get; set; }
public override string ToString() public override string ToString()
{ {
@ -40,48 +39,51 @@ public class Configuration
private static Models.Configuration Get(Configuration? configuration) private static Models.Configuration Get(Configuration? configuration)
{ {
Models.Configuration result; Models.Configuration result;
if (configuration is null) if (configuration is null) throw new NullReferenceException(nameof(configuration));
throw new NullReferenceException(nameof(configuration)); if (configuration.DateGroup is null) throw new NullReferenceException(nameof(configuration.DateGroup));
if (configuration.ForcePropertyLastWriteTimeToCreationTime is null) if (configuration.FileNameDirectorySeparator is null) throw new NullReferenceException(nameof(configuration.FileNameDirectorySeparator));
throw new NullReferenceException(nameof(configuration.ForcePropertyLastWriteTimeToCreationTime)); if (configuration.ForcePropertyLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForcePropertyLastWriteTimeToCreationTime));
if (configuration.MaxImagesInDirectoryForTopLevelFirstPass is null) // if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions));
throw new NullReferenceException(nameof(configuration.MaxImagesInDirectoryForTopLevelFirstPass)); if (configuration.MaxImagesInDirectoryForTopLevelFirstPass is null) throw new NullReferenceException(nameof(configuration.MaxImagesInDirectoryForTopLevelFirstPass));
if (configuration.PopulatePropertyId is null) // if (configuration.ModelName is null) throw new NullReferenceException(nameof(configuration.ModelName));
throw new NullReferenceException(nameof(configuration.PopulatePropertyId)); // if (configuration.NumberOfJitters is null) throw new NullReferenceException(nameof(configuration.NumberOfJitters));
if (configuration.PropertiesChangedForProperty is null) // if (configuration.NumberOfTimesToUpsample is null) throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForProperty)); if (configuration.Pattern is null) throw new NullReferenceException(nameof(configuration.Pattern));
if (configuration.ResultAllInOne is null) if (configuration.PersonBirthdayFormat is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat));
throw new NullReferenceException(nameof(configuration.ResultAllInOne)); if (configuration.PopulatePropertyId is null) throw new NullReferenceException(nameof(configuration.PopulatePropertyId));
if (configuration.ResultAllInOneSubdirectoryLength is null) // if (configuration.PredictorModelName is null) throw new NullReferenceException(nameof(configuration.PredictorModelName));
throw new NullReferenceException(nameof(configuration.ResultAllInOneSubdirectoryLength)); if (configuration.PropertiesChangedForProperty is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForProperty));
if (configuration.ResultCollection is null) // if (configuration.PropertyContentCollectionFiles is null) throw new NullReferenceException(nameof(configuration.PropertyContentCollectionFiles));
throw new NullReferenceException(nameof(configuration.ResultCollection)); if (configuration.ResultAllInOne is null) throw new NullReferenceException(nameof(configuration.ResultAllInOne));
if (configuration.ResultContent is null) if (configuration.ResultAllInOneSubdirectoryLength is null) throw new NullReferenceException(nameof(configuration.ResultAllInOneSubdirectoryLength));
throw new NullReferenceException(nameof(configuration.ResultContent)); if (configuration.ResultCollection is null) throw new NullReferenceException(nameof(configuration.ResultCollection));
if (configuration.ResultSingleton is null) if (configuration.ResultContent is null) throw new NullReferenceException(nameof(configuration.ResultContent));
throw new NullReferenceException(nameof(configuration.ResultSingleton)); if (configuration.ResultSingleton is null) throw new NullReferenceException(nameof(configuration.ResultSingleton));
configuration.IgnoreExtensions ??= Array.Empty<string>(); if (configuration.RootDirectory is null) throw new NullReferenceException(nameof(configuration.RootDirectory));
configuration.PropertyContentCollectionFiles ??= Array.Empty<string>(); // if (configuration.ValidImageFormatExtensions is null) throw new NullReferenceException(nameof(configuration.ValidImageFormatExtensions));
configuration.ValidImageFormatExtensions ??= Array.Empty<string>(); // if (configuration.VerifyToSeason is null) throw new NullReferenceException(nameof(configuration.VerifyToSeason));
configuration.VerifyToSeason ??= Array.Empty<string>();
result = new(configuration.DateGroup, result = new(configuration.DateGroup,
configuration.FileNameDirectorySeparator, configuration.FileNameDirectorySeparator,
configuration.ForcePropertyLastWriteTimeToCreationTime.Value, configuration.ForcePropertyLastWriteTimeToCreationTime.Value,
configuration.IgnoreExtensions, configuration.IgnoreExtensions ?? Array.Empty<string>(),
configuration.MaxImagesInDirectoryForTopLevelFirstPass.Value, configuration.MaxImagesInDirectoryForTopLevelFirstPass.Value,
configuration.ModelName,
configuration.NumberOfJitters,
configuration.NumberOfTimesToUpsample,
configuration.Pattern, configuration.Pattern,
configuration.PersonBirthdayFormat, configuration.PersonBirthdayFormat,
configuration.PopulatePropertyId.Value, configuration.PopulatePropertyId.Value,
configuration.PredictorModelName,
configuration.PropertiesChangedForProperty.Value, configuration.PropertiesChangedForProperty.Value,
configuration.PropertyContentCollectionFiles, configuration.PropertyContentCollectionFiles ?? Array.Empty<string>(),
configuration.ResultAllInOne, configuration.ResultAllInOne,
configuration.ResultAllInOneSubdirectoryLength.Value, configuration.ResultAllInOneSubdirectoryLength.Value,
configuration.ResultCollection, configuration.ResultCollection,
configuration.ResultContent, configuration.ResultContent,
configuration.ResultSingleton, configuration.ResultSingleton,
configuration.RootDirectory, Path.GetFullPath(configuration.RootDirectory),
configuration.ValidImageFormatExtensions, configuration.ValidImageFormatExtensions ?? Array.Empty<string>(),
configuration.VerifyToSeason); configuration.VerifyToSeason ?? Array.Empty<string>());
return result; return result;
} }
@ -98,8 +100,7 @@ public class Configuration
IConfigurationSection configurationSection = configurationRoot.GetSection(section); IConfigurationSection configurationSection = configurationRoot.GetSection(section);
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
if (configuration is null) if (configuration is null) throw new NullReferenceException(nameof(configuration));
throw new NullReferenceException(nameof(configuration));
result = Get(configuration); result = Get(configuration);
return result; return result;
} }

View File

@ -6,16 +6,8 @@ namespace View_by_Distance.Property.Models;
public class Configuration : Shared.Models.Properties.IPropertyConfiguration public class Configuration : Shared.Models.Properties.IPropertyConfiguration
{ {
protected string? _ModelName;
protected int? _NumberOfJitters;
protected int? _NumberOfTimesToUpsample;
protected string? _PredictorModelName;
protected string _RootDirectory; protected string _RootDirectory;
public string? ModelName => _ModelName;
public int? NumberOfJitters => _NumberOfJitters;
public int? NumberOfTimesToUpsample => _NumberOfTimesToUpsample;
public string? PredictorModelName => _PredictorModelName;
public string RootDirectory => _RootDirectory; public string RootDirectory => _RootDirectory;
public string DateGroup { init; get; } public string DateGroup { init; get; }
@ -23,9 +15,13 @@ public class Configuration : Shared.Models.Properties.IPropertyConfiguration
public bool ForcePropertyLastWriteTimeToCreationTime { init; get; } public bool ForcePropertyLastWriteTimeToCreationTime { init; get; }
public string[] IgnoreExtensions { init; get; } public string[] IgnoreExtensions { init; get; }
public int MaxImagesInDirectoryForTopLevelFirstPass { init; get; } public int MaxImagesInDirectoryForTopLevelFirstPass { init; get; }
public string? ModelName { init; get; }
public int? NumberOfJitters { init; get; }
public int? NumberOfTimesToUpsample { init; get; }
public string Pattern { init; get; } public string Pattern { init; get; }
public string PersonBirthdayFormat { init; get; } public string PersonBirthdayFormat { init; get; }
public bool PopulatePropertyId { init; get; } public bool PopulatePropertyId { init; get; }
public string? PredictorModelName { 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; }
@ -41,9 +37,13 @@ public class Configuration : Shared.Models.Properties.IPropertyConfiguration
bool forcePropertyLastWriteTimeToCreationTime, bool forcePropertyLastWriteTimeToCreationTime,
string[] ignoreExtensions, string[] ignoreExtensions,
int maxImagesInDirectoryForTopLevelFirstPass, int maxImagesInDirectoryForTopLevelFirstPass,
string? modelName,
int? numberOfJitters,
int? numberOfTimesToUpsample,
string pattern, string pattern,
string personBirthdayFormat, string personBirthdayFormat,
bool populatePropertyId, bool populatePropertyId,
string? predictorModelName,
bool propertiesChangedForProperty, bool propertiesChangedForProperty,
string[] propertyContentCollectionFiles, string[] propertyContentCollectionFiles,
string resultAllInOne, string resultAllInOne,
@ -60,8 +60,12 @@ public class Configuration : Shared.Models.Properties.IPropertyConfiguration
ForcePropertyLastWriteTimeToCreationTime = forcePropertyLastWriteTimeToCreationTime; ForcePropertyLastWriteTimeToCreationTime = forcePropertyLastWriteTimeToCreationTime;
IgnoreExtensions = ignoreExtensions; IgnoreExtensions = ignoreExtensions;
MaxImagesInDirectoryForTopLevelFirstPass = maxImagesInDirectoryForTopLevelFirstPass; MaxImagesInDirectoryForTopLevelFirstPass = maxImagesInDirectoryForTopLevelFirstPass;
ModelName = modelName;
NumberOfJitters = numberOfJitters;
NumberOfTimesToUpsample = numberOfTimesToUpsample;
Pattern = pattern; Pattern = pattern;
PersonBirthdayFormat = personBirthdayFormat; PersonBirthdayFormat = personBirthdayFormat;
PredictorModelName = predictorModelName;
PopulatePropertyId = populatePropertyId; PopulatePropertyId = populatePropertyId;
PropertiesChangedForProperty = propertiesChangedForProperty; PropertiesChangedForProperty = propertiesChangedForProperty;
PropertyContentCollectionFiles = propertyContentCollectionFiles; PropertyContentCollectionFiles = propertyContentCollectionFiles;
@ -80,18 +84,8 @@ public class Configuration : Shared.Models.Properties.IPropertyConfiguration
return result; return result;
} }
public void ChangeRootDirectory(string rootDirectory) => _RootDirectory = rootDirectory; public void ChangeRootDirectory(string rootDirectory) =>
_RootDirectory = Path.GetFullPath(rootDirectory);
public void Update(int? numberOfJitters, int? numberOfTimesToUpsample, string? modelName, string? predictorModelName)
{
_NumberOfJitters = numberOfJitters;
_NumberOfTimesToUpsample = numberOfTimesToUpsample;
_ModelName = modelName;
_PredictorModelName = predictorModelName;
_RootDirectory = Path.GetFullPath(_RootDirectory);
}
public void Update() => Update(numberOfJitters: null, numberOfTimesToUpsample: null, modelName: null, predictorModelName: null);
public static void Verify(Configuration propertyConfiguration, bool requireExist) public static void Verify(Configuration propertyConfiguration, bool requireExist)
{ {

View File

@ -52,7 +52,6 @@ public class Configuration
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration);
result.SetAndUpdate(propertyConfiguration);
return result; return result;
} }

View File

@ -29,10 +29,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
} }

View File

@ -46,7 +46,6 @@ public class Rename
Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_Configuration = configuration; _Configuration = configuration;
propertyConfiguration.Update();
log.Information(propertyConfiguration.RootDirectory); log.Information(propertyConfiguration.RootDirectory);
Verify(); Verify();
List<string> lines = RenameFilesInDirectories(log); List<string> lines = RenameFilesInDirectories(log);

View File

@ -52,7 +52,6 @@ public class Configuration
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration);
result.SetAndUpdate(propertyConfiguration);
return result; return result;
} }

View File

@ -29,10 +29,4 @@ public class Configuration
return result; return result;
} }
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
} }

View File

@ -40,7 +40,6 @@ public class SetCreatedDate
Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_Configuration = configuration; _Configuration = configuration;
propertyConfiguration.Update();
log.Information(propertyConfiguration.RootDirectory); log.Information(propertyConfiguration.RootDirectory);
Verify(); Verify();
List<string> lines = SetCreatedDateFilesInDirectories(log); List<string> lines = SetCreatedDateFilesInDirectories(log);

View File

@ -3,25 +3,21 @@ using System.Text.Json.Serialization;
namespace View_by_Distance.Tests.Models; namespace View_by_Distance.Tests.Models;
public class AppSettings public record AppSettings(string Company,
int MaxDegreeOfParallelism,
string WorkingDirectoryName)
{ {
public string Company { init; get; }
public int MaxDegreeOfParallelism { init; get; }
public string WorkingDirectoryName { init; get; }
[JsonConstructor]
public AppSettings(string company, int maxDegreeOfParallelism, string workingDirectoryName)
{
Company = company;
MaxDegreeOfParallelism = maxDegreeOfParallelism;
WorkingDirectoryName = workingDirectoryName;
}
public override string ToString() public override string ToString()
{ {
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); string result = JsonSerializer.Serialize(this, AppSettingsSourceGenerationContext.Default.AppSettings);
return result; return result;
} }
} }
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(AppSettings))]
internal partial class AppSettingsSourceGenerationContext : JsonSerializerContext
{
}

View File

@ -0,0 +1,2 @@
[*.cs]
csharp_preserve_single_line_statements = true

View File

@ -1,30 +1,28 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Tests.Models.Binder; namespace View_by_Distance.Tests.Models.Binder;
public class AppSettings public class AppSettings
{ {
#nullable disable public string? Company { get; set; }
public string Company { get; set; }
public int? MaxDegreeOfParallelism { get; set; } public int? MaxDegreeOfParallelism { get; set; }
public string WorkingDirectoryName { get; set; } public string? WorkingDirectoryName { get; set; }
#nullable restore
public override string ToString() public override string ToString()
{ {
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); string result = JsonSerializer.Serialize(this, BinderAppSettingsSourceGenerationContext.Default.AppSettings);
return result; return result;
} }
private static Models.AppSettings Get(AppSettings? appSettings) private static Models.AppSettings Get(AppSettings? appSettings)
{ {
Models.AppSettings result; Models.AppSettings result;
if (appSettings?.MaxDegreeOfParallelism is null) if (appSettings?.Company is null) throw new NullReferenceException(nameof(appSettings.Company));
throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism)); if (appSettings?.MaxDegreeOfParallelism is null) throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism));
if (appSettings?.WorkingDirectoryName is null) throw new NullReferenceException(nameof(appSettings.WorkingDirectoryName));
result = new( result = new(
appSettings.Company, appSettings.Company,
appSettings.MaxDegreeOfParallelism.Value, appSettings.MaxDegreeOfParallelism.Value,
@ -36,9 +34,17 @@ public class AppSettings
public static Models.AppSettings Get(IConfigurationRoot configurationRoot) public static Models.AppSettings Get(IConfigurationRoot configurationRoot)
{ {
Models.AppSettings result; Models.AppSettings result;
#pragma warning disable IL3050, IL2026
AppSettings? appSettings = configurationRoot.Get<AppSettings>(); AppSettings? appSettings = configurationRoot.Get<AppSettings>();
#pragma warning restore IL3050, IL2026
result = Get(appSettings); result = Get(appSettings);
return result; return result;
} }
} }
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(AppSettings))]
internal partial class BinderAppSettingsSourceGenerationContext : JsonSerializerContext
{
}

View File

@ -1,6 +1,5 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Phares.Shared; using Phares.Shared;
using System.ComponentModel.DataAnnotations;
using System.Text.Json; using System.Text.Json;
namespace View_by_Distance.Tests.Models.Binder; namespace View_by_Distance.Tests.Models.Binder;
@ -8,48 +7,90 @@ namespace View_by_Distance.Tests.Models.Binder;
public class Configuration public class Configuration
{ {
#nullable disable public bool? CheckDFaceAndUpWriteDates { get; set; }
public bool? CheckJsonForDistanceResults { get; set; }
[Display(Name = "Check D Face and Up Dates"), Required] public bool? CheckDFaceAndUpWriteDates { get; set; } public string[]? CopyFacesAndSaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Check Json For Distance Results"), Required] public bool? CheckJsonForDistanceResults { get; set; } public int? CrossDirectoryMaxItemsInDistanceCollection { get; set; }
[Display(Name = "CrossDirectory Max Items In Distance Collection"), Required] public int? CrossDirectoryMaxItemsInDistanceCollection { get; set; } public bool? DeletePossibleDuplicates { get; set; }
[Display(Name = "Distance Factor"), Required] public int? DistanceFactor { get; set; } public int? DistanceFactor { get; set; }
[Display(Name = "Force Face Last Write Time to Creation Time"), Required] public bool? ForceFaceLastWriteTimeToCreationTime { get; set; } public bool? DistanceMoveUnableToMatch { get; set; }
[Display(Name = "Force Metadata Last Write Time to Creation Time"), Required] public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; } public int? DistancePixelDistanceTolerance { get; set; }
[Display(Name = "Force Resize Last Write Time to Creation Time"), Required] public bool? ForceResizeLastWriteTimeToCreationTime { get; set; } public bool? DistanceRenameToMatch { get; set; }
[Display(Name = "Ignore Extensions"), Required] public string[] IgnoreExtensions { get; set; } public int? EyeThreshold { get; set; }
[Display(Name = "Julie Phares Copy Birthdays"), Required] public string[] JLinks { get; set; } public int? FaceAreaPermyriad { get; set; }
[Display(Name = "Load Or GetPersonName Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } public int? FaceConfidencePercent { get; set; }
[Display(Name = "Load Or GetPersonName Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } public int? FaceDistanceHiddenImageFactor { get; set; }
[Display(Name = "Mixed Year Relative Paths"), Required] public string[] MixedYearRelativePaths { get; set; } public int? FaceDistancePermyriad { get; set; }
[Display(Name = "Model Directory"), Required] public string ModelDirectory { get; set; } public string? FocusDirectory { get; set; }
[Display(Name = "Model Name"), Required] public string ModelName { get; set; } public string? FocusModel { get; set; }
[Display(Name = "Number Jitters"), Required] public int? NumberOfJitters { get; set; } public bool? ForceFaceLastWriteTimeToCreationTime { get; set; }
[Display(Name = "Number of Times To Up Sample"), Required] public int? NumberOfTimesToUpsample { get; set; } public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; }
[Display(Name = "Output Extension"), Required] public string OutputExtension { get; set; } public bool? ForceResizeLastWriteTimeToCreationTime { get; set; }
[Display(Name = "Output Quality"), Required] public int? OutputQuality { get; set; } public string? GenealogicalDataCommunicationFile { get; set; }
[Display(Name = "Output Resolutions"), Required] public string[] OutputResolutions { get; set; } public string[]? IgnoreExtensions { get; set; }
[Display(Name = "Override For Face Images"), Required] public bool? OverrideForFaceImages { get; set; } public string[]? JLinks { get; set; }
[Display(Name = "Override For Face Landmark Images"), Required] public bool? OverrideForFaceLandmarkImages { get; set; } public string[]? LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; }
[Display(Name = "Override For Resize Images"), Required] public bool? OverrideForResizeImages { get; set; } public string[]? LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; }
[Display(Name = "Predictor Model Name"), Required] public string PredictorModelName { get; set; } public bool? LoadPhotoPrismLocations { get; set; }
[Display(Name = "Properties Changed For Distance"), Required] public bool? PropertiesChangedForDistance { get; set; } public float? LocationContainerDistanceTolerance { get; set; }
[Display(Name = "Properties Changed For Faces"), Required] public bool? PropertiesChangedForFaces { get; set; } public int? LocationDigits { get; set; }
[Display(Name = "Properties Changed For Index"), Required] public bool? PropertiesChangedForIndex { get; set; } public int? LocationFactor { get; set; }
[Display(Name = "Properties Changed For Metadata"), Required] public bool? PropertiesChangedForMetadata { get; set; } public bool? LookForAbandoned { get; set; }
[Display(Name = "Properties Changed For Resize"), Required] public bool? PropertiesChangedForResize { get; set; } public string? MappingDefaultName { get; set; }
[Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { get; set; }
[Display(Name = "Reverse"), Required] public bool? Reverse { get; set; } public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { get; set; }
[Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; } public string[]? MixedYearRelativePaths { get; set; }
[Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; } public string? ModelDirectory { get; set; }
[Display(Name = "Save Resized Images by Person Key Formatted"), Required] public string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions { get; set; } public string? ModelName { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; } public int? NumberOfJitters { get; set; }
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; } public int? NumberOfTimesToUpsample { get; set; }
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } public string? OutputExtension { get; set; }
[Display(Name = "Test Distance Results"), Required] public bool? TestDistanceResults { get; set; } public int? OutputQuality { get; set; }
[Display(Name = "Valid Resolutions"), Required] public string[] ValidResolutions { get; set; } public string[]? OutputResolutions { get; set; }
public bool? OverrideForFaceImages { get; set; }
#nullable restore public bool? OverrideForFaceLandmarkImages { get; set; }
public bool? OverrideForResizeImages { get; set; }
public int? PersonBirthdayFirstYear { get; set; }
public string? PersonBirthdayFormat { get; set; }
public string? PersonCharacters { get; set; }
public int? PersonCharactersCopyCount { get; set; }
public string? PersonKeyFormat { get; set; }
public string? PredictorModelName { get; set; }
public bool? PropertiesChangedForDistance { get; set; }
public bool? PropertiesChangedForFaces { get; set; }
public bool? PropertiesChangedForIndex { get; set; }
public bool? PropertiesChangedForMetadata { get; set; }
public bool? PropertiesChangedForResize { get; set; }
public int? RadomUseBirthdayMinimum { get; set; }
public int[]? RangeDaysDeltaTolerance { get; set; }
public float[]? RangeDistanceTolerance { get; set; }
public float[]? RangeFaceAreaTolerance { get; set; }
public float[]? RangeFaceConfidence { get; set; }
public float[]? RectangleIntersectMinimums { get; set; }
public bool? Reverse { get; set; }
public string[]? SaveBlurHashForOutputResolutions { get; set; }
public string[]? SaveFaceDistancesForOutputResolutions { get; set; }
public string[]? SaveFaceLandmarkForOutputResolutions { get; set; }
public string[]? SaveFilteredOriginalImagesFromJLinksForOutputResolutions { get; set; }
public bool? SaveFullYearOfRandomFiles { get; set; }
public bool? SaveIndividually { get; set; }
public string[]? SaveMappedForOutputResolutions { get; set; }
public string[]? SavePropertyShortcutsForOutputResolutions { get; set; }
public string[]? SaveRandomForOutputResolutions { get; set; }
public bool? SaveResizedSubfiles { get; set; }
public string[]? SaveShortcutsForOutputResolutions { get; set; }
public bool? SaveSortingWithoutPerson { get; set; }
public string[]? SkipNotSkipDirectories { get; set; }
public int? SkipOlderThanDays { get; set; }
public int? SkipPersonWithMoreThen { get; set; }
public bool? SkipSearch { get; set; }
public int? SortingMaximumPerFaceShouldBeHigh { get; set; }
public int? SortingMaximumPerKey { get; set; }
public int? SortingMinimumToUseSigma { get; set; }
public bool? TestDistanceResults { get; set; }
public int? UseFilterTries { get; set; }
public string[]? ValidKeyWordsToIgnoreInRandom { get; set; }
public string[]? ValidResolutions { get; set; }
public override string ToString() public override string ToString()
{ {
@ -57,108 +98,178 @@ public class Configuration
return result; return result;
} }
private static Models.Configuration Get(Configuration? configuration) #pragma warning restore csharp_preserve_single_line_statements
private static Models.Configuration Get(Configuration? configuration, Property.Models.Configuration propertyConfiguration)
{ {
Models.Configuration result; Models.Configuration result;
if (configuration is null) if (configuration is null) throw new NullReferenceException(nameof(configuration));
throw new NullReferenceException(nameof(configuration)); if (configuration.CheckDFaceAndUpWriteDates is null) throw new NullReferenceException(nameof(configuration.CheckDFaceAndUpWriteDates));
if (configuration.CheckDFaceAndUpWriteDates is null) if (configuration?.CheckDFaceAndUpWriteDates is null) throw new NullReferenceException(nameof(configuration.CheckDFaceAndUpWriteDates));
throw new NullReferenceException(nameof(configuration.CheckDFaceAndUpWriteDates)); if (configuration?.CheckJsonForDistanceResults is null) throw new NullReferenceException(nameof(configuration.CheckJsonForDistanceResults));
if (configuration.CheckJsonForDistanceResults is null) // if (configuration?.CopyFacesAndSaveFaceLandmarkForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions));
throw new NullReferenceException(nameof(configuration.CheckJsonForDistanceResults)); if (configuration?.CrossDirectoryMaxItemsInDistanceCollection is null) throw new NullReferenceException(nameof(configuration.CrossDirectoryMaxItemsInDistanceCollection));
if (configuration.CrossDirectoryMaxItemsInDistanceCollection is null) if (configuration?.DeletePossibleDuplicates is null) throw new NullReferenceException(nameof(configuration.DeletePossibleDuplicates));
throw new NullReferenceException(nameof(configuration.CrossDirectoryMaxItemsInDistanceCollection)); if (configuration?.DistanceFactor is null) throw new NullReferenceException(nameof(configuration.DistanceFactor));
if (configuration.DistanceFactor is null) if (configuration?.DistanceMoveUnableToMatch is null) throw new NullReferenceException(nameof(configuration.DistanceMoveUnableToMatch));
throw new NullReferenceException(nameof(configuration.DistanceFactor)); if (configuration?.DistancePixelDistanceTolerance is null) throw new NullReferenceException(nameof(configuration.DistancePixelDistanceTolerance));
if (configuration.ForceFaceLastWriteTimeToCreationTime is null) if (configuration?.DistanceRenameToMatch is null) throw new NullReferenceException(nameof(configuration.DistanceRenameToMatch));
throw new NullReferenceException(nameof(configuration.ForceFaceLastWriteTimeToCreationTime)); if (configuration?.EyeThreshold is null) throw new NullReferenceException(nameof(configuration.EyeThreshold));
if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) if (configuration?.FaceAreaPermyriad is null) throw new NullReferenceException(nameof(configuration.FaceAreaPermyriad));
throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime)); if (configuration?.FaceConfidencePercent is null) throw new NullReferenceException(nameof(configuration.FaceConfidencePercent));
if (configuration.ForceResizeLastWriteTimeToCreationTime is null) if (configuration?.FaceDistanceHiddenImageFactor is null) throw new NullReferenceException(nameof(configuration.FaceDistanceHiddenImageFactor));
throw new NullReferenceException(nameof(configuration.ForceResizeLastWriteTimeToCreationTime)); if (configuration?.FaceDistancePermyriad is null) throw new NullReferenceException(nameof(configuration.FaceDistancePermyriad));
if (configuration.IgnoreExtensions is null) if (configuration?.FocusDirectory is null) throw new NullReferenceException(nameof(configuration.FocusDirectory));
throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); if (configuration?.FocusModel is null) throw new NullReferenceException(nameof(configuration.FocusModel));
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ??= Array.Empty<string>(); if (configuration?.ForceFaceLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceFaceLastWriteTimeToCreationTime));
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ??= Array.Empty<string>(); if (configuration?.ForceMetadataLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime));
if (configuration.MixedYearRelativePaths is null) if (configuration?.ForceResizeLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceResizeLastWriteTimeToCreationTime));
throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths)); if (configuration?.GenealogicalDataCommunicationFile is null) throw new NullReferenceException(nameof(configuration.GenealogicalDataCommunicationFile));
if (configuration.NumberOfJitters is null) // if (configuration?.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions));
throw new NullReferenceException(nameof(configuration.NumberOfJitters)); // if (configuration?.JLinks is null) throw new NullReferenceException(nameof(configuration.JLinks));
if (configuration.NumberOfTimesToUpsample is null) // if (configuration?.LoadOrCreateThenSaveDistanceResultsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions));
throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample)); // if (configuration?.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions));
if (configuration.OutputQuality is null) if (configuration?.LoadPhotoPrismLocations is null) throw new NullReferenceException(nameof(configuration.LoadPhotoPrismLocations));
throw new NullReferenceException(nameof(configuration.OutputQuality)); // if (configuration?.LocationContainerDistanceTolerance is null) throw new NullReferenceException(nameof(configuration.LocationContainerDistanceTolerance));
if (configuration.OutputResolutions is null) if (configuration?.LocationDigits is null) throw new NullReferenceException(nameof(configuration.LocationDigits));
throw new NullReferenceException(nameof(configuration.OutputResolutions)); if (configuration?.LocationFactor is null) throw new NullReferenceException(nameof(configuration.LocationFactor));
if (configuration.OverrideForFaceImages is null) if (configuration?.LookForAbandoned is null) throw new NullReferenceException(nameof(configuration.LookForAbandoned));
throw new NullReferenceException(nameof(configuration.OverrideForFaceImages)); if (configuration?.MappingDefaultName is null) throw new NullReferenceException(nameof(configuration.MappingDefaultName));
if (configuration.OverrideForFaceLandmarkImages is null) if (configuration?.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null) throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping));
throw new NullReferenceException(nameof(configuration.OverrideForFaceLandmarkImages)); if (configuration?.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping is null) throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping));
if (configuration.OverrideForResizeImages is null) // if (configuration?.MixedYearRelativePaths is null) throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths));
throw new NullReferenceException(nameof(configuration.OverrideForResizeImages)); if (configuration?.ModelDirectory is null) throw new NullReferenceException(nameof(configuration.ModelDirectory));
if (configuration.PropertiesChangedForDistance is null) if (configuration?.ModelName is null) throw new NullReferenceException(nameof(configuration.ModelName));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForDistance)); if (configuration?.OutputExtension is null) throw new NullReferenceException(nameof(configuration.OutputExtension));
if (configuration.PropertiesChangedForFaces is null) if (configuration?.OutputQuality is null) throw new NullReferenceException(nameof(configuration.OutputQuality));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForFaces)); // if (configuration?.OutputResolutions is null) throw new NullReferenceException(nameof(configuration.OutputResolutions));
if (configuration.PropertiesChangedForIndex is null) if (configuration?.OverrideForFaceImages is null) throw new NullReferenceException(nameof(configuration.OverrideForFaceImages));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForIndex)); if (configuration?.OverrideForFaceLandmarkImages is null) throw new NullReferenceException(nameof(configuration.OverrideForFaceLandmarkImages));
if (configuration.PropertiesChangedForMetadata is null) if (configuration?.OverrideForResizeImages is null) throw new NullReferenceException(nameof(configuration.OverrideForResizeImages));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata)); if (configuration?.PersonBirthdayFirstYear is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFirstYear));
if (configuration.PropertiesChangedForResize is null) if (configuration?.PersonBirthdayFormat is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize)); if (configuration?.PersonCharacters is null) throw new NullReferenceException(nameof(configuration.PersonCharacters));
if (configuration.Reverse is null) if (configuration?.PersonCharactersCopyCount is null) throw new NullReferenceException(nameof(configuration.PersonCharactersCopyCount));
throw new NullReferenceException(nameof(configuration.Reverse)); if (configuration?.PersonKeyFormat is null) throw new NullReferenceException(nameof(configuration.PersonKeyFormat));
configuration.SaveFaceLandmarkForOutputResolutions ??= Array.Empty<string>(); if (configuration?.PredictorModelName is null) throw new NullReferenceException(nameof(configuration.PredictorModelName));
if (configuration.SaveFullYearOfRandomFiles is null) if (configuration?.PropertiesChangedForDistance is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForDistance));
throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles)); if (configuration?.PropertiesChangedForFaces is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForFaces));
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ??= Array.Empty<string>(); if (configuration?.PropertiesChangedForIndex is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForIndex));
if (configuration.SaveResizedSubfiles is null) if (configuration?.PropertiesChangedForMetadata is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata));
throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles)); if (configuration?.PropertiesChangedForResize is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize));
configuration.SaveShortcutsForOutputResolutions ??= Array.Empty<string>(); if (configuration?.RadomUseBirthdayMinimum is null) throw new NullReferenceException(nameof(configuration.RadomUseBirthdayMinimum));
if (configuration.SkipSearch is null) // if (configuration?.RangeDaysDeltaTolerance is null) throw new NullReferenceException(nameof(configuration.RangeDaysDeltaTolerance));
throw new NullReferenceException(nameof(configuration.SkipSearch)); // if (configuration?.RangeDistanceTolerance is null) throw new NullReferenceException(nameof(configuration.RangeDistanceTolerance));
if (configuration.TestDistanceResults is null) // if (configuration?.RangeFaceAreaTolerance is null) throw new NullReferenceException(nameof(configuration.RangeFaceAreaTolerance));
throw new NullReferenceException(nameof(configuration.TestDistanceResults)); // if (configuration?.RangeFaceConfidence is null) throw new NullReferenceException(nameof(configuration.RangeFaceConfidence));
if (configuration.ValidResolutions is null) // if (configuration?.RectangleIntersectMinimums is null) throw new NullReferenceException(nameof(configuration.RectangleIntersectMinimums));
throw new NullReferenceException(nameof(configuration.ValidResolutions)); if (configuration?.Reverse is null) throw new NullReferenceException(nameof(configuration.Reverse));
result = new(configuration.PropertyConfiguration, // if (configuration?.SaveBlurHashForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveBlurHashForOutputResolutions));
// if (configuration?.SaveFaceDistancesForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveFaceDistancesForOutputResolutions));
// if (configuration?.SaveFaceLandmarkForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveFaceLandmarkForOutputResolutions));
// if (configuration?.SaveFilteredOriginalImagesFromJLinksForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions));
if (configuration?.SaveFullYearOfRandomFiles is null) throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
if (configuration?.SaveIndividually is null) throw new NullReferenceException(nameof(configuration.SaveIndividually));
// if (configuration?.SaveMappedForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveMappedForOutputResolutions));
// if (configuration?.SavePropertyShortcutsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SavePropertyShortcutsForOutputResolutions));
// if (configuration?.SaveRandomForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveRandomForOutputResolutions));
if (configuration?.SaveResizedSubfiles is null) throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
// if (configuration?.SaveShortcutsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveShortcutsForOutputResolutions));
if (configuration?.SaveSortingWithoutPerson is null) throw new NullReferenceException(nameof(configuration.SaveSortingWithoutPerson));
// if (configuration?.SkipNotSkipDirectories is null) throw new NullReferenceException(nameof(configuration.SkipNotSkipDirectories));
// if (configuration?.SkipOlderThanDays is null) throw new NullReferenceException(nameof(configuration.SkipOlderThanDays));
// if (configuration?.SkipPersonWithMoreThen is null) throw new NullReferenceException(nameof(configuration.SkipPersonWithMoreThen));
if (configuration?.SkipSearch is null) throw new NullReferenceException(nameof(configuration.SkipSearch));
if (configuration?.SortingMaximumPerFaceShouldBeHigh is null) throw new NullReferenceException(nameof(configuration.SortingMaximumPerFaceShouldBeHigh));
if (configuration?.SortingMaximumPerKey is null) throw new NullReferenceException(nameof(configuration.SortingMaximumPerKey));
if (configuration?.SortingMinimumToUseSigma is null) throw new NullReferenceException(nameof(configuration.SortingMinimumToUseSigma));
if (configuration?.TestDistanceResults is null) throw new NullReferenceException(nameof(configuration.TestDistanceResults));
if (configuration?.UseFilterTries is null) throw new NullReferenceException(nameof(configuration.UseFilterTries));
// if (configuration?.ValidKeyWordsToIgnoreInRandom is null) throw new NullReferenceException(nameof(configuration.ValidKeyWordsToIgnoreInRandom));
// if (configuration?.ValidResolutions is null) throw new NullReferenceException(nameof(configuration.ValidResolutions));
result = new(propertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckDFaceAndUpWriteDates.Value,
configuration.CheckJsonForDistanceResults.Value, configuration.CheckJsonForDistanceResults.Value,
configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(),
configuration.CrossDirectoryMaxItemsInDistanceCollection.Value, configuration.CrossDirectoryMaxItemsInDistanceCollection.Value,
configuration.DeletePossibleDuplicates.Value,
configuration.DistanceFactor.Value, configuration.DistanceFactor.Value,
configuration.DistanceMoveUnableToMatch.Value,
configuration.DistancePixelDistanceTolerance.Value,
configuration.DistanceRenameToMatch.Value,
configuration.EyeThreshold.Value,
configuration.FaceAreaPermyriad.Value,
configuration.FaceConfidencePercent.Value,
configuration.FaceDistanceHiddenImageFactor.Value,
configuration.FaceDistancePermyriad.Value,
configuration.FocusDirectory,
configuration.FocusModel,
configuration.ForceFaceLastWriteTimeToCreationTime.Value, configuration.ForceFaceLastWriteTimeToCreationTime.Value,
configuration.ForceMetadataLastWriteTimeToCreationTime.Value, configuration.ForceMetadataLastWriteTimeToCreationTime.Value,
configuration.ForceResizeLastWriteTimeToCreationTime.Value, configuration.ForceResizeLastWriteTimeToCreationTime.Value,
configuration.IgnoreExtensions, configuration.GenealogicalDataCommunicationFile,
configuration.JLinks, configuration.IgnoreExtensions ?? Array.Empty<string>(),
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, configuration.JLinks ?? Array.Empty<string>(),
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? Array.Empty<string>(),
configuration.MixedYearRelativePaths, configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? Array.Empty<string>(),
configuration.LoadPhotoPrismLocations.Value,
configuration.LocationContainerDistanceTolerance,
configuration.LocationDigits.Value,
configuration.LocationFactor.Value,
configuration.LookForAbandoned.Value,
configuration.MappingDefaultName,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value,
configuration.MixedYearRelativePaths ?? Array.Empty<string>(),
configuration.ModelDirectory, configuration.ModelDirectory,
configuration.ModelName, configuration.ModelName,
configuration.NumberOfJitters.Value,
configuration.NumberOfTimesToUpsample.Value,
configuration.OutputExtension, configuration.OutputExtension,
configuration.OutputQuality.Value, configuration.OutputQuality.Value,
configuration.OutputResolutions, configuration.OutputResolutions ?? Array.Empty<string>(),
configuration.OverrideForFaceImages.Value, configuration.OverrideForFaceImages.Value,
configuration.OverrideForFaceLandmarkImages.Value, configuration.OverrideForFaceLandmarkImages.Value,
configuration.OverrideForResizeImages.Value, configuration.OverrideForResizeImages.Value,
configuration.PersonBirthdayFirstYear.Value,
configuration.PersonBirthdayFormat,
configuration.PersonCharacters,
configuration.PersonCharactersCopyCount.Value,
configuration.PersonKeyFormat,
configuration.PredictorModelName, configuration.PredictorModelName,
configuration.PropertiesChangedForDistance.Value, configuration.PropertiesChangedForDistance.Value,
configuration.PropertiesChangedForFaces.Value, configuration.PropertiesChangedForFaces.Value,
configuration.PropertiesChangedForIndex.Value, configuration.PropertiesChangedForIndex.Value,
configuration.PropertiesChangedForMetadata.Value, configuration.PropertiesChangedForMetadata.Value,
configuration.PropertiesChangedForResize.Value, configuration.PropertiesChangedForResize.Value,
configuration.RadomUseBirthdayMinimum.Value,
configuration.RangeDaysDeltaTolerance ?? Array.Empty<int>(),
configuration.RangeDistanceTolerance ?? Array.Empty<float>(),
configuration.RangeFaceAreaTolerance ?? Array.Empty<float>(),
configuration.RangeFaceConfidence ?? Array.Empty<float>(),
configuration.RectangleIntersectMinimums ?? Array.Empty<float>(),
configuration.Reverse.Value, configuration.Reverse.Value,
configuration.SaveFaceLandmarkForOutputResolutions, configuration.SaveBlurHashForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveFaceDistancesForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveIndividually.Value,
configuration.SaveFullYearOfRandomFiles.Value, configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions, configuration.SaveMappedForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveShortcutsForOutputResolutions, configuration.SavePropertyShortcutsForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveRandomForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveResizedSubfiles.Value, configuration.SaveResizedSubfiles.Value,
configuration.SaveShortcutsForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveSortingWithoutPerson.Value,
configuration.SkipNotSkipDirectories ?? Array.Empty<string>(),
configuration.SkipOlderThanDays,
configuration.SkipPersonWithMoreThen,
configuration.SkipSearch.Value, configuration.SkipSearch.Value,
configuration.SortingMaximumPerFaceShouldBeHigh.Value,
configuration.SortingMaximumPerKey.Value,
configuration.SortingMinimumToUseSigma.Value,
configuration.TestDistanceResults.Value, configuration.TestDistanceResults.Value,
configuration.ValidResolutions); configuration.UseFilterTries.Value,
configuration.ValidKeyWordsToIgnoreInRandom ?? Array.Empty<string>(),
configuration.ValidResolutions ?? Array.Empty<string>());
return result; return result;
} }
@ -175,8 +286,7 @@ public class Configuration
IConfigurationSection configurationSection = configurationRoot.GetSection(section); IConfigurationSection configurationSection = configurationRoot.GetSection(section);
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration, propertyConfiguration);
result.SetAndUpdate(propertyConfiguration);
return result; return result;
} }

View File

@ -1,142 +1,85 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Tests.Models; namespace View_by_Distance.Tests.Models;
public class Configuration public record Configuration(Property.Models.Configuration PropertyConfiguration,
{ bool CheckDFaceAndUpWriteDates,
bool CheckJsonForDistanceResults,
protected Property.Models.Configuration _PropertyConfiguration; string[] CopyFacesAndSaveFaceLandmarkForOutputResolutions,
public Property.Models.Configuration PropertyConfiguration => _PropertyConfiguration; int CrossDirectoryMaxItemsInDistanceCollection,
bool DeletePossibleDuplicates,
public bool CheckDFaceAndUpWriteDates { init; get; } int DistanceFactor,
public bool CheckJsonForDistanceResults { init; get; } bool DistanceMoveUnableToMatch,
public int CrossDirectoryMaxItemsInDistanceCollection { init; get; } int DistancePixelDistanceTolerance,
public int DistanceFactor { init; get; } bool DistanceRenameToMatch,
public bool ForceFaceLastWriteTimeToCreationTime { init; get; } int EyeThreshold,
public bool ForceMetadataLastWriteTimeToCreationTime { init; get; } int FaceAreaPermyriad,
public bool ForceResizeLastWriteTimeToCreationTime { init; get; } int FaceConfidencePercent,
public string[] IgnoreExtensions { init; get; } int FaceDistanceHiddenImageFactor,
public string[] JLinks { init; get; } int FaceDistancePermyriad,
public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } string FocusDirectory,
public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } string FocusModel,
public string[] MixedYearRelativePaths { init; get; } bool ForceFaceLastWriteTimeToCreationTime,
public string ModelDirectory { init; get; } bool ForceMetadataLastWriteTimeToCreationTime,
public string ModelName { init; get; } bool ForceResizeLastWriteTimeToCreationTime,
public int NumberOfJitters { init; get; } string GenealogicalDataCommunicationFile,
public int NumberOfTimesToUpsample { init; get; } string[] IgnoreExtensions,
public string OutputExtension { init; get; } string[] JLinks,
public int OutputQuality { init; get; } string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions,
public string[] OutputResolutions { init; get; } string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions,
public bool OverrideForFaceImages { init; get; } bool LoadPhotoPrismLocations,
public bool OverrideForFaceLandmarkImages { init; get; } float? LocationContainerDistanceTolerance,
public bool OverrideForResizeImages { init; get; } int LocationDigits,
public string PredictorModelName { init; get; } int LocationFactor,
public bool PropertiesChangedForDistance { init; get; } bool LookForAbandoned,
public bool PropertiesChangedForFaces { init; get; } string MappingDefaultName,
public bool PropertiesChangedForIndex { init; get; } bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping,
public bool PropertiesChangedForMetadata { init; get; } bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping,
public bool PropertiesChangedForResize { init; get; } string[] MixedYearRelativePaths,
public bool Reverse { init; get; } string ModelDirectory,
public string[] SaveFaceLandmarkForOutputResolutions { init; get; } string ModelName,
public bool SaveFullYearOfRandomFiles { init; get; } string OutputExtension,
public string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions { init; get; } int OutputQuality,
public string[] SaveShortcutsForOutputResolutions { init; get; } string[] OutputResolutions,
public bool SaveResizedSubfiles { init; get; } bool OverrideForFaceImages,
public bool SkipSearch { init; get; } bool OverrideForFaceLandmarkImages,
public bool TestDistanceResults { init; get; } bool OverrideForResizeImages,
public string[] ValidResolutions { init; get; } int PersonBirthdayFirstYear,
string PersonBirthdayFormat,
[JsonConstructor] string PersonCharacters,
public Configuration(Property.Models.Configuration propertyConfiguration, int PersonCharactersCopyCount,
bool checkDFaceAndUpWriteDates, string PersonKeyFormat,
bool checkJsonForDistanceResults, string PredictorModelName,
int crossDirectoryMaxItemsInDistanceCollection, bool PropertiesChangedForDistance,
int distanceFactor, bool PropertiesChangedForFaces,
bool forceFaceLastWriteTimeToCreationTime, bool PropertiesChangedForIndex,
bool forceMetadataLastWriteTimeToCreationTime, bool PropertiesChangedForMetadata,
bool forceResizeLastWriteTimeToCreationTime, bool PropertiesChangedForResize,
string[] ignoreExtensions, int RadomUseBirthdayMinimum,
string[] jLinks, int[] RangeDaysDeltaTolerance,
string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions, float[] RangeDistanceTolerance,
string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions, float[] RangeFaceAreaPermyriadTolerance,
string[] mixedYearRelativePaths, float[] RangeFaceConfidence,
string modelDirectory, float[] RectangleIntersectMinimums,
string modelName, bool Reverse,
int numberOfJitters, string[] SaveBlurHashForOutputResolutions,
int numberOfTimesToUpsample, string[] SaveFaceDistancesForOutputResolutions,
string outputExtension, string[] SaveFaceLandmarkForOutputResolutions,
int outputQuality, string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions,
string[] outputResolutions, bool SaveIndividually,
bool overrideForFaceImages, bool SaveFullYearOfRandomFiles,
bool overrideForFaceLandmarkImages, string[] SaveMappedForOutputResolutions,
bool overrideForResizeImages, string[] SavePropertyShortcutsForOutputResolutions,
string predictorModelName, string[] SaveRandomForOutputResolutions,
bool propertiesChangedForDistance, bool SaveResizedSubfiles,
bool propertiesChangedForFaces, string[] SaveShortcutsForOutputResolutions,
bool propertiesChangedForIndex, bool SaveSortingWithoutPerson,
bool propertiesChangedForMetadata, string[] SkipNotSkipDirectories,
bool propertiesChangedForResize, int? SkipOlderThanDays,
bool reverse, int? SkipPersonWithMoreThen,
string[] saveFaceLandmarkForOutputResolutions, bool SkipSearch,
bool saveFullYearOfRandomFiles, int SortingMaximumPerFaceShouldBeHigh,
string[] saveFilteredOriginalImagesFromJLinksForOutputResolutions, int SortingMaximumPerKey,
string[] saveShortcutsForOutputResolutions, int SortingMinimumToUseSigma,
bool saveResizedSubfiles, bool TestDistanceResults,
bool skipSearch, int UseFilterTries,
bool testDistanceResults, string[] ValidKeyWordsToIgnoreInRandom,
string[] validResolutions) string[] ValidResolutions);
{
_PropertyConfiguration = propertyConfiguration;
CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates;
CheckJsonForDistanceResults = checkJsonForDistanceResults;
CrossDirectoryMaxItemsInDistanceCollection = crossDirectoryMaxItemsInDistanceCollection;
DistanceFactor = distanceFactor;
ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime;
ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime;
ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime;
IgnoreExtensions = ignoreExtensions;
JLinks = jLinks;
LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions;
LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions;
MixedYearRelativePaths = mixedYearRelativePaths;
ModelDirectory = modelDirectory;
ModelName = modelName;
NumberOfJitters = numberOfJitters;
NumberOfTimesToUpsample = numberOfTimesToUpsample;
OutputExtension = outputExtension;
OutputQuality = outputQuality;
OutputResolutions = outputResolutions;
OverrideForFaceImages = overrideForFaceImages;
OverrideForFaceLandmarkImages = overrideForFaceLandmarkImages;
OverrideForResizeImages = overrideForResizeImages;
PredictorModelName = predictorModelName;
PropertiesChangedForDistance = propertiesChangedForDistance;
PropertiesChangedForFaces = propertiesChangedForFaces;
PropertiesChangedForIndex = propertiesChangedForIndex;
PropertiesChangedForMetadata = propertiesChangedForMetadata;
PropertiesChangedForResize = propertiesChangedForResize;
Reverse = reverse;
SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions;
SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles;
SaveFilteredOriginalImagesFromJLinksForOutputResolutions = saveFilteredOriginalImagesFromJLinksForOutputResolutions;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SaveResizedSubfiles = saveResizedSubfiles;
SkipSearch = skipSearch;
TestDistanceResults = testDistanceResults;
ValidResolutions = validResolutions;
}
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
return result;
}
public void SetAndUpdate(Property.Models.Configuration configuration)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update();
}
}

View File

@ -87,22 +87,22 @@ public class UnitTestResize
{ {
A_Property result; A_Property result;
if (_Configuration?.PropertyConfiguration is null) if (_Configuration?.PropertyConfiguration is null)
throw new NullReferenceException(nameof(_Configuration.PropertyConfiguration)); throw new NullReferenceException(nameof(_PropertyConfiguration));
result = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Configuration.OutputExtension, reverse, aResultsFullGroupDirectory); result = new(_AppSettings.MaxDegreeOfParallelism, _PropertyConfiguration, _Configuration.OutputExtension, reverse, aResultsFullGroupDirectory);
return result; return result;
} }
private (string, string) GetResultsFullGroupDirectories() private (string, string) GetResultsFullGroupDirectories()
{ {
string aResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory( string aResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory(
_Configuration.PropertyConfiguration, _PropertyConfiguration,
nameof(A_Property), nameof(A_Property),
string.Empty, string.Empty,
includeResizeGroup: false, includeResizeGroup: false,
includeModel: false, includeModel: false,
includePredictorModel: false); includePredictorModel: false);
string bResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory( string bResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory(
_Configuration.PropertyConfiguration, _PropertyConfiguration,
nameof(B_Metadata), nameof(B_Metadata),
string.Empty, string.Empty,
includeResizeGroup: false, includeResizeGroup: false,
@ -114,7 +114,7 @@ public class UnitTestResize
private (string, string, string) GetResultsFullGroupDirectories(string outputResolution) private (string, string, string) GetResultsFullGroupDirectories(string outputResolution)
{ {
string cResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory( string cResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory(
_Configuration.PropertyConfiguration, _PropertyConfiguration,
nameof(C_Resize), nameof(C_Resize),
outputResolution, outputResolution,
includeResizeGroup: true, includeResizeGroup: true,
@ -128,6 +128,10 @@ public class UnitTestResize
[TestMethod] [TestMethod]
public void TestMethodResize() public void TestMethodResize()
{ {
if (_PropertyConfiguration.NumberOfJitters is null)
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfJitters));
if (_PropertyConfiguration.NumberOfTimesToUpsample is null)
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfTimesToUpsample));
string sourceFileName = "100000507001158650387.jpg"; string sourceFileName = "100000507001158650387.jpg";
string sourceDirectoryName = "Facebook/2023.2 Summer Facebook"; string sourceDirectoryName = "Facebook/2023.2 Summer Facebook";
Item item; Item item;
@ -144,16 +148,16 @@ public class UnitTestResize
bool outputResolutionHasNumber = outputResolution.Any(l => char.IsNumber(l)); bool outputResolutionHasNumber = outputResolution.Any(l => char.IsNumber(l));
(string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution); (string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution);
(string aResultsFullGroupDirectory, string bResultsFullGroupDirectory) = GetResultsFullGroupDirectories(); (string aResultsFullGroupDirectory, string bResultsFullGroupDirectory) = GetResultsFullGroupDirectories();
Shared.Models.Methods.IBlurHasher blurHasher = new BlurHash.Models.C2_BlurHasher(_Configuration.PropertyConfiguration); Shared.Models.Methods.IBlurHasher blurHasher = new BlurHash.Models.C2_BlurHasher(_PropertyConfiguration);
_Logger.Information(_Configuration.ModelDirectory); _Logger.Information(_Configuration.ModelDirectory);
A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory); A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory);
string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}"); string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}");
if (!Directory.Exists(aPropertySingletonDirectory)) if (!Directory.Exists(aPropertySingletonDirectory))
_ = Directory.CreateDirectory(aPropertySingletonDirectory); _ = Directory.CreateDirectory(aPropertySingletonDirectory);
(ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetTuple(_Configuration.OutputExtension, _Configuration.OutputQuality); (ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetTuple(_Configuration.OutputExtension, _Configuration.OutputQuality);
B_Metadata metadata = new(_Configuration.PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory); B_Metadata metadata = new(_PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory);
_ = metadata.ToString(); _ = metadata.ToString();
C_Resize resize = new(_Configuration.PropertyConfiguration, _Configuration.ForceResizeLastWriteTimeToCreationTime, _Configuration.OverrideForResizeImages, _Configuration.PropertiesChangedForResize, _Configuration.ValidResolutions, imageCodecInfo, encoderParameters, filenameExtension); C_Resize resize = new(_PropertyConfiguration, _Configuration.ForceResizeLastWriteTimeToCreationTime, _Configuration.OverrideForResizeImages, _Configuration.PropertiesChangedForResize, _Configuration.ValidResolutions, imageCodecInfo, encoderParameters, filenameExtension);
_ = resize.ToString(); _ = resize.ToString();
bool isUniqueFileName = false; bool isUniqueFileName = false;
bool? isNotUniqueAndNeedsReview = null; bool? isNotUniqueAndNeedsReview = null;
@ -182,9 +186,9 @@ public class UnitTestResize
item.SetResizedFileHolder(resize.FileNameExtension, resizedFileHolder); item.SetResizedFileHolder(resize.FileNameExtension, resizedFileHolder);
MappingFromItem mappingFromItem = IMappingFromItem.GetMappingFromItem(item); MappingFromItem mappingFromItem = IMappingFromItem.GetMappingFromItem(item);
(int _, metadataCollection) = metadata.GetMetadataCollection(subFileTuples, parseExceptions, changesFrom, mappingFromItem); (int _, metadataCollection) = metadata.GetMetadataCollection(subFileTuples, parseExceptions, changesFrom, mappingFromItem);
Dictionary<string, int[]> outputResolutionToResize = resize.GetResizeKeyValuePairs(_Configuration.PropertyConfiguration, cResultsFullGroupDirectory, subFileTuples, parseExceptions, metadataCollection, item.Property, mappingFromItem); Dictionary<string, int[]> outputResolutionToResize = resize.GetResizeKeyValuePairs(_PropertyConfiguration, cResultsFullGroupDirectory, subFileTuples, parseExceptions, metadataCollection, item.Property, mappingFromItem);
Assert.IsNotNull(mappingFromItem.ResizedFileHolder); Assert.IsNotNull(mappingFromItem.ResizedFileHolder);
resize.SaveResizedSubfile(_Configuration.PropertyConfiguration, outputResolution, cResultsFullGroupDirectory, subFileTuples, item, item.Property, mappingFromItem, outputResolutionToResize); resize.SaveResizedSubfile(_PropertyConfiguration, outputResolution, cResultsFullGroupDirectory, subFileTuples, item, item.Property, mappingFromItem, outputResolutionToResize);
string blurHash = blurHasher.Encode(resizedFileHolder); string blurHash = blurHasher.Encode(resizedFileHolder);
Assert.IsNotNull(blurHash); Assert.IsNotNull(blurHash);
NonThrowTryCatch(); NonThrowTryCatch();

View File

@ -3,25 +3,21 @@ using System.Text.Json.Serialization;
namespace View_by_Distance.Tests.Models; namespace View_by_Distance.Tests.Models;
public class AppSettings public record AppSettings(string Company,
int MaxDegreeOfParallelism,
string WorkingDirectoryName)
{ {
public string Company { init; get; }
public int MaxDegreeOfParallelism { init; get; }
public string WorkingDirectoryName { init; get; }
[JsonConstructor]
public AppSettings(string company, int maxDegreeOfParallelism, string workingDirectoryName)
{
Company = company;
MaxDegreeOfParallelism = maxDegreeOfParallelism;
WorkingDirectoryName = workingDirectoryName;
}
public override string ToString() public override string ToString()
{ {
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); string result = JsonSerializer.Serialize(this, AppSettingsSourceGenerationContext.Default.AppSettings);
return result; return result;
} }
} }
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(AppSettings))]
internal partial class AppSettingsSourceGenerationContext : JsonSerializerContext
{
}

View File

@ -0,0 +1,2 @@
[*.cs]
csharp_preserve_single_line_statements = true

View File

@ -1,30 +1,28 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Tests.Models.Binder; namespace View_by_Distance.Tests.Models.Binder;
public class AppSettings public class AppSettings
{ {
#nullable disable public string? Company { get; set; }
public string Company { get; set; }
public int? MaxDegreeOfParallelism { get; set; } public int? MaxDegreeOfParallelism { get; set; }
public string WorkingDirectoryName { get; set; } public string? WorkingDirectoryName { get; set; }
#nullable restore
public override string ToString() public override string ToString()
{ {
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); string result = JsonSerializer.Serialize(this, BinderAppSettingsSourceGenerationContext.Default.AppSettings);
return result; return result;
} }
private static Models.AppSettings Get(AppSettings? appSettings) private static Models.AppSettings Get(AppSettings? appSettings)
{ {
Models.AppSettings result; Models.AppSettings result;
if (appSettings?.MaxDegreeOfParallelism is null) if (appSettings?.Company is null) throw new NullReferenceException(nameof(appSettings.Company));
throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism)); if (appSettings?.MaxDegreeOfParallelism is null) throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism));
if (appSettings?.WorkingDirectoryName is null) throw new NullReferenceException(nameof(appSettings.WorkingDirectoryName));
result = new( result = new(
appSettings.Company, appSettings.Company,
appSettings.MaxDegreeOfParallelism.Value, appSettings.MaxDegreeOfParallelism.Value,
@ -36,9 +34,17 @@ public class AppSettings
public static Models.AppSettings Get(IConfigurationRoot configurationRoot) public static Models.AppSettings Get(IConfigurationRoot configurationRoot)
{ {
Models.AppSettings result; Models.AppSettings result;
#pragma warning disable IL3050, IL2026
AppSettings? appSettings = configurationRoot.Get<AppSettings>(); AppSettings? appSettings = configurationRoot.Get<AppSettings>();
#pragma warning restore IL3050, IL2026
result = Get(appSettings); result = Get(appSettings);
return result; return result;
} }
} }
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(AppSettings))]
internal partial class BinderAppSettingsSourceGenerationContext : JsonSerializerContext
{
}

View File

@ -1,6 +1,5 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Phares.Shared; using Phares.Shared;
using System.ComponentModel.DataAnnotations;
using System.Text.Json; using System.Text.Json;
namespace View_by_Distance.Tests.Models.Binder; namespace View_by_Distance.Tests.Models.Binder;
@ -8,69 +7,90 @@ namespace View_by_Distance.Tests.Models.Binder;
public class Configuration public class Configuration
{ {
#nullable disable public bool? CheckDFaceAndUpWriteDates { get; set; }
public bool? CheckJsonForDistanceResults { get; set; }
[Display(Name = "Check D Face and Up Dates"), Required] public bool? CheckDFaceAndUpWriteDates { get; set; } public string[]? CopyFacesAndSaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Check Json For Distance Results"), Required] public bool? CheckJsonForDistanceResults { get; set; } public int? CrossDirectoryMaxItemsInDistanceCollection { get; set; }
[Display(Name = "CrossDirectory Max Items In Distance Collection"), Required] public int? CrossDirectoryMaxItemsInDistanceCollection { get; set; } public bool? DeletePossibleDuplicates { get; set; }
[Display(Name = "Distance Factor"), Required] public int? DistanceFactor { get; set; } public int? DistanceFactor { get; set; }
[Display(Name = "Distance Move Unable to Match by 1 Tick"), Required] public bool? DistanceMoveUnableToMatch { get; set; } public bool? DistanceMoveUnableToMatch { get; set; }
[Display(Name = "Distance Pixel Distance Tolerance"), Required] public int? DistancePixelDistanceTolerance { get; set; } public int? DistancePixelDistanceTolerance { get; set; }
[Display(Name = "Distance Rename to Match"), Required] public bool? DistanceRenameToMatch { get; set; } public bool? DistanceRenameToMatch { get; set; }
[Display(Name = "Face Distance Hidden Image Factor"), Required] public int? FaceDistanceHiddenImageFactor { get; set; } public int? EyeThreshold { get; set; }
[Display(Name = "Face Confidence Percent"), Required] public int? FaceConfidencePercent { get; set; } public int? FaceAreaPermyriad { get; set; }
[Display(Name = "Face Distance Permyriad"), Required] public int? FaceDistancePermyriad { get; set; } public int? FaceConfidencePercent { get; set; }
[Display(Name = "Force Face Last Write Time to Creation Time"), Required] public bool? ForceFaceLastWriteTimeToCreationTime { get; set; } public int? FaceDistanceHiddenImageFactor { get; set; }
[Display(Name = "Force Metadata Last Write Time to Creation Time"), Required] public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; } public int? FaceDistancePermyriad { get; set; }
[Display(Name = "Force Resize Last Write Time to Creation Time"), Required] public bool? ForceResizeLastWriteTimeToCreationTime { get; set; } public string? FocusDirectory { get; set; }
[Display(Name = "Ignore Extensions"), Required] public string[] IgnoreExtensions { get; set; } public string? FocusModel { get; set; }
[Display(Name = "Julie Phares Copy Birthdays"), Required] public string[] JLinks { get; set; } public bool? ForceFaceLastWriteTimeToCreationTime { get; set; }
[Display(Name = "Load Or GetPersonName Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; }
[Display(Name = "Load Or GetPersonName Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } public bool? ForceResizeLastWriteTimeToCreationTime { get; set; }
[Display(Name = "Location Digits"), Required] public int? LocationDigits { get; set; } public string? GenealogicalDataCommunicationFile { get; set; }
[Display(Name = "Location Factor"), Required] public int? LocationFactor { get; set; } public string[]? IgnoreExtensions { get; set; }
[Display(Name = "Mapping Default Name"), Required] public string MappingDefaultName { get; set; } public string[]? JLinks { get; set; }
[Display(Name = "Mapping Use Deterministic Hash Code Unknown Face Key Value Pairs for Add to Mapping"), Required] public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { get; set; } public string[]? LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; }
[Display(Name = "Mapping Use Deterministic Hash Code Unknown Face Key Value Pairs for Save Mapping"), Required] public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { get; set; } public string[]? LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; }
[Display(Name = "Mixed Year Relative Paths"), Required] public string[] MixedYearRelativePaths { get; set; } public bool? LoadPhotoPrismLocations { get; set; }
[Display(Name = "Model Directory"), Required] public string ModelDirectory { get; set; } public float? LocationContainerDistanceTolerance { get; set; }
[Display(Name = "Model Name"), Required] public string ModelName { get; set; } public int? LocationDigits { get; set; }
[Display(Name = "Number Jitters"), Required] public int? NumberOfJitters { get; set; } public int? LocationFactor { get; set; }
[Display(Name = "Number of Times To Up Sample"), Required] public int? NumberOfTimesToUpsample { get; set; } public bool? LookForAbandoned { get; set; }
[Display(Name = "Output Extension"), Required] public string OutputExtension { get; set; } public string? MappingDefaultName { get; set; }
[Display(Name = "Output Quality"), Required] public int? OutputQuality { get; set; } public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { get; set; }
[Display(Name = "Output Resolutions"), Required] public string[] OutputResolutions { get; set; } public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { get; set; }
[Display(Name = "Override For Face Images"), Required] public bool? OverrideForFaceImages { get; set; } public string[]? MixedYearRelativePaths { get; set; }
[Display(Name = "Override For Face Landmark Images"), Required] public bool? OverrideForFaceLandmarkImages { get; set; } public string? ModelDirectory { get; set; }
[Display(Name = "Override For Resize Images"), Required] public bool? OverrideForResizeImages { get; set; } public string? ModelName { get; set; }
[Display(Name = "Person Birthday First Year"), Required] public int? PersonBirthdayFirstYear { get; set; } public int? NumberOfJitters { get; set; }
[Display(Name = "Person Birthday Format"), Required] public string PersonBirthdayFormat { get; set; } public int? NumberOfTimesToUpsample { get; set; }
[Display(Name = "PersonKey Format"), Required] public string PersonKeyFormat { get; set; } public string? OutputExtension { get; set; }
[Display(Name = "Predictor Model Name"), Required] public string PredictorModelName { get; set; } public int? OutputQuality { get; set; }
[Display(Name = "Properties Changed For Distance"), Required] public bool? PropertiesChangedForDistance { get; set; } public string[]? OutputResolutions { get; set; }
[Display(Name = "Properties Changed For Faces"), Required] public bool? PropertiesChangedForFaces { get; set; } public bool? OverrideForFaceImages { get; set; }
[Display(Name = "Properties Changed For Index"), Required] public bool? PropertiesChangedForIndex { get; set; } public bool? OverrideForFaceLandmarkImages { get; set; }
[Display(Name = "Properties Changed For Metadata"), Required] public bool? PropertiesChangedForMetadata { get; set; } public bool? OverrideForResizeImages { get; set; }
[Display(Name = "Properties Changed For Resize"), Required] public bool? PropertiesChangedForResize { get; set; } public int? PersonBirthdayFirstYear { get; set; }
[Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } public string? PersonBirthdayFormat { get; set; }
[Display(Name = "Sorting Days Delta Tolerance"), Required] public int[] RangeDaysDeltaTolerance { get; set; } public string? PersonCharacters { get; set; }
[Display(Name = "Face Area Permille Tolerance"), Required] public float[] RangeFaceAreaTolerance { get; set; } public int? PersonCharactersCopyCount { get; set; }
[Display(Name = "Location Minimum Confidence"), Required] public float[] RangeFaceConfidence { get; set; } public string? PersonKeyFormat { get; set; }
[Display(Name = "Face Distance Tolerance"), Required] public float[] RangeDistanceTolerance { get; set; } public string? PredictorModelName { get; set; }
[Display(Name = "Reverse"), Required] public bool? Reverse { get; set; } public bool? PropertiesChangedForDistance { get; set; }
[Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; } public bool? PropertiesChangedForFaces { get; set; }
[Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; } public bool? PropertiesChangedForIndex { get; set; }
[Display(Name = "Save Resized Images by Person Key Formatted"), Required] public string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions { get; set; } public bool? PropertiesChangedForMetadata { get; set; }
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; } public bool? PropertiesChangedForResize { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; } public int? RadomUseBirthdayMinimum { get; set; }
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } public int[]? RangeDaysDeltaTolerance { get; set; }
[Display(Name = "SortingMaximumPerFaceShould be High"), Required] public int? SortingMaximumPerFaceShouldBeHigh { get; set; } public float[]? RangeDistanceTolerance { get; set; }
[Display(Name = "Sorting Maximum Per Key"), Required] public int? SortingMaximumPerKey { get; set; } public float[]? RangeFaceAreaTolerance { get; set; }
[Display(Name = "Sorting Minimum to use Sigma"), Required] public int? SortingMinimumToUseSigma { get; set; } public float[]? RangeFaceConfidence { get; set; }
[Display(Name = "Test Distance Results"), Required] public bool? TestDistanceResults { get; set; } public float[]? RectangleIntersectMinimums { get; set; }
[Display(Name = "Valid Resolutions"), Required] public string[] ValidResolutions { get; set; } public bool? Reverse { get; set; }
public string[]? SaveBlurHashForOutputResolutions { get; set; }
#nullable restore public string[]? SaveFaceDistancesForOutputResolutions { get; set; }
public string[]? SaveFaceLandmarkForOutputResolutions { get; set; }
public string[]? SaveFilteredOriginalImagesFromJLinksForOutputResolutions { get; set; }
public bool? SaveFullYearOfRandomFiles { get; set; }
public bool? SaveIndividually { get; set; }
public string[]? SaveMappedForOutputResolutions { get; set; }
public string[]? SavePropertyShortcutsForOutputResolutions { get; set; }
public string[]? SaveRandomForOutputResolutions { get; set; }
public bool? SaveResizedSubfiles { get; set; }
public string[]? SaveShortcutsForOutputResolutions { get; set; }
public bool? SaveSortingWithoutPerson { get; set; }
public string[]? SkipNotSkipDirectories { get; set; }
public int? SkipOlderThanDays { get; set; }
public int? SkipPersonWithMoreThen { get; set; }
public bool? SkipSearch { get; set; }
public int? SortingMaximumPerFaceShouldBeHigh { get; set; }
public int? SortingMaximumPerKey { get; set; }
public int? SortingMinimumToUseSigma { get; set; }
public bool? TestDistanceResults { get; set; }
public int? UseFilterTries { get; set; }
public string[]? ValidKeyWordsToIgnoreInRandom { get; set; }
public string[]? ValidResolutions { get; set; }
public override string ToString() public override string ToString()
{ {
@ -78,149 +98,141 @@ public class Configuration
return result; return result;
} }
private static Models.Configuration Get(Configuration? configuration) #pragma warning restore csharp_preserve_single_line_statements
private static Models.Configuration Get(Configuration? configuration, Property.Models.Configuration propertyConfiguration)
{ {
Models.Configuration result; Models.Configuration result;
if (configuration is null) if (configuration is null) throw new NullReferenceException(nameof(configuration));
throw new NullReferenceException(nameof(configuration)); if (configuration.CheckDFaceAndUpWriteDates is null) throw new NullReferenceException(nameof(configuration.CheckDFaceAndUpWriteDates));
if (configuration.CheckDFaceAndUpWriteDates is null) if (configuration?.CheckDFaceAndUpWriteDates is null) throw new NullReferenceException(nameof(configuration.CheckDFaceAndUpWriteDates));
throw new NullReferenceException(nameof(configuration.CheckDFaceAndUpWriteDates)); if (configuration?.CheckJsonForDistanceResults is null) throw new NullReferenceException(nameof(configuration.CheckJsonForDistanceResults));
if (configuration.CheckJsonForDistanceResults is null) // if (configuration?.CopyFacesAndSaveFaceLandmarkForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions));
throw new NullReferenceException(nameof(configuration.CheckJsonForDistanceResults)); if (configuration?.CrossDirectoryMaxItemsInDistanceCollection is null) throw new NullReferenceException(nameof(configuration.CrossDirectoryMaxItemsInDistanceCollection));
if (configuration.CrossDirectoryMaxItemsInDistanceCollection is null) if (configuration?.DeletePossibleDuplicates is null) throw new NullReferenceException(nameof(configuration.DeletePossibleDuplicates));
throw new NullReferenceException(nameof(configuration.CrossDirectoryMaxItemsInDistanceCollection)); if (configuration?.DistanceFactor is null) throw new NullReferenceException(nameof(configuration.DistanceFactor));
if (configuration.DistanceFactor is null) if (configuration?.DistanceMoveUnableToMatch is null) throw new NullReferenceException(nameof(configuration.DistanceMoveUnableToMatch));
throw new NullReferenceException(nameof(configuration.DistanceFactor)); if (configuration?.DistancePixelDistanceTolerance is null) throw new NullReferenceException(nameof(configuration.DistancePixelDistanceTolerance));
if (configuration.DistanceMoveUnableToMatch is null) if (configuration?.DistanceRenameToMatch is null) throw new NullReferenceException(nameof(configuration.DistanceRenameToMatch));
throw new NullReferenceException(nameof(configuration.DistanceMoveUnableToMatch)); if (configuration?.EyeThreshold is null) throw new NullReferenceException(nameof(configuration.EyeThreshold));
if (configuration.DistancePixelDistanceTolerance is null) if (configuration?.FaceAreaPermyriad is null) throw new NullReferenceException(nameof(configuration.FaceAreaPermyriad));
throw new NullReferenceException(nameof(configuration.DistancePixelDistanceTolerance)); if (configuration?.FaceConfidencePercent is null) throw new NullReferenceException(nameof(configuration.FaceConfidencePercent));
if (configuration.DistanceRenameToMatch is null) if (configuration?.FaceDistanceHiddenImageFactor is null) throw new NullReferenceException(nameof(configuration.FaceDistanceHiddenImageFactor));
throw new NullReferenceException(nameof(configuration.DistanceRenameToMatch)); if (configuration?.FaceDistancePermyriad is null) throw new NullReferenceException(nameof(configuration.FaceDistancePermyriad));
if (configuration.FaceDistanceHiddenImageFactor is null) if (configuration?.FocusDirectory is null) throw new NullReferenceException(nameof(configuration.FocusDirectory));
throw new NullReferenceException(nameof(configuration.FaceDistanceHiddenImageFactor)); if (configuration?.FocusModel is null) throw new NullReferenceException(nameof(configuration.FocusModel));
if (configuration.FaceConfidencePercent is null) if (configuration?.ForceFaceLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceFaceLastWriteTimeToCreationTime));
throw new NullReferenceException(nameof(configuration.FaceConfidencePercent)); if (configuration?.ForceMetadataLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime));
if (configuration.FaceDistancePermyriad is null) if (configuration?.ForceResizeLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceResizeLastWriteTimeToCreationTime));
throw new NullReferenceException(nameof(configuration.FaceDistancePermyriad)); if (configuration?.GenealogicalDataCommunicationFile is null) throw new NullReferenceException(nameof(configuration.GenealogicalDataCommunicationFile));
if (configuration.ForceFaceLastWriteTimeToCreationTime is null) // if (configuration?.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions));
throw new NullReferenceException(nameof(configuration.ForceFaceLastWriteTimeToCreationTime)); // if (configuration?.JLinks is null) throw new NullReferenceException(nameof(configuration.JLinks));
if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) // if (configuration?.LoadOrCreateThenSaveDistanceResultsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions));
throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime)); // if (configuration?.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions));
if (configuration.ForceResizeLastWriteTimeToCreationTime is null) if (configuration?.LoadPhotoPrismLocations is null) throw new NullReferenceException(nameof(configuration.LoadPhotoPrismLocations));
throw new NullReferenceException(nameof(configuration.ForceResizeLastWriteTimeToCreationTime)); // if (configuration?.LocationContainerDistanceTolerance is null) throw new NullReferenceException(nameof(configuration.LocationContainerDistanceTolerance));
if (configuration.IgnoreExtensions is null) if (configuration?.LocationDigits is null) throw new NullReferenceException(nameof(configuration.LocationDigits));
throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); if (configuration?.LocationFactor is null) throw new NullReferenceException(nameof(configuration.LocationFactor));
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ??= Array.Empty<string>(); if (configuration?.LookForAbandoned is null) throw new NullReferenceException(nameof(configuration.LookForAbandoned));
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ??= Array.Empty<string>(); if (configuration?.MappingDefaultName is null) throw new NullReferenceException(nameof(configuration.MappingDefaultName));
if (configuration.LocationDigits is null) if (configuration?.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null) throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping));
throw new NullReferenceException(nameof(configuration.LocationDigits)); if (configuration?.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping is null) throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping));
if (configuration.LocationFactor is null) // if (configuration?.MixedYearRelativePaths is null) throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths));
throw new NullReferenceException(nameof(configuration.LocationFactor)); if (configuration?.ModelDirectory is null) throw new NullReferenceException(nameof(configuration.ModelDirectory));
if (configuration.MappingDefaultName is null) if (configuration?.ModelName is null) throw new NullReferenceException(nameof(configuration.ModelName));
throw new NullReferenceException(nameof(configuration.MappingDefaultName)); if (configuration?.OutputExtension is null) throw new NullReferenceException(nameof(configuration.OutputExtension));
if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null) if (configuration?.OutputQuality is null) throw new NullReferenceException(nameof(configuration.OutputQuality));
throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping)); // if (configuration?.OutputResolutions is null) throw new NullReferenceException(nameof(configuration.OutputResolutions));
if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping is null) if (configuration?.OverrideForFaceImages is null) throw new NullReferenceException(nameof(configuration.OverrideForFaceImages));
throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping)); if (configuration?.OverrideForFaceLandmarkImages is null) throw new NullReferenceException(nameof(configuration.OverrideForFaceLandmarkImages));
if (configuration.MixedYearRelativePaths is null) if (configuration?.OverrideForResizeImages is null) throw new NullReferenceException(nameof(configuration.OverrideForResizeImages));
throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths)); if (configuration?.PersonBirthdayFirstYear is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFirstYear));
if (configuration.NumberOfJitters is null) if (configuration?.PersonBirthdayFormat is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat));
throw new NullReferenceException(nameof(configuration.NumberOfJitters)); if (configuration?.PersonCharacters is null) throw new NullReferenceException(nameof(configuration.PersonCharacters));
if (configuration.NumberOfTimesToUpsample is null) if (configuration?.PersonCharactersCopyCount is null) throw new NullReferenceException(nameof(configuration.PersonCharactersCopyCount));
throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample)); if (configuration?.PersonKeyFormat is null) throw new NullReferenceException(nameof(configuration.PersonKeyFormat));
if (configuration.OutputQuality is null) if (configuration?.PredictorModelName is null) throw new NullReferenceException(nameof(configuration.PredictorModelName));
throw new NullReferenceException(nameof(configuration.OutputQuality)); if (configuration?.PropertiesChangedForDistance is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForDistance));
if (configuration.OutputResolutions is null) if (configuration?.PropertiesChangedForFaces is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForFaces));
throw new NullReferenceException(nameof(configuration.OutputResolutions)); if (configuration?.PropertiesChangedForIndex is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForIndex));
if (configuration.OverrideForFaceImages is null) if (configuration?.PropertiesChangedForMetadata is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata));
throw new NullReferenceException(nameof(configuration.OverrideForFaceImages)); if (configuration?.PropertiesChangedForResize is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize));
if (configuration.OverrideForFaceLandmarkImages is null) if (configuration?.RadomUseBirthdayMinimum is null) throw new NullReferenceException(nameof(configuration.RadomUseBirthdayMinimum));
throw new NullReferenceException(nameof(configuration.OverrideForFaceLandmarkImages)); // if (configuration?.RangeDaysDeltaTolerance is null) throw new NullReferenceException(nameof(configuration.RangeDaysDeltaTolerance));
if (configuration.OverrideForResizeImages is null) // if (configuration?.RangeDistanceTolerance is null) throw new NullReferenceException(nameof(configuration.RangeDistanceTolerance));
throw new NullReferenceException(nameof(configuration.OverrideForResizeImages)); // if (configuration?.RangeFaceAreaTolerance is null) throw new NullReferenceException(nameof(configuration.RangeFaceAreaTolerance));
if (configuration.PersonBirthdayFirstYear is null) // if (configuration?.RangeFaceConfidence is null) throw new NullReferenceException(nameof(configuration.RangeFaceConfidence));
throw new NullReferenceException(nameof(configuration.PersonBirthdayFirstYear)); // if (configuration?.RectangleIntersectMinimums is null) throw new NullReferenceException(nameof(configuration.RectangleIntersectMinimums));
if (configuration.PersonBirthdayFormat is null) if (configuration?.Reverse is null) throw new NullReferenceException(nameof(configuration.Reverse));
throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat)); // if (configuration?.SaveBlurHashForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveBlurHashForOutputResolutions));
if (configuration.PersonKeyFormat is null) // if (configuration?.SaveFaceDistancesForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveFaceDistancesForOutputResolutions));
throw new NullReferenceException(nameof(configuration.PersonKeyFormat)); // if (configuration?.SaveFaceLandmarkForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveFaceLandmarkForOutputResolutions));
if (configuration.PropertiesChangedForDistance is null) // if (configuration?.SaveFilteredOriginalImagesFromJLinksForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForDistance)); if (configuration?.SaveFullYearOfRandomFiles is null) throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
if (configuration.PropertiesChangedForFaces is null) if (configuration?.SaveIndividually is null) throw new NullReferenceException(nameof(configuration.SaveIndividually));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForFaces)); // if (configuration?.SaveMappedForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveMappedForOutputResolutions));
if (configuration.PropertiesChangedForIndex is null) // if (configuration?.SavePropertyShortcutsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SavePropertyShortcutsForOutputResolutions));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForIndex)); // if (configuration?.SaveRandomForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveRandomForOutputResolutions));
if (configuration.PropertiesChangedForMetadata is null) if (configuration?.SaveResizedSubfiles is null) throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata)); // if (configuration?.SaveShortcutsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveShortcutsForOutputResolutions));
if (configuration.PropertiesChangedForResize is null) if (configuration?.SaveSortingWithoutPerson is null) throw new NullReferenceException(nameof(configuration.SaveSortingWithoutPerson));
throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize)); // if (configuration?.SkipNotSkipDirectories is null) throw new NullReferenceException(nameof(configuration.SkipNotSkipDirectories));
if (configuration.RangeDaysDeltaTolerance is null || configuration.RangeDaysDeltaTolerance.Length != 3) // if (configuration?.SkipOlderThanDays is null) throw new NullReferenceException(nameof(configuration.SkipOlderThanDays));
throw new NullReferenceException(nameof(configuration.RangeDaysDeltaTolerance)); // if (configuration?.SkipPersonWithMoreThen is null) throw new NullReferenceException(nameof(configuration.SkipPersonWithMoreThen));
if (configuration.RangeFaceAreaTolerance is null || configuration.RangeFaceAreaTolerance.Length != 3) if (configuration?.SkipSearch is null) throw new NullReferenceException(nameof(configuration.SkipSearch));
throw new NullReferenceException(nameof(configuration.RangeFaceAreaTolerance)); if (configuration?.SortingMaximumPerFaceShouldBeHigh is null) throw new NullReferenceException(nameof(configuration.SortingMaximumPerFaceShouldBeHigh));
if (configuration.RangeFaceConfidence is null || configuration.RangeFaceConfidence.Length != 3) if (configuration?.SortingMaximumPerKey is null) throw new NullReferenceException(nameof(configuration.SortingMaximumPerKey));
throw new NullReferenceException(nameof(configuration.RangeFaceConfidence)); if (configuration?.SortingMinimumToUseSigma is null) throw new NullReferenceException(nameof(configuration.SortingMinimumToUseSigma));
if (configuration.RangeDistanceTolerance is null || configuration.RangeDistanceTolerance.Length != 3) if (configuration?.TestDistanceResults is null) throw new NullReferenceException(nameof(configuration.TestDistanceResults));
throw new NullReferenceException(nameof(configuration.RangeDistanceTolerance)); if (configuration?.UseFilterTries is null) throw new NullReferenceException(nameof(configuration.UseFilterTries));
if (configuration.Reverse is null) // if (configuration?.ValidKeyWordsToIgnoreInRandom is null) throw new NullReferenceException(nameof(configuration.ValidKeyWordsToIgnoreInRandom));
throw new NullReferenceException(nameof(configuration.Reverse)); // if (configuration?.ValidResolutions is null) throw new NullReferenceException(nameof(configuration.ValidResolutions));
configuration.SaveFaceLandmarkForOutputResolutions ??= Array.Empty<string>(); result = new(propertyConfiguration,
if (configuration.SaveFullYearOfRandomFiles is null)
throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ??= Array.Empty<string>();
if (configuration.SaveResizedSubfiles is null)
throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
configuration.SaveShortcutsForOutputResolutions ??= Array.Empty<string>();
if (configuration.SkipSearch is null)
throw new NullReferenceException(nameof(configuration.SkipSearch));
if (configuration.SortingMaximumPerFaceShouldBeHigh is null)
throw new NullReferenceException(nameof(configuration.SortingMaximumPerFaceShouldBeHigh));
if (configuration.SortingMaximumPerKey is null)
throw new NullReferenceException(nameof(configuration.SortingMaximumPerKey));
if (configuration.SortingMinimumToUseSigma is null)
throw new NullReferenceException(nameof(configuration.SortingMinimumToUseSigma));
if (configuration.TestDistanceResults is null)
throw new NullReferenceException(nameof(configuration.TestDistanceResults));
if (configuration.ValidResolutions is null)
throw new NullReferenceException(nameof(configuration.ValidResolutions));
_ = DateTime.Now.AddDays(-configuration.RangeDaysDeltaTolerance[1]);
result = new(configuration.PropertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckDFaceAndUpWriteDates.Value,
configuration.CheckJsonForDistanceResults.Value, configuration.CheckJsonForDistanceResults.Value,
configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(),
configuration.CrossDirectoryMaxItemsInDistanceCollection.Value, configuration.CrossDirectoryMaxItemsInDistanceCollection.Value,
configuration.DeletePossibleDuplicates.Value,
configuration.DistanceFactor.Value, configuration.DistanceFactor.Value,
configuration.DistanceMoveUnableToMatch.Value, configuration.DistanceMoveUnableToMatch.Value,
configuration.DistancePixelDistanceTolerance.Value, configuration.DistancePixelDistanceTolerance.Value,
configuration.DistanceRenameToMatch.Value, configuration.DistanceRenameToMatch.Value,
configuration.FaceDistanceHiddenImageFactor.Value, configuration.EyeThreshold.Value,
configuration.FaceAreaPermyriad.Value,
configuration.FaceConfidencePercent.Value, configuration.FaceConfidencePercent.Value,
configuration.FaceDistanceHiddenImageFactor.Value,
configuration.FaceDistancePermyriad.Value, configuration.FaceDistancePermyriad.Value,
configuration.FocusDirectory,
configuration.FocusModel,
configuration.ForceFaceLastWriteTimeToCreationTime.Value, configuration.ForceFaceLastWriteTimeToCreationTime.Value,
configuration.ForceMetadataLastWriteTimeToCreationTime.Value, configuration.ForceMetadataLastWriteTimeToCreationTime.Value,
configuration.ForceResizeLastWriteTimeToCreationTime.Value, configuration.ForceResizeLastWriteTimeToCreationTime.Value,
configuration.IgnoreExtensions, configuration.GenealogicalDataCommunicationFile,
configuration.JLinks, configuration.IgnoreExtensions ?? Array.Empty<string>(),
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, configuration.JLinks ?? Array.Empty<string>(),
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? Array.Empty<string>(),
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? Array.Empty<string>(),
configuration.LoadPhotoPrismLocations.Value,
configuration.LocationContainerDistanceTolerance,
configuration.LocationDigits.Value, configuration.LocationDigits.Value,
configuration.LocationFactor.Value, configuration.LocationFactor.Value,
configuration.LookForAbandoned.Value,
configuration.MappingDefaultName, configuration.MappingDefaultName,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value,
configuration.MixedYearRelativePaths, configuration.MixedYearRelativePaths ?? Array.Empty<string>(),
configuration.ModelDirectory, configuration.ModelDirectory,
configuration.ModelName, configuration.ModelName,
configuration.NumberOfJitters.Value,
configuration.NumberOfTimesToUpsample.Value,
configuration.OutputExtension, configuration.OutputExtension,
configuration.OutputQuality.Value, configuration.OutputQuality.Value,
configuration.OutputResolutions, configuration.OutputResolutions ?? Array.Empty<string>(),
configuration.OverrideForFaceImages.Value, configuration.OverrideForFaceImages.Value,
configuration.OverrideForFaceLandmarkImages.Value, configuration.OverrideForFaceLandmarkImages.Value,
configuration.OverrideForResizeImages.Value, configuration.OverrideForResizeImages.Value,
configuration.PersonBirthdayFirstYear.Value, configuration.PersonBirthdayFirstYear.Value,
configuration.PersonBirthdayFormat, configuration.PersonBirthdayFormat,
configuration.PersonCharacters,
configuration.PersonCharactersCopyCount.Value,
configuration.PersonKeyFormat, configuration.PersonKeyFormat,
configuration.PredictorModelName, configuration.PredictorModelName,
configuration.PropertiesChangedForDistance.Value, configuration.PropertiesChangedForDistance.Value,
@ -228,22 +240,36 @@ public class Configuration
configuration.PropertiesChangedForIndex.Value, configuration.PropertiesChangedForIndex.Value,
configuration.PropertiesChangedForMetadata.Value, configuration.PropertiesChangedForMetadata.Value,
configuration.PropertiesChangedForResize.Value, configuration.PropertiesChangedForResize.Value,
configuration.RangeDaysDeltaTolerance, configuration.RadomUseBirthdayMinimum.Value,
configuration.RangeFaceAreaTolerance, configuration.RangeDaysDeltaTolerance ?? Array.Empty<int>(),
configuration.RangeFaceConfidence, configuration.RangeDistanceTolerance ?? Array.Empty<float>(),
configuration.RangeDistanceTolerance, configuration.RangeFaceAreaTolerance ?? Array.Empty<float>(),
configuration.RangeFaceConfidence ?? Array.Empty<float>(),
configuration.RectangleIntersectMinimums ?? Array.Empty<float>(),
configuration.Reverse.Value, configuration.Reverse.Value,
configuration.SaveFaceLandmarkForOutputResolutions, configuration.SaveBlurHashForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveFaceDistancesForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveIndividually.Value,
configuration.SaveFullYearOfRandomFiles.Value, configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions, configuration.SaveMappedForOutputResolutions ?? Array.Empty<string>(),
configuration.SavePropertyShortcutsForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveRandomForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveResizedSubfiles.Value, configuration.SaveResizedSubfiles.Value,
configuration.SaveShortcutsForOutputResolutions, configuration.SaveShortcutsForOutputResolutions ?? Array.Empty<string>(),
configuration.SaveSortingWithoutPerson.Value,
configuration.SkipNotSkipDirectories ?? Array.Empty<string>(),
configuration.SkipOlderThanDays,
configuration.SkipPersonWithMoreThen,
configuration.SkipSearch.Value, configuration.SkipSearch.Value,
configuration.SortingMaximumPerFaceShouldBeHigh.Value, configuration.SortingMaximumPerFaceShouldBeHigh.Value,
configuration.SortingMaximumPerKey.Value, configuration.SortingMaximumPerKey.Value,
configuration.SortingMinimumToUseSigma.Value, configuration.SortingMinimumToUseSigma.Value,
configuration.TestDistanceResults.Value, configuration.TestDistanceResults.Value,
configuration.ValidResolutions); configuration.UseFilterTries.Value,
configuration.ValidKeyWordsToIgnoreInRandom ?? Array.Empty<string>(),
configuration.ValidResolutions ?? Array.Empty<string>());
return result; return result;
} }
@ -260,8 +286,7 @@ public class Configuration
IConfigurationSection configurationSection = configurationRoot.GetSection(section); IConfigurationSection configurationSection = configurationRoot.GetSection(section);
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration, propertyConfiguration);
result.SetAndUpdate(propertyConfiguration, configuration?.NumberOfJitters, configuration?.NumberOfTimesToUpsample, configuration?.ModelName, configuration?.PredictorModelName);
return result; return result;
} }

View File

@ -1,205 +1,85 @@
using System.Text.Json;
using System.Text.Json.Serialization;
namespace View_by_Distance.Tests.Models; namespace View_by_Distance.Tests.Models;
public class Configuration public record Configuration(Property.Models.Configuration PropertyConfiguration,
{ bool CheckDFaceAndUpWriteDates,
bool CheckJsonForDistanceResults,
protected Property.Models.Configuration _PropertyConfiguration; string[] CopyFacesAndSaveFaceLandmarkForOutputResolutions,
public Property.Models.Configuration PropertyConfiguration => _PropertyConfiguration; int CrossDirectoryMaxItemsInDistanceCollection,
bool DeletePossibleDuplicates,
public bool CheckDFaceAndUpWriteDates { init; get; } int DistanceFactor,
public bool CheckJsonForDistanceResults { init; get; } bool DistanceMoveUnableToMatch,
public int CrossDirectoryMaxItemsInDistanceCollection { init; get; } int DistancePixelDistanceTolerance,
public int DistanceFactor { init; get; } bool DistanceRenameToMatch,
public bool DistanceMoveUnableToMatch { init; get; } int EyeThreshold,
public int DistancePixelDistanceTolerance { init; get; } int FaceAreaPermyriad,
public bool DistanceRenameToMatch { init; get; } int FaceConfidencePercent,
public int FaceDistanceHiddenImageFactor { init; get; } int FaceDistanceHiddenImageFactor,
public int FaceConfidencePercent { init; get; } int FaceDistancePermyriad,
public int FaceDistancePermyriad { init; get; } string FocusDirectory,
public bool ForceFaceLastWriteTimeToCreationTime { init; get; } string FocusModel,
public bool ForceMetadataLastWriteTimeToCreationTime { init; get; } bool ForceFaceLastWriteTimeToCreationTime,
public bool ForceResizeLastWriteTimeToCreationTime { init; get; } bool ForceMetadataLastWriteTimeToCreationTime,
public string[] IgnoreExtensions { init; get; } bool ForceResizeLastWriteTimeToCreationTime,
public string[] JLinks { init; get; } string GenealogicalDataCommunicationFile,
public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } string[] IgnoreExtensions,
public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } string[] JLinks,
public int LocationDigits { init; get; } string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions,
public int LocationFactor { init; get; } string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions,
public string MappingDefaultName { init; get; } bool LoadPhotoPrismLocations,
public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { init; get; } float? LocationContainerDistanceTolerance,
public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { init; get; } int LocationDigits,
public string[] MixedYearRelativePaths { init; get; } int LocationFactor,
public string ModelDirectory { init; get; } bool LookForAbandoned,
public string ModelName { init; get; } string MappingDefaultName,
public int NumberOfJitters { init; get; } bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping,
public int NumberOfTimesToUpsample { init; get; } bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping,
public string OutputExtension { init; get; } string[] MixedYearRelativePaths,
public int OutputQuality { init; get; } string ModelDirectory,
public string[] OutputResolutions { init; get; } string ModelName,
public bool OverrideForFaceImages { init; get; } string OutputExtension,
public bool OverrideForFaceLandmarkImages { init; get; } int OutputQuality,
public bool OverrideForResizeImages { init; get; } string[] OutputResolutions,
public int PersonBirthdayFirstYear { init; get; } bool OverrideForFaceImages,
public string PersonBirthdayFormat { init; get; } bool OverrideForFaceLandmarkImages,
public string PersonKeyFormat { init; get; } bool OverrideForResizeImages,
public string PredictorModelName { init; get; } int PersonBirthdayFirstYear,
public bool PropertiesChangedForDistance { init; get; } string PersonBirthdayFormat,
public bool PropertiesChangedForFaces { init; get; } string PersonCharacters,
public bool PropertiesChangedForIndex { init; get; } int PersonCharactersCopyCount,
public bool PropertiesChangedForMetadata { init; get; } string PersonKeyFormat,
public bool PropertiesChangedForResize { init; get; } string PredictorModelName,
public int[] RangeDaysDeltaTolerance { init; get; } bool PropertiesChangedForDistance,
public float[] RangeFaceAreaTolerance { init; get; } bool PropertiesChangedForFaces,
public float[] RangeFaceConfidence { init; get; } bool PropertiesChangedForIndex,
public float[] RangeDistanceTolerance { init; get; } bool PropertiesChangedForMetadata,
public bool Reverse { init; get; } bool PropertiesChangedForResize,
public string[] SaveFaceLandmarkForOutputResolutions { init; get; } int RadomUseBirthdayMinimum,
public bool SaveFullYearOfRandomFiles { init; get; } int[] RangeDaysDeltaTolerance,
public string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions { init; get; } float[] RangeDistanceTolerance,
public bool SaveResizedSubfiles { init; get; } float[] RangeFaceAreaPermyriadTolerance,
public string[] SaveShortcutsForOutputResolutions { init; get; } float[] RangeFaceConfidence,
public bool SkipSearch { init; get; } float[] RectangleIntersectMinimums,
public int SortingMaximumPerFaceShouldBeHigh { init; get; } bool Reverse,
public int SortingMaximumPerKey { init; get; } string[] SaveBlurHashForOutputResolutions,
public int SortingMinimumToUseSigma { init; get; } string[] SaveFaceDistancesForOutputResolutions,
public bool TestDistanceResults { init; get; } string[] SaveFaceLandmarkForOutputResolutions,
public string[] ValidResolutions { init; get; } string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions,
bool SaveIndividually,
[JsonConstructor] bool SaveFullYearOfRandomFiles,
public Configuration(Property.Models.Configuration propertyConfiguration, string[] SaveMappedForOutputResolutions,
bool checkDFaceAndUpWriteDates, string[] SavePropertyShortcutsForOutputResolutions,
bool checkJsonForDistanceResults, string[] SaveRandomForOutputResolutions,
int crossDirectoryMaxItemsInDistanceCollection, bool SaveResizedSubfiles,
int distanceFactor, string[] SaveShortcutsForOutputResolutions,
bool distanceMoveUnableToMatch, bool SaveSortingWithoutPerson,
int distancePixelDistanceTolerance, string[] SkipNotSkipDirectories,
bool distanceRenameToMatch, int? SkipOlderThanDays,
int faceDistanceHiddenImageFactor, int? SkipPersonWithMoreThen,
int faceConfidencePercent, bool SkipSearch,
int faceDistancePermyriad, int SortingMaximumPerFaceShouldBeHigh,
bool forceFaceLastWriteTimeToCreationTime, int SortingMaximumPerKey,
bool forceMetadataLastWriteTimeToCreationTime, int SortingMinimumToUseSigma,
bool forceResizeLastWriteTimeToCreationTime, bool TestDistanceResults,
string[] ignoreExtensions, int UseFilterTries,
string[] jLinks, string[] ValidKeyWordsToIgnoreInRandom,
string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions, string[] ValidResolutions);
string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions,
int locationDigits,
int locationFactor,
string mappingDefaultName,
bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping,
bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping,
string[] mixedYearRelativePaths,
string modelDirectory,
string modelName,
int numberOfJitters,
int numberOfTimesToUpsample,
string outputExtension,
int outputQuality,
string[] outputResolutions,
bool overrideForFaceImages,
bool overrideForFaceLandmarkImages,
bool overrideForResizeImages,
int personBirthdayFirstYear,
string personBirthdayFormat,
string personKeyFormat,
string predictorModelName,
bool propertiesChangedForDistance,
bool propertiesChangedForFaces,
bool propertiesChangedForIndex,
bool propertiesChangedForMetadata,
bool propertiesChangedForResize,
int[] rangeDaysDeltaTolerance,
float[] rangeFaceAreaPermyriadTolerance,
float[] rangeFaceConfidence,
float[] rangeDistanceTolerance,
bool reverse,
string[] saveFaceLandmarkForOutputResolutions,
bool saveFullYearOfRandomFiles,
string[] saveFilteredOriginalImagesFromJLinksForOutputResolutions,
bool saveResizedSubfiles,
string[] saveShortcutsForOutputResolutions,
bool skipSearch,
int sortingMaximumPerFaceShouldBeHigh,
int sortingMaximumPerKey,
int sortingSigma,
bool testDistanceResults,
string[] validResolutions)
{
_PropertyConfiguration = propertyConfiguration;
CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates;
CheckJsonForDistanceResults = checkJsonForDistanceResults;
CrossDirectoryMaxItemsInDistanceCollection = crossDirectoryMaxItemsInDistanceCollection;
DistanceFactor = distanceFactor;
DistanceMoveUnableToMatch = distanceMoveUnableToMatch;
DistancePixelDistanceTolerance = distancePixelDistanceTolerance;
DistanceRenameToMatch = distanceRenameToMatch;
FaceDistanceHiddenImageFactor = faceDistanceHiddenImageFactor;
FaceConfidencePercent = faceConfidencePercent;
FaceDistancePermyriad = faceDistancePermyriad;
ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime;
ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime;
ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime;
IgnoreExtensions = ignoreExtensions;
JLinks = jLinks;
LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions;
LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions;
LocationDigits = locationDigits;
LocationFactor = locationFactor;
MappingDefaultName = mappingDefaultName;
MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping;
MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping;
MixedYearRelativePaths = mixedYearRelativePaths;
ModelDirectory = modelDirectory;
ModelName = modelName;
NumberOfJitters = numberOfJitters;
NumberOfTimesToUpsample = numberOfTimesToUpsample;
OutputExtension = outputExtension;
OutputQuality = outputQuality;
OutputResolutions = outputResolutions;
OverrideForFaceImages = overrideForFaceImages;
OverrideForFaceLandmarkImages = overrideForFaceLandmarkImages;
OverrideForResizeImages = overrideForResizeImages;
PersonBirthdayFirstYear = personBirthdayFirstYear;
PersonBirthdayFormat = personBirthdayFormat;
PersonKeyFormat = personKeyFormat;
PredictorModelName = predictorModelName;
PropertiesChangedForDistance = propertiesChangedForDistance;
PropertiesChangedForFaces = propertiesChangedForFaces;
PropertiesChangedForIndex = propertiesChangedForIndex;
PropertiesChangedForMetadata = propertiesChangedForMetadata;
PropertiesChangedForResize = propertiesChangedForResize;
RangeDaysDeltaTolerance = rangeDaysDeltaTolerance;
RangeFaceAreaTolerance = rangeFaceAreaPermyriadTolerance;
RangeFaceConfidence = rangeFaceConfidence;
RangeDistanceTolerance = rangeDistanceTolerance;
Reverse = reverse;
SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions;
SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles;
SaveFilteredOriginalImagesFromJLinksForOutputResolutions = saveFilteredOriginalImagesFromJLinksForOutputResolutions;
SaveResizedSubfiles = saveResizedSubfiles;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SkipSearch = skipSearch;
SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh;
SortingMaximumPerKey = sortingMaximumPerKey;
SortingMinimumToUseSigma = sortingSigma;
TestDistanceResults = testDistanceResults;
ValidResolutions = validResolutions;
}
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
return result;
}
public void SetAndUpdate(Property.Models.Configuration configuration, int? numberOfJitters, int? numberOfTimesToUpsample, string? modelName, string? predictorModelName)
{
_PropertyConfiguration = configuration;
_PropertyConfiguration.Update(numberOfJitters, numberOfTimesToUpsample, modelName, predictorModelName);
}
}

View File

@ -99,8 +99,8 @@ public class UnitTestFace
{ {
A_Property result; A_Property result;
if (_Configuration?.PropertyConfiguration is null) if (_Configuration?.PropertyConfiguration is null)
throw new NullReferenceException(nameof(_Configuration.PropertyConfiguration)); throw new NullReferenceException(nameof(_PropertyConfiguration));
result = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Configuration.OutputExtension, reverse, aResultsFullGroupDirectory); result = new(_AppSettings.MaxDegreeOfParallelism, _PropertyConfiguration, _Configuration.OutputExtension, reverse, aResultsFullGroupDirectory);
return result; return result;
} }
@ -170,14 +170,14 @@ public class UnitTestFace
private (string, string) GetResultsFullGroupDirectories() private (string, string) GetResultsFullGroupDirectories()
{ {
string aResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory( string aResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory(
_Configuration.PropertyConfiguration, _PropertyConfiguration,
nameof(A_Property), nameof(A_Property),
string.Empty, string.Empty,
includeResizeGroup: false, includeResizeGroup: false,
includeModel: false, includeModel: false,
includePredictorModel: false); includePredictorModel: false);
string bResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory( string bResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory(
_Configuration.PropertyConfiguration, _PropertyConfiguration,
nameof(B_Metadata), nameof(B_Metadata),
string.Empty, string.Empty,
includeResizeGroup: false, includeResizeGroup: false,
@ -189,7 +189,7 @@ public class UnitTestFace
private (string, string, string) GetResultsFullGroupDirectories(string outputResolution) private (string, string, string) GetResultsFullGroupDirectories(string outputResolution)
{ {
string cResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory( string cResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory(
_Configuration.PropertyConfiguration, _PropertyConfiguration,
nameof(C_Resize), nameof(C_Resize),
outputResolution, outputResolution,
includeResizeGroup: true, includeResizeGroup: true,
@ -203,6 +203,10 @@ public class UnitTestFace
[TestMethod] [TestMethod]
public void TestMethodFace() public void TestMethodFace()
{ {
if (_PropertyConfiguration.NumberOfJitters is null)
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfJitters));
if (_PropertyConfiguration.NumberOfTimesToUpsample is null)
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfTimesToUpsample));
string sourceFileName = "100000507001158650387.jpg"; string sourceFileName = "100000507001158650387.jpg";
string sourceDirectoryName = "Facebook/2023.2 Summer Facebook"; string sourceDirectoryName = "Facebook/2023.2 Summer Facebook";
Item item; Item item;
@ -219,16 +223,16 @@ public class UnitTestFace
bool outputResolutionHasNumber = outputResolution.Any(l => char.IsNumber(l)); bool outputResolutionHasNumber = outputResolution.Any(l => char.IsNumber(l));
(string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution); (string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution);
(string aResultsFullGroupDirectory, string bResultsFullGroupDirectory) = GetResultsFullGroupDirectories(); (string aResultsFullGroupDirectory, string bResultsFullGroupDirectory) = GetResultsFullGroupDirectories();
Shared.Models.Methods.IBlurHasher blurHasher = new BlurHash.Models.C2_BlurHasher(_Configuration.PropertyConfiguration); Shared.Models.Methods.IBlurHasher blurHasher = new BlurHash.Models.C2_BlurHasher(_PropertyConfiguration);
_Logger.Information(_Configuration.ModelDirectory); _Logger.Information(_Configuration.ModelDirectory);
A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory); A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory);
string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}"); string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}");
if (!Directory.Exists(aPropertySingletonDirectory)) if (!Directory.Exists(aPropertySingletonDirectory))
_ = Directory.CreateDirectory(aPropertySingletonDirectory); _ = Directory.CreateDirectory(aPropertySingletonDirectory);
(ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetTuple(_Configuration.OutputExtension, _Configuration.OutputQuality); (ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetTuple(_Configuration.OutputExtension, _Configuration.OutputQuality);
B_Metadata metadata = new(_Configuration.PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory); B_Metadata metadata = new(_PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory);
_ = metadata.ToString(); _ = metadata.ToString();
C_Resize resize = new(_Configuration.PropertyConfiguration, _Configuration.ForceResizeLastWriteTimeToCreationTime, _Configuration.OverrideForResizeImages, _Configuration.PropertiesChangedForResize, _Configuration.ValidResolutions, imageCodecInfo, encoderParameters, filenameExtension); C_Resize resize = new(_PropertyConfiguration, _Configuration.ForceResizeLastWriteTimeToCreationTime, _Configuration.OverrideForResizeImages, _Configuration.PropertiesChangedForResize, _Configuration.ValidResolutions, imageCodecInfo, encoderParameters, filenameExtension);
_ = resize.ToString(); _ = resize.ToString();
bool isUniqueFileName = false; bool isUniqueFileName = false;
bool? isNotUniqueAndNeedsReview = null; bool? isNotUniqueAndNeedsReview = null;
@ -257,15 +261,15 @@ public class UnitTestFace
item.SetResizedFileHolder(resize.FileNameExtension, resizedFileHolder); item.SetResizedFileHolder(resize.FileNameExtension, resizedFileHolder);
MappingFromItem mappingFromItem = IMappingFromItem.GetMappingFromItem(item); MappingFromItem mappingFromItem = IMappingFromItem.GetMappingFromItem(item);
(int _, metadataCollection) = metadata.GetMetadataCollection(subFileTuples, parseExceptions, changesFrom, mappingFromItem); (int _, metadataCollection) = metadata.GetMetadataCollection(subFileTuples, parseExceptions, changesFrom, mappingFromItem);
Dictionary<string, int[]> outputResolutionToResize = resize.GetResizeKeyValuePairs(_Configuration.PropertyConfiguration, cResultsFullGroupDirectory, subFileTuples, parseExceptions, metadataCollection, item.Property, mappingFromItem); Dictionary<string, int[]> outputResolutionToResize = resize.GetResizeKeyValuePairs(_PropertyConfiguration, cResultsFullGroupDirectory, subFileTuples, parseExceptions, metadataCollection, item.Property, mappingFromItem);
Assert.IsNotNull(mappingFromItem.ResizedFileHolder); Assert.IsNotNull(mappingFromItem.ResizedFileHolder);
resize.SaveResizedSubfile(_Configuration.PropertyConfiguration, outputResolution, cResultsFullGroupDirectory, subFileTuples, item, item.Property, mappingFromItem, outputResolutionToResize); resize.SaveResizedSubfile(_PropertyConfiguration, outputResolution, cResultsFullGroupDirectory, subFileTuples, item, item.Property, mappingFromItem, outputResolutionToResize);
string blurHash = blurHasher.Encode(resizedFileHolder); string blurHash = blurHasher.Encode(resizedFileHolder);
Assert.IsNotNull(blurHash); Assert.IsNotNull(blurHash);
Image image = FaceRecognition.LoadImageFile(mappingFromItem.ResizedFileHolder.FullName); Image image = FaceRecognition.LoadImageFile(mappingFromItem.ResizedFileHolder.FullName);
Assert.IsNotNull(image); Assert.IsNotNull(image);
(Model model, PredictorModel predictorModel, ModelParameter modelParameter) = GetModel(_Configuration); (Model model, PredictorModel predictorModel, ModelParameter modelParameter) = GetModel(_Configuration);
FaceRecognition faceRecognition = new(_Configuration.NumberOfJitters, _Configuration.NumberOfTimesToUpsample, model, modelParameter, predictorModel); FaceRecognition faceRecognition = new(_PropertyConfiguration.NumberOfJitters.Value, _PropertyConfiguration.NumberOfTimesToUpsample.Value, model, modelParameter, predictorModel);
List<(Location Location, FaceRecognitionDotNet.FaceEncoding? FaceEncoding, Dictionary<FacePart, FacePoint[]>? FaceParts)> collection; List<(Location Location, FaceRecognitionDotNet.FaceEncoding? FaceEncoding, Dictionary<FacePart, FacePoint[]>? FaceParts)> collection;
collection = faceRecognition.GetCollection(image, locations: new(), includeFaceEncoding: true, includeFaceParts: true); collection = faceRecognition.GetCollection(image, locations: new(), includeFaceEncoding: true, includeFaceParts: true);
Assert.IsTrue(collection.Count == 2); Assert.IsTrue(collection.Count == 2);