diff --git a/Drag-Drop-Search/Drag-Drop-Search.csproj b/Drag-Drop-Search/Drag-Drop-Search.csproj
index b7c7324..e7e3636 100644
--- a/Drag-Drop-Search/Drag-Drop-Search.csproj
+++ b/Drag-Drop-Search/Drag-Drop-Search.csproj
@@ -1,4 +1,4 @@
-
+
enable
10.0
@@ -7,6 +7,7 @@
win-x64
net7.0-windows
true
+ 7b153e3d-672b-4f7a-888a-cb31645a2439
true
@@ -42,15 +43,4 @@
-
-
- Always
-
-
- Always
-
-
- Always
-
-
\ No newline at end of file
diff --git a/Drag-Drop-Search/DragDropSearch.cs b/Drag-Drop-Search/DragDropSearch.cs
index 9f0d7b1..7a1ad0e 100644
--- a/Drag-Drop-Search/DragDropSearch.cs
+++ b/Drag-Drop-Search/DragDropSearch.cs
@@ -43,7 +43,6 @@ public partial class DragDropSearch : Form
isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero);
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables()
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true)
.AddUserSecrets();
configurationRoot = configurationBuilder.Build();
diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs
index 95bef66..41643cd 100644
--- a/Instance/DlibDotNet.cs
+++ b/Instance/DlibDotNet.cs
@@ -295,13 +295,15 @@ public partial class DlibDotNet
return result;
}
- private void SetMapping(MapLogic mapLogic, Item item, bool? isFocusRelativePath, bool? isIgnoreRelativePath, ReadOnlyCollection> locationContainers, MappingFromItem mappingFromItem, List? mappingFromPhotoPrismCollection, List faces)
+ private int GetNotMappedCountAndSetMapping(MapLogic mapLogic, Item item, bool? isFocusRelativePath, bool? isIgnoreRelativePath, ReadOnlyCollection> locationContainers, MappingFromItem mappingFromItem, List? mappingFromPhotoPrismCollection, List faces)
{
+ int result;
double? α;
int? eyeα;
bool? isUsed;
bool? eyeReview;
Mapping mapping;
+ int notMapped = 0;
bool? isFocusPerson;
int confidencePercent;
int faceAreaPermyriad;
@@ -312,9 +314,11 @@ public partial class DlibDotNet
MappingFromLocation? mappingFromLocation;
bool? isFocusModel = GetIsFocusModel(item.Property);
bool ignoreXMatches = _JLinkResolvedDirectories.Count > 0;
+ ReadOnlyDictionary>? wholePercentagesToPersonContainers;
ReadOnlyCollection locationContainersFiles = new((from l in locationContainers select l.File).ToArray());
foreach (Shared.Models.Face face in faces)
{
+ wholePercentagesToPersonContainers = mapLogic.GetWholePercentagesToPersonContainers(item.Property?.Id);
if (item.Property?.Id is null || face.FaceEncoding is null || face.Location is null || face.OutputResolution is null)
{
isUsed = null;
@@ -337,22 +341,25 @@ public partial class DlibDotNet
wholePercentRectangle = Shared.Models.Stateless.Methods.ILocation.GetWholePercentages(face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
deterministicHashCodeKey = IMapping.GetDeterministicHashCodeKey(item.Property.Id.Value, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
mappingFromLocation = new(faceAreaPermyriad, confidencePercent, deterministicHashCodeKey, eyeα, eyeReview, wholePercentRectangle);
- isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, mappingFromLocation);
+ isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, wholePercentagesToPersonContainers, mappingFromLocation);
inSkipCollection = mapLogic.InSkipCollection(item.Property.Id.Value, mappingFromLocation);
- isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, item.Property.Id.Value, mappingFromLocation);
+ isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, wholePercentagesToPersonContainers, mappingFromLocation);
mappingFromFilter = new(isFocusModel, isFocusPerson, isFocusRelativePath, isIgnoreRelativePath, inSkipCollection, isUsed);
}
mapping = new(mappingFromItem, mappingFromFilter, mappingFromLocation, mappingFromPhotoPrismCollection);
- _ = mapLogic.UpdateMappingFromPerson(locationContainersFiles, mapping);
+ notMapped += mapLogic.UpdateMappingFromPerson(locationContainersFiles, wholePercentagesToPersonContainers, mapping);
face.SetMapping(mapping);
}
+ result = notMapped;
+ return result;
}
- private Mapping GetMapping(MapLogic mapLogic, Item item, bool? isFocusRelativePath, bool? isIgnoreRelativePath, MappingFromItem mappingFromItem)
+ private (Mapping, int) GetMapping(MapLogic mapLogic, ReadOnlyCollection? locationContainersFiles, Item item, bool? isFocusRelativePath, bool? isIgnoreRelativePath, MappingFromItem mappingFromItem)
{
Mapping result;
bool? isUsed;
int? eyeα = null;
+ int notMapped = 0;
bool? isFocusPerson;
bool? eyeReview = null;
bool? inSkipCollection;
@@ -364,6 +371,7 @@ public partial class DlibDotNet
MappingFromLocation? mappingFromLocation;
bool? isFocusModel = GetIsFocusModel(item.Property);
bool ignoreXMatches = _JLinkResolvedDirectories.Count > 0;
+ ReadOnlyDictionary>? wholePercentagesToPersonContainers = mapLogic.GetWholePercentagesToPersonContainers(item.Property?.Id);
if (item.Property?.Id is null)
{
isUsed = null;
@@ -377,13 +385,14 @@ public partial class DlibDotNet
wholePercentRectangle = Shared.Models.Stateless.Methods.ILocation.GetWholePercentages(Shared.Models.Stateless.ILocation.Digits);
deterministicHashCodeKey = IMapping.GetDeterministicHashCodeKey(item.Property.Id.Value, Shared.Models.Stateless.ILocation.Digits);
mappingFromLocation = new(faceAreaPermyriad, confidencePercent, deterministicHashCodeKey, eyeα, eyeReview, wholePercentRectangle);
- isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, mappingFromLocation);
+ isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, wholePercentagesToPersonContainers, mappingFromLocation);
inSkipCollection = mapLogic.InSkipCollection(item.Property.Id.Value, mappingFromLocation);
- isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, item.Property.Id.Value, mappingFromLocation);
+ isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, wholePercentagesToPersonContainers, mappingFromLocation);
mappingFromFilter = new(isFocusModel, isFocusPerson, isFocusRelativePath, isIgnoreRelativePath, inSkipCollection, isUsed);
}
result = new(mappingFromItem, mappingFromFilter, mappingFromLocation, mappingFromPhotoPrismCollection: null);
- return result;
+ notMapped += mapLogic.UpdateMappingFromPerson(locationContainersFiles, wholePercentagesToPersonContainers, result);
+ return (result, notMapped);
}
private void LogItemPropertyIsNull(Item item)
@@ -408,24 +417,25 @@ public partial class DlibDotNet
File.Move(item.ImageFileHolder.FullName, $"{item.ImageFileHolder.FullName}.rename");
}
- private void FullParallelForWork(A_Property propertyLogic,
- B_Metadata metadata,
- MapLogic mapLogic,
- string outputResolution,
- bool outputResolutionHasNumber,
- string cResultsFullGroupDirectory,
- string dResultsFullGroupDirectory,
- string d2ResultsFullGroupDirectory,
- List> sourceDirectoryChanges,
- Dictionary> fileNameToCollection,
- Container container,
- int index,
- Item item,
- DateTime[] containerDateTimes,
- bool? isFocusRelativePath,
- bool? isIgnoreRelativePath,
- string facePartsCollectionDirectory)
+ private int FullParallelForWork(A_Property propertyLogic,
+ B_Metadata metadata,
+ MapLogic mapLogic,
+ string outputResolution,
+ bool outputResolutionHasNumber,
+ string cResultsFullGroupDirectory,
+ string dResultsFullGroupDirectory,
+ string d2ResultsFullGroupDirectory,
+ List> sourceDirectoryChanges,
+ Dictionary> fileNameToCollection,
+ Container container,
+ int index,
+ Item item,
+ DateTime[] containerDateTimes,
+ bool? isFocusRelativePath,
+ bool? isIgnoreRelativePath,
+ string facePartsCollectionDirectory)
{
+ int result = 0;
List faces;
long ticks = DateTime.Now.Ticks;
DateTime dateTime = DateTime.Now;
@@ -502,7 +512,7 @@ public partial class DlibDotNet
faces = _Faces.GetFaces(outputResolution, dResultsFullGroupDirectory, subFileTuples, parseExceptions, property, mappingFromItem, outputResolutionToResize, locationContainers, mappingFromPhotoPrismCollection);
if (_AppSettings.MaxDegreeOfParallelism < 2)
ticks = LogDelta(ticks, nameof(D_Face.GetFaces));
- SetMapping(mapLogic, item, isFocusRelativePath, isIgnoreRelativePath, locationContainers, mappingFromItem, mappingFromPhotoPrismCollection, faces);
+ result = GetNotMappedCountAndSetMapping(mapLogic, item, isFocusRelativePath, isIgnoreRelativePath, locationContainers, mappingFromItem, mappingFromPhotoPrismCollection, faces);
List<(Shared.Models.Face, FileInfo?, string, bool Saved)> faceCollection = _Faces.SaveFaces(_FaceParts.FileNameExtension, dResultsFullGroupDirectory, subFileTuples, parseExceptions, mappingFromItem, faces);
if (_Configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions.Contains(outputResolution))
_FaceParts.CopyFacesAndSaveFaceLandmarkImage(facePartsCollectionDirectory, mappingFromItem, faceCollection);
@@ -527,26 +537,29 @@ public partial class DlibDotNet
item.Faces.AddRange(faces);
sourceDirectoryChanges.AddRange(from l in subFileTuples where l.Item2 > dateTime select l);
}
+ return result;
}
- private int FullParallelWork(int maxDegreeOfParallelism,
- A_Property propertyLogic,
- B_Metadata metadata,
- MapLogic mapLogic,
- string outputResolution,
- bool outputResolutionHasNumber,
- string cResultsFullGroupDirectory,
- string dResultsFullGroupDirectory,
- string d2ResultsFullGroupDirectory,
- List> sourceDirectoryChanges,
- Dictionary> fileNameToCollection,
- Container container,
- Item[] filteredItems,
- string message)
+ private (int, bool) FullParallelWork(int maxDegreeOfParallelism,
+ A_Property propertyLogic,
+ B_Metadata metadata,
+ MapLogic mapLogic,
+ string outputResolution,
+ bool outputResolutionHasNumber,
+ string cResultsFullGroupDirectory,
+ string dResultsFullGroupDirectory,
+ string d2ResultsFullGroupDirectory,
+ List> sourceDirectoryChanges,
+ Dictionary> fileNameToCollection,
+ Container container,
+ Item[] filteredItems,
+ string message)
{
if (_Log is null)
throw new NullReferenceException(nameof(_Log));
- int result = 0;
+ int notMapped = 0;
+ int exceptionsCount = 0;
+ bool exceptions = false;
bool ignoreXMatches = _JLinkResolvedDirectories.Count > 0;
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism };
DateTime[] containerDateTimes = Shared.Models.Stateless.Methods.IContainer.GetContainerDateTimes(filteredItems);
@@ -560,35 +573,37 @@ public partial class DlibDotNet
{
try
{
- FullParallelForWork(propertyLogic,
- metadata,
- mapLogic,
- outputResolution,
- outputResolutionHasNumber,
- cResultsFullGroupDirectory,
- dResultsFullGroupDirectory,
- d2ResultsFullGroupDirectory,
- sourceDirectoryChanges,
- fileNameToCollection,
- container,
- index: i,
- filteredItems[i],
- containerDateTimes,
- isFocusRelativePath,
- isIgnoreRelativePath,
- facePartsCollectionDirectory);
+ notMapped = FullParallelForWork(propertyLogic,
+ metadata,
+ mapLogic,
+ outputResolution,
+ outputResolutionHasNumber,
+ cResultsFullGroupDirectory,
+ dResultsFullGroupDirectory,
+ d2ResultsFullGroupDirectory,
+ sourceDirectoryChanges,
+ fileNameToCollection,
+ container,
+ index: i,
+ filteredItems[i],
+ containerDateTimes,
+ isFocusRelativePath,
+ isIgnoreRelativePath,
+ facePartsCollectionDirectory);
if (i == 0 || sourceDirectoryChanges.Count > 0)
progressBar.Tick();
}
catch (Exception ex)
{
- result += 1;
+ if (!exceptions)
+ exceptions = true;
+ exceptionsCount++;
_Log.Error(string.Concat(container.SourceDirectory, Environment.NewLine, ex.Message, Environment.NewLine, ex.StackTrace), ex);
- if (result == filteredItems.Length)
+ if (exceptionsCount == filteredItems.Length)
throw new Exception(string.Concat("All in [", container.SourceDirectory, "] failed!"));
}
});
- return result;
+ return (notMapped, exceptions);
}
private static void WriteTab(string checkDirectory, List<(string Id, string Line)> metadataIdLines, string fileName)
@@ -678,14 +693,16 @@ public partial class DlibDotNet
return new(cResultsFullGroupDirectory, c2ResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory);
}
- private void FullDoWork(string argZero, string propertyRoot, long ticks, string aResultsFullGroupDirectory, string bResultsFullGroupDirectory, int t, Container[] containers, A_Property propertyLogic, B_Metadata metadata, Dictionary> fileNameToCollection, MapLogic mapLogic)
+ private int FullDoWork(string argZero, string propertyRoot, long ticks, string aResultsFullGroupDirectory, string bResultsFullGroupDirectory, int t, Container[] containers, A_Property propertyLogic, B_Metadata metadata, Dictionary> fileNameToCollection, MapLogic mapLogic)
{
if (_Log is null)
throw new NullReferenceException(nameof(_Log));
+ int result = 0;
int total;
+ int notMapped;
string message;
+ bool exceptions;
int totalSeconds;
- int exceptionCount;
Container container;
Item[] filteredItems;
bool outputResolutionHasNumber;
@@ -724,21 +741,22 @@ public partial class DlibDotNet
propertyLogic.SetAngleBracketCollection(aResultsFullGroupDirectory, container.SourceDirectory, anyNullOrNoIsUniqueFileName);
if (outputResolutionHasNumber)
_Resize.SetAngleBracketCollection(cResultsFullGroupDirectory, container.SourceDirectory);
- exceptionCount = FullParallelWork(maxDegreeOfParallelism,
- propertyLogic,
- metadata,
- mapLogic,
- outputResolution,
- outputResolutionHasNumber,
- cResultsFullGroupDirectory,
- dResultsFullGroupDirectory,
- d2ResultsFullGroupDirectory,
- sourceDirectoryChanges,
- fileNameToCollection,
- container,
- filteredItems,
- message);
- if (exceptionCount != 0)
+ (notMapped, exceptions) = FullParallelWork(maxDegreeOfParallelism,
+ propertyLogic,
+ metadata,
+ mapLogic,
+ outputResolution,
+ outputResolutionHasNumber,
+ cResultsFullGroupDirectory,
+ dResultsFullGroupDirectory,
+ d2ResultsFullGroupDirectory,
+ sourceDirectoryChanges,
+ fileNameToCollection,
+ container,
+ filteredItems,
+ message);
+ result += notMapped;
+ if (exceptions)
{
_Exceptions.Add(container.SourceDirectory);
continue;
@@ -756,6 +774,7 @@ public partial class DlibDotNet
total += container.Items.Count;
}
}
+ return result;
}
private void SaveFaceDistances(long ticks, MapLogic mapLogic, Mapping[] mappingCollection, string dFacesContentDirectory, string d2FacePartsContentDirectory, string d2FacePartsContentCollectionDirectory, Dictionary> idToWholePercentagesToMapping, List faceDistanceEncodings, FaceDistanceContainer[] faceDistanceContainers)
@@ -887,11 +906,12 @@ public partial class DlibDotNet
return result;
}
- private Mapping[] GetMappings(Property.Models.Configuration propertyConfiguration, Container[] containers, MapLogic mapLogic, bool distinctItems)
+ private Mapping[] GetMappings(Property.Models.Configuration propertyConfiguration, Container[] containers, MapLogic mapLogic, int totalNotMapped, bool distinctItems)
{
Mapping[] results;
int count = 0;
Mapping mapping;
+ int notMapped = 0;
bool anyValidFaces;
string focusRelativePath;
bool? isFocusRelativePath;
@@ -901,6 +921,7 @@ public partial class DlibDotNet
IEnumerable- filteredItems;
MappingFromItem mappingFromItem;
List mappingCollection = new();
+ ReadOnlyCollection? locationContainersFiles = null;
foreach (Container container in containers)
{
if (container.Items.Count == 0)
@@ -934,12 +955,21 @@ public partial class DlibDotNet
}
if (!anyValidFaces)
{
- mapping = GetMapping(mapLogic, item, isFocusRelativePath, isIgnoreRelativePath, mappingFromItem);
+ (mapping, notMapped) = GetMapping(mapLogic, locationContainersFiles, item, isFocusRelativePath, isIgnoreRelativePath, mappingFromItem);
mappingCollection.Add(mapping);
+ if (mapping.MappingFromPerson is null || mapping.MappingFromPerson.LocationContainersFiles.Count == 0)
+ continue;
+ if (_Configuration.LocationContainerDistanceTolerance is null)
+ Map.Models.Stateless.Methods.IMapLogic.MoveToDecade(propertyConfiguration, mapping.MappingFromItem, mapping.MappingFromPerson);
}
}
}
results = (from l in mappingCollection orderby l.MappingFromItem.Id select l).ToArray();
+ if (notMapped != totalNotMapped)
+ {
+ if (notMapped != totalNotMapped)
+ { }
+ }
return results;
}
@@ -1179,7 +1209,7 @@ public partial class DlibDotNet
B_Metadata metadata = new(_Configuration.PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory);
mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, _Distance, personContainers, ticks, a2PeopleSingletonDirectory, eDistanceContentDirectory);
containers = Shared.Models.Stateless.Methods.IContainer.SortContainers(_Configuration.PropertyConfiguration, _Configuration.IgnoreRelativePaths, _ArgZeroIsConfigurationRootDirectory, argZero, containers);
- FullDoWork(argZero, propertyRoot, ticks, aResultsFullGroupDirectory, bResultsFullGroupDirectory, t, containers, propertyLogic, metadata, fileNameToCollection, mapLogic);
+ int totalNotMapped = FullDoWork(argZero, propertyRoot, ticks, aResultsFullGroupDirectory, bResultsFullGroupDirectory, t, containers, propertyLogic, metadata, fileNameToCollection, mapLogic);
List
- distinctFilteredItems = Shared.Models.Stateless.Methods.IContainer.GetItems(_Configuration.PropertyConfiguration, containers, distinctItems: true, filterItems: true);
if (_Configuration.LookForAbandoned)
{
@@ -1192,8 +1222,7 @@ public partial class DlibDotNet
_Distance.Clear();
Verify(eDistanceContentDirectory, distinctFilteredItems);
List distinctFilteredFaces = Map.Models.Stateless.Methods.IMapLogic.GetFaces(distinctFilteredItems);
- Mapping[] distinctFilteredMappingCollection = GetMappings(_Configuration.PropertyConfiguration, containers, mapLogic, distinctItems: true);
- int totalNotMapped = mapLogic.UpdateMappingFromPerson(_Configuration.PropertyConfiguration, distinctFilteredMappingCollection);
+ Mapping[] distinctFilteredMappingCollection = GetMappings(_Configuration.PropertyConfiguration, containers, mapLogic, totalNotMapped, distinctItems: true);
string json = JsonSerializer.Serialize(distinctFilteredMappingCollection);
File.WriteAllText(Path.Combine(eDistanceContentDirectory, $"{ticks}.json"), json);
foreach (string outputResolution in _Configuration.OutputResolutions)
diff --git a/Instance/Instance.csproj b/Instance/Instance.csproj
index e7f7f02..2628475 100644
--- a/Instance/Instance.csproj
+++ b/Instance/Instance.csproj
@@ -63,15 +63,4 @@
-
-
- Always
-
-
- Always
-
-
- Always
-
-
\ No newline at end of file
diff --git a/Instance/Program.cs b/Instance/Program.cs
index 52aa054..760422d 100644
--- a/Instance/Program.cs
+++ b/Instance/Program.cs
@@ -18,8 +18,6 @@ public class Program
IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero);
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables()
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
- .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true)
.AddUserSecrets();
IConfigurationRoot configurationRoot = configurationBuilder.Build();
AppSettings appSettings = Models.Binder.AppSettings.Get(configurationRoot);
diff --git a/Instance/appsettings.Development.json b/Instance/appsettings.Development.json
deleted file mode 100644
index ad9619a..0000000
--- a/Instance/appsettings.Development.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "Logging": {
- "LogLevel": {
- "Log4netProvider": "Debug"
- }
- },
- "Serilog": {
- "MinimumLevel": "Debug"
- }
-}
\ No newline at end of file
diff --git a/Instance/appsettings.Staging.json b/Instance/appsettings.Staging.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/Instance/appsettings.Staging.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/Instance/appsettings.json b/Instance/appsettings.json
deleted file mode 100644
index a39f886..0000000
--- a/Instance/appsettings.json
+++ /dev/null
@@ -1,206 +0,0 @@
-{
- "Company": "Mike Phares",
- "Linux": {},
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft": "Warning",
- "Log4netProvider": "Information",
- "Microsoft.Hosting.Lifetime": "Information"
- }
- },
- "MaxDegreeOfParallelism": 12,
- "Serilog": {
- "Using": [
- "Serilog.Sinks.Console",
- "Serilog.Sinks.File"
- ],
- "MinimumLevel": "Debug",
- "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"
- }
- },
- "WorkingDirectoryName": "PharesApps",
- "Windows": {
- "Configuration": {
- "CheckDFaceAndUpWriteDates": false,
- "CheckJsonForDistanceResults": false,
- "CrossDirectoryMaxItemsInDistanceCollection": 7,
- "DateGroup": "DateGroup",
- "DeletePossibleDuplicates": false,
- "DistanceFactor": 8,
- "DistanceMoveUnableToMatch": false,
- "DistancePixelDistanceTolerance": 1,
- "DistanceRenameToMatch": false,
- "EyeThreshold": 33,
- "FaceAreaPermyriad": 10000,
- "FaceDistanceHiddenImageFactor": 2,
- "FaceConfidencePercent": 100,
- "FaceDistancePermyriad": 10000,
- "FileNameDirectorySeparator": ".Z.",
- "ForceFaceLastWriteTimeToCreationTime": false,
- "ForceMetadataLastWriteTimeToCreationTime": false,
- "ForcePropertyLastWriteTimeToCreationTime": false,
- "ForceResizeLastWriteTimeToCreationTime": false,
- "FocusDirectory": "",
- "FocusModel": "",
- "GenealogicalDataCommunicationFile": "",
- "LoadPhotoPrismLocations": false,
- "LocationDigits": 9,
- "LocationFactor": 10000,
- "LookForAbandoned": true,
- "MappingDefaultName": "John Doe~25",
- "MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping": false,
- "MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping": false,
- "MaxImagesInDirectoryForTopLevelFirstPass": 10,
- "ModelDirectory": "C:/GitHub/dlib-models",
- "ModelName": "Hog",
- "NumberOfJitters": 0,
- "NumberOfTimesToUpsample": 0,
- "OutputExtension": ".jpg",
- "OutputQuality": 95,
- "OverrideForFaceImages": false,
- "OverrideForFaceLandmarkImages": false,
- "OverrideForResizeImages": false,
- "Pattern": "[^ABCDEFGHIJKLMNOPQRSTUVWXYZbcdfghjklmnpqrstvwxyz0-9]",
- "PersonBirthdayFirstYear": 1500,
- "PersonBirthdayFormat": "yyyy-MM-dd_HH",
- "PersonCharacters": "!#%]^_`~+=",
- "PersonCharactersCopyCount": 0,
- "PersonKeyFormat": "yyyy-MM-dd_HH",
- "PopulatePropertyId": true,
- "PredictorModelName": "Large",
- "PropertiesChangedForDistance": false,
- "PropertiesChangedForFaces": false,
- "PropertiesChangedForIndex": false,
- "PropertiesChangedForMetadata": false,
- "PropertiesChangedForProperty": false,
- "PropertiesChangedForResize": false,
- "ResultAllInOne": "_ _ _",
- "ResultAllInOneSubdirectoryLength": 2,
- "ResultCollection": "[]",
- "ResultContent": "()",
- "ResultSingleton": "{}",
- "Reverse": false,
- "RootDirectory": "D:/Images",
- "SaveIndividually": false,
- "SaveFullYearOfRandomFiles": true,
- "SaveResizedSubFiles": true,
- "SaveSortingWithoutPerson": false,
- "SkipOlderThanDays": null,
- "SkipSearch": false,
- "SortingMaximumPerFaceShouldBeHigh": 3000,
- "SortingMaximumPerKey": 7,
- "SortingMinimumToUseSigma": 10,
- "TestDistanceResults": true,
- "UseFilterTries": 0,
- "CopyFacesAndSaveFaceLandmarkForOutputResolutions": [],
- "IgnoreExtensions": [
- ".gif",
- ".GIF",
- ".json",
- ".JOSN",
- ".txt",
- ".TXT",
- ".ico",
- ".ICO"
- ],
- "JLinks": [],
- "LoadOrCreateThenSaveDistanceResultsForOutputResolutions": [],
- "LoadOrCreateThenSaveImageFacesResultsForOutputResolutions": [],
- "OutputResolutions": [],
- "PropertyContentCollectionFiles": [],
- "RangeDaysDeltaTolerance": [
- 0,
- 700,
- 123456
- ],
- "RangeDistanceTolerance": [
- 0,
- 0.4,
- 0.6
- ],
- "RangeFaceAreaTolerance": [
- 0,
- 0.001,
- 1
- ],
- "RangeFaceConfidence": [
- 0,
- 0.2,
- 0.8
- ],
- "RectangleIntersectMinimums": [
- 0.99
- ],
- "IgnoreRelativePaths": [],
- "MixedYearRelativePaths": [],
- "SaveFaceDistancesForOutputResolutions": [],
- "SaveFaceLandmarkForOutputResolutions": [],
- "SaveFilteredOriginalImagesFromJLinksForOutputResolutions": [],
- "SaveMappedForOutputResolutions": [],
- "SaveRandomForOutputResolutions": [],
- "SaveShortcutsForOutputResolutions": [],
- "SkipNotSkipDirectories": [],
- "VerifyToSeason": [],
- "ValidImageFormatExtensions": [
- ".bmp",
- ".BMP",
- ".gif",
- ".GIF",
- ".jpeg",
- ".JPEG",
- ".jpg",
- ".JPG",
- ".png",
- ".PNG",
- ".tiff",
- ".TIFF",
- ".tif",
- ".TIF"
- ],
- "ValidResolutions": [
- "Original",
- "176 x 176",
- "256 x 256",
- "353 x 353",
- "1024 x 768",
- "1280 x 720",
- "1280 x 800",
- "1376 x 768",
- "1600 x 1200",
- "1920 x 1080",
- "2256 x 1496",
- "3840 x 2160",
- "7680 x 4320"
- ]
- }
- }
-}
\ No newline at end of file
diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs
index 07098c7..126dfa1 100644
--- a/Map/Models/MapLogic.cs
+++ b/Map/Models/MapLogic.cs
@@ -178,7 +178,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
return new(result, wholePercentagesToPersonContainers);
}
- public int UpdateMappingFromPerson(ReadOnlyCollection? locationContainersFiles, Mapping mapping)
+ public int UpdateMappingFromPerson(ReadOnlyCollection? locationContainersFiles, ReadOnlyDictionary>? wholePercentagesToPersonContainers, Mapping mapping)
{
int result = 0;
long personKey;
@@ -186,18 +186,22 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
string mappingSegmentB;
PersonBirthday personBirthday;
ReadOnlyCollection? personContainers;
- ReadOnlyDictionary>? wholePercentagesToPersonContainers;
for (int i = 1; i < 2; i++)
{
if (mapping.MappingFromLocation is null)
continue;
- if (!_IdThenWholePercentagesToPersonContainers.TryGetValue(mapping.MappingFromItem.Id, out wholePercentagesToPersonContainers))
+ if (wholePercentagesToPersonContainers is not null)
{
if (mapping.MappingFromFilter.InSkipCollection is not null && mapping.MappingFromFilter.InSkipCollection.Value)
continue;
result += 1;
continue;
}
+ if (wholePercentagesToPersonContainers is null)
+ {
+ result += 1;
+ continue;
+ }
if (!wholePercentagesToPersonContainers.TryGetValue(mapping.MappingFromLocation.WholePercentages, out personContainers))
{
if (mapping.MappingFromFilter.InSkipCollection is not null && mapping.MappingFromFilter.InSkipCollection.Value)
@@ -225,23 +229,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
return result;
}
- public int UpdateMappingFromPerson(Property.Models.Configuration propertyConfiguration, Mapping[] mappingCollection)
- {
- int result = 0;
- ReadOnlyCollection? locationContainersFiles = null;
- foreach (Mapping mapping in mappingCollection)
- {
- if (mapping.MappingFromLocation is null)
- continue;
- result += UpdateMappingFromPerson(locationContainersFiles, mapping);
- if (mapping.MappingFromPerson is null || mapping.MappingFromPerson.LocationContainersFiles.Count == 0)
- continue;
- if (_Configuration?.LocationContainerDistanceTolerance is null)
- Stateless.MapLogic.MoveToDecade(propertyConfiguration, mapping.MappingFromItem, mapping.MappingFromPerson);
- }
- return result;
- }
-
public void SaveContainers(bool saveIndividually, int totalNotMapped, int? updated, List saveContainers)
{
if (_Configuration is null)
@@ -1369,14 +1356,23 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
return results;
}
- public bool IsUsed(bool ignoreXMatches, int id, MappingFromLocation mappingFromLocation)
+ public ReadOnlyDictionary>? GetWholePercentagesToPersonContainers(int? id)
+ {
+ ReadOnlyDictionary>? result;
+ if (id is null)
+ result = null;
+ else
+ _ = _IdThenWholePercentagesToPersonContainers.TryGetValue(id.Value, out result);
+ return result;
+ }
+
+ public bool IsUsed(bool ignoreXMatches, int id, ReadOnlyDictionary>? wholePercentagesToPersonContainers, MappingFromLocation mappingFromLocation)
{
bool result;
List? wholePercentagesCollection;
ReadOnlyCollection? personContainers;
- ReadOnlyDictionary>? wholePercentagesToPersonContainers;
result = _SkipCollection.TryGetValue(id, out wholePercentagesCollection) && wholePercentagesCollection.Contains(mappingFromLocation.WholePercentages);
- if (!result && _IdThenWholePercentagesToPersonContainers.TryGetValue(id, out wholePercentagesToPersonContainers))
+ if (!result && wholePercentagesToPersonContainers is not null)
{
if (wholePercentagesToPersonContainers.TryGetValue(mappingFromLocation.WholePercentages, out personContainers))
{
@@ -1390,14 +1386,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
public bool InSkipCollection(int id, MappingFromLocation mappingFromLocation) =>
_SkipCollection.TryGetValue(id, out List? wholePercentagesCollection) && wholePercentagesCollection.Contains(mappingFromLocation.WholePercentages);
- public bool? IsFocusPerson(int? skipPersonWithMoreThen, List<(string Directory, long PersonKey)> jLinkResolvedDirectories, int id, MappingFromLocation mappingFromLocation)
+ public bool? IsFocusPerson(int? skipPersonWithMoreThen, List<(string Directory, long PersonKey)> jLinkResolvedDirectories, ReadOnlyDictionary>? wholePercentagesToPersonContainers, MappingFromLocation mappingFromLocation)
{
bool? result;
ReadOnlyCollection? personContainers;
- ReadOnlyDictionary>? wholePercentagesToPersonContainers;
if (skipPersonWithMoreThen is null && jLinkResolvedDirectories.Count == 0)
result = null;
- else if (!_IdThenWholePercentagesToPersonContainers.TryGetValue(id, out wholePercentagesToPersonContainers))
+ else if (wholePercentagesToPersonContainers is null)
result = null;
else if (!wholePercentagesToPersonContainers.TryGetValue(mappingFromLocation.WholePercentages, out personContainers))
result = null;
diff --git a/Map/Models/Stateless/Methods/IMapLogic.cs b/Map/Models/Stateless/Methods/IMapLogic.cs
index c004a7c..8ed8acc 100644
--- a/Map/Models/Stateless/Methods/IMapLogic.cs
+++ b/Map/Models/Stateless/Methods/IMapLogic.cs
@@ -33,4 +33,9 @@ public interface IMapLogic
static List<(string, long)> GetJLinkDirectories(string genealogicalDataCommunicationFile, string[] jLinks, string personBirthdayFormat, char[] personCharacters, string a2PeopleSingletonDirectory, string a2PeopleContentDirectory) =>
MapLogic.GetJLinkDirectories(genealogicalDataCommunicationFile, jLinks, personBirthdayFormat, personCharacters, a2PeopleSingletonDirectory, a2PeopleContentDirectory);
+ void TestStatic_MoveToDecade(Property.Models.Configuration propertyConfiguration, Shared.Models.MappingFromItem mappingFromItem, Shared.Models.MappingFromPerson mappingFromPerson) =>
+ MoveToDecade(propertyConfiguration, mappingFromItem, mappingFromPerson);
+ static void MoveToDecade(Property.Models.Configuration propertyConfiguration, Shared.Models.MappingFromItem mappingFromItem, Shared.Models.MappingFromPerson mappingFromPerson) =>
+ MapLogic.MoveToDecade(propertyConfiguration, mappingFromItem, mappingFromPerson);
+
}
\ No newline at end of file
diff --git a/Rename/Rename.csproj b/Rename/Rename.csproj
index a60d072..874bcdd 100644
--- a/Rename/Rename.csproj
+++ b/Rename/Rename.csproj
@@ -51,12 +51,4 @@
-
-
- Always
-
-
- Always
-
-
\ No newline at end of file
diff --git a/Rename/appsettings.Development.json b/Rename/appsettings.Development.json
deleted file mode 100644
index ad9619a..0000000
--- a/Rename/appsettings.Development.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "Logging": {
- "LogLevel": {
- "Log4netProvider": "Debug"
- }
- },
- "Serilog": {
- "MinimumLevel": "Debug"
- }
-}
\ No newline at end of file
diff --git a/Rename/appsettings.json b/Rename/appsettings.json
deleted file mode 100644
index 03a9ef9..0000000
--- a/Rename/appsettings.json
+++ /dev/null
@@ -1,99 +0,0 @@
-{
- "ComparePathsFile": "",
- "Company": "Mike Phares",
- "ForceIdName": false,
- "Linux": {},
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft": "Warning",
- "Log4netProvider": "Debug",
- "Microsoft.Hosting.Lifetime": "Information"
- }
- },
- "MaxDegreeOfParallelism": 6,
- "MaxMinutesDelta": 2,
- "RenameUndo": false,
- "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"
- }
- },
- "WorkingDirectoryName": "PharesApps",
- "Windows": {
- "Configuration": {
- "DateGroup": "dd514b88",
- "DiffPropertyDirectory": "",
- "FileNameDirectorySeparator": ".Z.",
- "ForcePropertyLastWriteTimeToCreationTime": false,
- "MaxImagesInDirectoryForTopLevelFirstPass": 10,
- "OutputExtension": ".jpg",
- "Pattern": "[^ABCDEFGHIJKLMNOPQRSTUVWXYZbcdfghjklmnpqrstvwxyz0-9]",
- "PersonBirthdayFormat": "yyyy-MM-dd_HH",
- "PopulatePropertyId": true,
- "PropertiesChangedForProperty": false,
- "ResultAllInOne": "_ _ _",
- "ResultAllInOneSubdirectoryLength": 2,
- "ResultCollection": "[]",
- "ResultContent": "()",
- "ResultSingleton": "{}",
- "RootDirectory": "D:/Images",
- "IgnoreExtensions": [
- ".gif",
- ".GIF",
- ".nef",
- ".NEF",
- ".pdf",
- ".PDF"
- ],
- "ValidImageFormatExtensions": [
- ".bmp",
- ".BMP",
- ".gif",
- ".GIF",
- ".jpeg",
- ".JPEG",
- ".jpg",
- ".JPG",
- ".png",
- ".PNG",
- ".tiff",
- ".TIFF",
- ".tif",
- ".TIF"
- ]
- }
- }
-}
\ No newline at end of file
diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj
index 4be4e99..c328c96 100644
--- a/Tests/Tests.csproj
+++ b/Tests/Tests.csproj
@@ -48,15 +48,4 @@
-
-
- Always
-
-
- Always
-
-
- Always
-
-
\ No newline at end of file
diff --git a/Tests/UnitTestCalculations.cs b/Tests/UnitTestCalculations.cs
index 0f4a975..2609cc3 100644
--- a/Tests/UnitTestCalculations.cs
+++ b/Tests/UnitTestCalculations.cs
@@ -39,8 +39,6 @@ public partial class UnitTestCalculations
isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero);
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables()
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
- .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true)
.AddUserSecrets();
configurationRoot = configurationBuilder.Build();
appSettings = Models.Binder.AppSettings.Get(configurationRoot);
diff --git a/Tests/UnitTestExample.cs b/Tests/UnitTestExample.cs
index 20da7be..d62ce04 100644
--- a/Tests/UnitTestExample.cs
+++ b/Tests/UnitTestExample.cs
@@ -36,8 +36,6 @@ public class UnitTestExample
isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero);
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables()
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
- .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true)
.AddUserSecrets();
configurationRoot = configurationBuilder.Build();
appSettings = Models.Binder.AppSettings.Get(configurationRoot);
diff --git a/Tests/UnitTestHardCoded.cs b/Tests/UnitTestHardCoded.cs
index 7792579..adfc81a 100644
--- a/Tests/UnitTestHardCoded.cs
+++ b/Tests/UnitTestHardCoded.cs
@@ -38,8 +38,6 @@ public partial class UnitTestHardCoded
isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero);
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables()
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
- .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true)
.AddUserSecrets();
configurationRoot = configurationBuilder.Build();
appSettings = Models.Binder.AppSettings.Get(configurationRoot);
diff --git a/Tests/UnitTestResize.cs b/Tests/UnitTestResize.cs
index c7f5142..1f07ffc 100644
--- a/Tests/UnitTestResize.cs
+++ b/Tests/UnitTestResize.cs
@@ -41,8 +41,6 @@ public class UnitTestResize
isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero);
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables()
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
- .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true)
.AddUserSecrets();
configurationRoot = configurationBuilder.Build();
appSettings = Models.Binder.AppSettings.Get(configurationRoot);
diff --git a/TestsWithFaceRecognitionDotNet/TestsWithFaceRecognitionDotNet.csproj b/TestsWithFaceRecognitionDotNet/TestsWithFaceRecognitionDotNet.csproj
index b2f4278..aece9c4 100644
--- a/TestsWithFaceRecognitionDotNet/TestsWithFaceRecognitionDotNet.csproj
+++ b/TestsWithFaceRecognitionDotNet/TestsWithFaceRecognitionDotNet.csproj
@@ -48,15 +48,4 @@
-
-
- Always
-
-
- Always
-
-
- Always
-
-
\ No newline at end of file
diff --git a/TestsWithFaceRecognitionDotNet/UnitTestExample.cs b/TestsWithFaceRecognitionDotNet/UnitTestExample.cs
index 20da7be..d62ce04 100644
--- a/TestsWithFaceRecognitionDotNet/UnitTestExample.cs
+++ b/TestsWithFaceRecognitionDotNet/UnitTestExample.cs
@@ -36,8 +36,6 @@ public class UnitTestExample
isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero);
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables()
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
- .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true)
.AddUserSecrets();
configurationRoot = configurationBuilder.Build();
appSettings = Models.Binder.AppSettings.Get(configurationRoot);
diff --git a/TestsWithFaceRecognitionDotNet/UnitTestFace.cs b/TestsWithFaceRecognitionDotNet/UnitTestFace.cs
index 2d8cf6b..5156828 100644
--- a/TestsWithFaceRecognitionDotNet/UnitTestFace.cs
+++ b/TestsWithFaceRecognitionDotNet/UnitTestFace.cs
@@ -43,8 +43,6 @@ public class UnitTestFace
isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero);
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.AddEnvironmentVariables()
- .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
- .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true)
.AddUserSecrets();
configurationRoot = configurationBuilder.Build();
appSettings = Models.Binder.AppSettings.Get(configurationRoot);