Save Shortcuts Rev B

This commit is contained in:
Mike Phares 2022-10-09 12:02:38 -07:00
parent d951ad6696
commit b0b4c20597
20 changed files with 302 additions and 180 deletions

View File

@ -5,6 +5,8 @@ namespace View_by_Distance.Compare.Models.Binder;
public class Configuration public class Configuration
{ {
#nullable disable
[Display(Name = "Diff Property Directory"), Required] public string DiffPropertyDirectory { get; set; } [Display(Name = "Diff Property Directory"), Required] public string DiffPropertyDirectory { get; set; }
[Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } [Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; }
[Display(Name = "Rename"), Required] public string[] Rename { get; set; } [Display(Name = "Rename"), Required] public string[] Rename { get; set; }
@ -12,14 +14,7 @@ public class Configuration
[Display(Name = "Rename C"), Required] public string[] RenameC { get; set; } [Display(Name = "Rename C"), Required] public string[] RenameC { get; set; }
[Display(Name = "Spelling"), Required] public string[] Spelling { get; set; } [Display(Name = "Spelling"), Required] public string[] Spelling { get; set; }
public Configuration() #nullable restore
{
DiffPropertyDirectory = string.Empty;
Rename = Array.Empty<string>();
RenameB = Array.Empty<string>();
RenameC = Array.Empty<string>();
Spelling = Array.Empty<string>();
}
public override string ToString() public override string ToString()
{ {

View File

@ -5,6 +5,9 @@ namespace View_by_Distance.Date.Group.Models.Binder;
public class Configuration public class Configuration
{ {
#nullable disable
[Display(Name = "By Create Date Shortcut"), Required] public bool? ByCreateDateShortcut { get; set; } [Display(Name = "By Create Date Shortcut"), Required] public bool? ByCreateDateShortcut { get; set; }
[Display(Name = "By Date"), Required] public bool? ByDay { get; set; } [Display(Name = "By Date"), Required] public bool? ByDay { get; set; }
[Display(Name = "By Hash"), Required] public bool? ByHash { get; set; } [Display(Name = "By Hash"), Required] public bool? ByHash { get; set; }
@ -13,15 +16,7 @@ public class Configuration
[Display(Name = "Ignore Subdirectories for Rename"), Required] public bool? KeepFullPath { get; set; } [Display(Name = "Ignore Subdirectories for Rename"), Required] public bool? KeepFullPath { get; set; }
[Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } [Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; }
public Configuration() #nullable restore
{
ByDay = null;
ByCreateDateShortcut = null;
ByHash = null;
BySeason = null;
ByWeek = null;
KeepFullPath = null;
}
public override string ToString() public override string ToString()
{ {

View File

@ -63,21 +63,18 @@ public class D_Face
string hiddenFileNameExtension, string hiddenFileNameExtension,
ImageCodecInfo hiddenImageCodecInfo, ImageCodecInfo hiddenImageCodecInfo,
ImageCodecInfo imageCodecInfo, ImageCodecInfo imageCodecInfo,
Model model, string modelDirectory,
ModelParameter modelParameter, string modelName,
int numberOfJitters, int numberOfJitters,
int numberOfTimesToUpsample, int numberOfTimesToUpsample,
bool overrideForFaceImages, bool overrideForFaceImages,
bool retryImagesWithoutAFace, bool retryImagesWithoutAFace,
PredictorModel predictorModel, string predictorModelName,
bool propertiesChangedForFaces) bool propertiesChangedForFaces)
{ {
_Model = model;
_ArgZero = argZero; _ArgZero = argZero;
_Configuration = configuration; _Configuration = configuration;
_ImageCodecInfo = imageCodecInfo; _ImageCodecInfo = imageCodecInfo;
_ModelParameter = modelParameter;
_PredictorModel = predictorModel;
_NumberOfJitters = numberOfJitters; _NumberOfJitters = numberOfJitters;
_EncoderParameters = encoderParameters; _EncoderParameters = encoderParameters;
_FileNameExtension = filenameExtension; _FileNameExtension = filenameExtension;
@ -94,6 +91,10 @@ public class D_Face
_FaceDistanceAreaPermilleTolerance = faceDistanceAreaPermilleTolerance; _FaceDistanceAreaPermilleTolerance = faceDistanceAreaPermilleTolerance;
_FaceDistanceHiddenImageFactor = faceDistanceHiddenImageFactor; _FaceDistanceHiddenImageFactor = faceDistanceHiddenImageFactor;
_ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime; _ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime;
(Model model, PredictorModel predictorModel, ModelParameter modelParameter) = GetModel(modelDirectory, modelName, predictorModelName);
_Model = model;
_PredictorModel = predictorModel;
_ModelParameter = modelParameter;
ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty<Type>(), null); ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty<Type>(), null);
if (constructorInfo is null) if (constructorInfo is null)
throw new Exception(); throw new Exception();
@ -107,6 +108,47 @@ public class D_Face
return result; return result;
} }
private static (Model model, PredictorModel predictorModel, ModelParameter modelParameter) GetModel(string modelDirectory, string modelName, string predictorModelName)
{
(Model, PredictorModel, ModelParameter) result;
Array array;
Model? model = null;
PredictorModel? predictorModel = null;
array = Enum.GetValues(typeof(Model));
foreach (Model check in array)
{
if (modelName.Contains(check.ToString()))
{
model = check;
break;
}
}
if (model is null)
throw new Exception("Destination directory must have Model name!");
model = model.Value;
array = Enum.GetValues(typeof(PredictorModel));
foreach (PredictorModel check in array)
{
if (predictorModelName.Contains(check.ToString()))
{
predictorModel = check;
break;
}
}
if (predictorModel is null)
throw new Exception("Destination directory must have Predictor Model name!");
predictorModel = predictorModel.Value;
ModelParameter modelParameter = new()
{
CnnFaceDetectorModel = File.ReadAllBytes(Path.Combine(modelDirectory, "mmod_human_face_detector.dat")),
FaceRecognitionModel = File.ReadAllBytes(Path.Combine(modelDirectory, "dlib_face_recognition_resnet_model_v1.dat")),
PosePredictor5FaceLandmarksModel = File.ReadAllBytes(Path.Combine(modelDirectory, "shape_predictor_5_face_landmarks.dat")),
PosePredictor68FaceLandmarksModel = File.ReadAllBytes(Path.Combine(modelDirectory, "shape_predictor_68_face_landmarks.dat"))
};
result = new(model.Value, predictorModel.Value, modelParameter);
return result;
}
#pragma warning disable CA1416 #pragma warning disable CA1416
private static byte[] GetBytes(string value) private static byte[] GetBytes(string value)

View File

@ -6,7 +6,6 @@ using System.Text.Json;
using View_by_Distance.Distance.Models; using View_by_Distance.Distance.Models;
using View_by_Distance.Face.Models; using View_by_Distance.Face.Models;
using View_by_Distance.FaceParts.Models; using View_by_Distance.FaceParts.Models;
using View_by_Distance.FaceRecognitionDotNet;
using View_by_Distance.Instance.Models; using View_by_Distance.Instance.Models;
using View_by_Distance.Map.Models; using View_by_Distance.Map.Models;
using View_by_Distance.Metadata.Models; using View_by_Distance.Metadata.Models;
@ -14,7 +13,6 @@ using View_by_Distance.Property.Models;
using View_by_Distance.Resize.Models; using View_by_Distance.Resize.Models;
using View_by_Distance.Shared.Models; using View_by_Distance.Shared.Models;
using View_by_Distance.Shared.Models.Methods; using View_by_Distance.Shared.Models.Methods;
using View_by_Distance.Shared.Models.Stateless;
namespace View_by_Distance.Instance; namespace View_by_Distance.Instance;
@ -71,20 +69,13 @@ public partial class DlibDotNet
_Index = new(configuration); _Index = new(configuration);
_Random = new(configuration); _Random = new(configuration);
_Rename = new(configuration); _Rename = new(configuration);
_Distance = new(
configuration.DistanceMoveUnableToMatch,
configuration.DistancePixelDistanceTolerance,
configuration.DistanceRenameToMatch,
configuration.FaceDistanceTolerance);
if (configuration.IgnoreExtensions is null) if (configuration.IgnoreExtensions is null)
throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); throw new NullReferenceException(nameof(configuration.IgnoreExtensions));
string propertyRoot = Property.Models.Stateless.IResult.GetResultsGroupDirectory(propertyConfiguration, nameof(A_Property), create: false); string propertyRoot = Property.Models.Stateless.IResult.GetResultsGroupDirectory(propertyConfiguration, nameof(A_Property), create: false);
_FirstRun = !Directory.Exists(propertyRoot); _FirstRun = !Directory.Exists(propertyRoot);
_Metadata = new(configuration.ForceMetadataLastWriteTimeToCreationTime, configuration.PropertiesChangedForMetadata);
argZero = args.Count > 0 ? Path.GetFullPath(args[0]) : Path.GetFullPath(propertyConfiguration.RootDirectory); argZero = args.Count > 0 ? Path.GetFullPath(args[0]) : Path.GetFullPath(propertyConfiguration.RootDirectory);
_ArgZeroIsConfigurationRootDirectory = propertyConfiguration.RootDirectory == argZero; _ArgZeroIsConfigurationRootDirectory = propertyConfiguration.RootDirectory == argZero;
_Log.Information(configuration.ModelDirectory); _Log.Information(configuration.ModelDirectory);
(Model model, PredictorModel predictorModel, ModelParameter modelParameter) = GetModel(configuration);
{ {
(ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetPngLowQuality(); (ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetPngLowQuality();
(ImageCodecInfo hiddenImageCodecInfo, EncoderParameters hiddenEncoderParameters, string hiddenFileNameExtension) = C_Resize.GetGifLowQuality(); (ImageCodecInfo hiddenImageCodecInfo, EncoderParameters hiddenEncoderParameters, string hiddenFileNameExtension) = C_Resize.GetGifLowQuality();
@ -101,20 +92,22 @@ public partial class DlibDotNet
hiddenFileNameExtension, hiddenFileNameExtension,
hiddenImageCodecInfo, hiddenImageCodecInfo,
imageCodecInfo, imageCodecInfo,
model, configuration.ModelDirectory,
modelParameter, configuration.ModelName,
configuration.NumberOfJitters, configuration.NumberOfJitters,
configuration.NumberOfTimesToUpsample, configuration.NumberOfTimesToUpsample,
configuration.OverrideForFaceImages, configuration.OverrideForFaceImages,
configuration.RetryImagesWithoutAFace, configuration.RetryImagesWithoutAFace,
predictorModel, configuration.PredictorModelName,
configuration.PropertiesChangedForFaces); configuration.PropertiesChangedForFaces);
} }
{ {
(ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetGifLowQuality(); (ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetGifLowQuality();
_FaceParts = new D2_FaceParts(imageCodecInfo, encoderParameters, filenameExtension, configuration.CheckDFaceAndUpWriteDates, configuration.OverrideForFaceLandmarkImages); _FaceParts = new D2_FaceParts(imageCodecInfo, encoderParameters, filenameExtension, configuration.CheckDFaceAndUpWriteDates, configuration.OverrideForFaceLandmarkImages);
} }
_Metadata = new(configuration.ForceMetadataLastWriteTimeToCreationTime, configuration.PropertiesChangedForMetadata);
_MapConfiguration = Get(configuration, _Faces.FileNameExtension, _Faces.HiddenFileNameExtension, _FaceParts.FileNameExtension); _MapConfiguration = Get(configuration, _Faces.FileNameExtension, _Faces.HiddenFileNameExtension, _FaceParts.FileNameExtension);
_Distance = new(configuration.DistanceMoveUnableToMatch, configuration.DistancePixelDistanceTolerance, configuration.DistanceRenameToMatch, configuration.FaceDistanceTolerance);
if (_FirstRun || !_ArgZeroIsConfigurationRootDirectory) if (_FirstRun || !_ArgZeroIsConfigurationRootDirectory)
personContainers = Array.Empty<PersonContainer>(); personContainers = Array.Empty<PersonContainer>();
else else
@ -152,7 +145,7 @@ public partial class DlibDotNet
filenameExtension); filenameExtension);
} }
if (!configuration.SkipSearch) if (!configuration.SkipSearch)
Search(ticks, model, predictorModel, argZero, propertyRoot, personContainers); Search(ticks, argZero, propertyRoot, personContainers);
if (!_FirstRun && !_IsEnvironment.Development && _Exceptions.Count == 0 && _ArgZeroIsConfigurationRootDirectory) if (!_FirstRun && !_IsEnvironment.Development && _Exceptions.Count == 0 && _ArgZeroIsConfigurationRootDirectory)
{ {
List<string[]> directoryCollections = _Rename.GetDirectoryRenameCollections( List<string[]> directoryCollections = _Rename.GetDirectoryRenameCollections(
@ -212,50 +205,6 @@ public partial class DlibDotNet
return result; return result;
} }
#pragma warning disable CA1416
#pragma warning restore CA1416
private static (Model model, PredictorModel predictorModel, ModelParameter modelParameter) GetModel(Models.Configuration configuration)
{
(Model, PredictorModel, ModelParameter) result;
Array array;
Model? model = null;
PredictorModel? predictorModel = null;
array = Enum.GetValues(typeof(Model));
foreach (Model check in array)
{
if (configuration.ModelName.Contains(check.ToString()))
{
model = check;
break;
}
}
if (model is null)
throw new Exception("Destination directory must have Model name!");
model = model.Value;
array = Enum.GetValues(typeof(PredictorModel));
foreach (PredictorModel check in array)
{
if (configuration.PredictorModelName.Contains(check.ToString()))
{
predictorModel = check;
break;
}
}
if (predictorModel is null)
throw new Exception("Destination directory must have Predictor Model name!");
predictorModel = predictorModel.Value;
ModelParameter modelParameter = new()
{
CnnFaceDetectorModel = File.ReadAllBytes(Path.Combine(configuration.ModelDirectory, "mmod_human_face_detector.dat")),
FaceRecognitionModel = File.ReadAllBytes(Path.Combine(configuration.ModelDirectory, "dlib_face_recognition_resnet_model_v1.dat")),
PosePredictor5FaceLandmarksModel = File.ReadAllBytes(Path.Combine(configuration.ModelDirectory, "shape_predictor_5_face_landmarks.dat")),
PosePredictor68FaceLandmarksModel = File.ReadAllBytes(Path.Combine(configuration.ModelDirectory, "shape_predictor_68_face_landmarks.dat"))
};
result = new(model.Value, predictorModel.Value, modelParameter);
return result;
}
private void Verify(Models.Configuration configuration) private void Verify(Models.Configuration configuration)
{ {
if (!configuration.OutputResolutions.Any() || string.IsNullOrEmpty(configuration.OutputResolutions[0]) || !configuration.ValidResolutions.Contains(configuration.OutputResolutions[0])) if (!configuration.OutputResolutions.Any() || string.IsNullOrEmpty(configuration.OutputResolutions[0]) || !configuration.ValidResolutions.Contains(configuration.OutputResolutions[0]))
@ -268,6 +217,8 @@ public partial class DlibDotNet
throw new Exception($"One or more {nameof(configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions)} are not in the ValidResolutions list!"); throw new Exception($"One or more {nameof(configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions)} are not in the ValidResolutions list!");
if ((from l in configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any()) if ((from l in configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any())
throw new Exception($"One or more {nameof(configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions)} are not in the ValidResolutions list!"); throw new Exception($"One or more {nameof(configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions)} are not in the ValidResolutions list!");
if ((from l in configuration.SaveShortcutsForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any())
throw new Exception($"One or more {nameof(configuration.SaveShortcutsForOutputResolutions)} are not in the ValidResolutions list!");
if ((from l in configuration.SaveFaceLandmarkForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any()) if ((from l in configuration.SaveFaceLandmarkForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any())
throw new Exception($"One or more {nameof(configuration.SaveFaceLandmarkForOutputResolutions)} are not in the ValidResolutions list!"); throw new Exception($"One or more {nameof(configuration.SaveFaceLandmarkForOutputResolutions)} are not in the ValidResolutions list!");
if (configuration.DistanceFactor + configuration.LocationConfidenceFactor != 10) if (configuration.DistanceFactor + configuration.LocationConfidenceFactor != 10)
@ -628,7 +579,7 @@ public partial class DlibDotNet
} }
} }
private (string, string, string, string) GetResultsFullGroupDirectories(Model? model, PredictorModel? predictorModel, string outputResolution) private (string, string, string, string) GetResultsFullGroupDirectories(string outputResolution)
{ {
string aResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory( string aResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory(
_Configuration.PropertyConfiguration, _Configuration.PropertyConfiguration,
@ -716,7 +667,7 @@ public partial class DlibDotNet
return results.ToArray(); return results.ToArray();
} }
private void FullDoWork(string argZero, Model? model, PredictorModel? predictorModel, string propertyRoot, long ticks, A_Property propertyLogic, int t, Container[] containers, string? eDistanceContentDirectory, Dictionary<int, List<(string, int)>> idToMappedFaceFilesCollection) private void FullDoWork(string argZero, string propertyRoot, long ticks, A_Property propertyLogic, int t, Container[] containers, string? eDistanceContentDirectory, Dictionary<int, List<(string, int)>> idToMappedFaceFilesCollection)
{ {
if (_Log is null) if (_Log is null)
throw new NullReferenceException(nameof(_Log)); throw new NullReferenceException(nameof(_Log));
@ -744,7 +695,7 @@ public partial class DlibDotNet
total = 0; total = 0;
_FileKeyValuePairs.Clear(); _FileKeyValuePairs.Clear();
_FilePropertiesKeyValuePairs.Clear(); _FilePropertiesKeyValuePairs.Clear();
(aResultsFullGroupDirectory, bResultsFullGroupDirectory, cResultsFullGroupDirectory, dResultsFullGroupDirectory) = GetResultsFullGroupDirectories(model, predictorModel, outputResolution); (aResultsFullGroupDirectory, bResultsFullGroupDirectory, cResultsFullGroupDirectory, dResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
for (int i = 0; i < containers.Length; i++) for (int i = 0; i < containers.Length; i++)
{ {
container = containers[i]; container = containers[i];
@ -839,9 +790,10 @@ public partial class DlibDotNet
return result; return result;
} }
private Shared.Models.Face[] SetMappingThenGetDistinctFilteredFacesWithMapping(string argZero, Container[] containers) private (List<Item>, Shared.Models.Face[]) SetMappingThenGetDistinctFilteredFacesWithMapping(string argZero, Container[] containers)
{ {
Shared.Models.Face[] results; List<Item> items = new();
Shared.Models.Face[] faces;
Mapping mapping; Mapping mapping;
int areaPermille; int areaPermille;
bool? isWrongYear; bool? isWrongYear;
@ -868,7 +820,10 @@ public partial class DlibDotNet
if (item.Property?.Id is null || item.ImageFileHolder is null || item.ResizedFileHolder is null) if (item.Property?.Id is null || item.ImageFileHolder is null || item.ResizedFileHolder is null)
continue; continue;
if (!item.Faces.Any(l => l.FaceEncoding is not null && l.Location is not null && l.OutputResolution is not null)) if (!item.Faces.Any(l => l.FaceEncoding is not null && l.Location is not null && l.OutputResolution is not null))
{
items.Add(item);
continue; continue;
}
minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property); minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
(isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime); (isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime);
mappingFromItem = new(item.Property.Id.Value, item.ImageFileHolder, isWrongYear, minimumDateTime, item.RelativePath, item.ResizedFileHolder); mappingFromItem = new(item.Property.Id.Value, item.ImageFileHolder, isWrongYear, minimumDateTime, item.RelativePath, item.ResizedFileHolder);
@ -888,8 +843,8 @@ public partial class DlibDotNet
} }
} }
} }
results = (from l in collection orderby l.Mapping?.MappingFromItem.Id select l).ToArray(); faces = (from l in collection orderby l.Mapping?.MappingFromItem.Id select l).ToArray();
return results; return new(items, faces);
} }
private void MapLogic(string argZero, long ticks, PersonContainer[] personContainers, Container[] containers, string a2PeopleSingletonDirectory, string dResultsFullGroupDirectory, string d2FacePartsContentDirectory, string eDistanceContentDirectory, string outputResolution) private void MapLogic(string argZero, long ticks, PersonContainer[] personContainers, Container[] containers, string a2PeopleSingletonDirectory, string dResultsFullGroupDirectory, string d2FacePartsContentDirectory, string eDistanceContentDirectory, string outputResolution)
@ -897,7 +852,7 @@ public partial class DlibDotNet
int? useFiltersCounter = null; int? useFiltersCounter = null;
SortingContainer[] sortingContainers; SortingContainer[] sortingContainers;
string dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()"); string dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()");
Shared.Models.Face[] distinctFilteredFaces = SetMappingThenGetDistinctFilteredFacesWithMapping(argZero, containers); (List<Item> filteredItems, Shared.Models.Face[] distinctFilteredFaces) = SetMappingThenGetDistinctFilteredFacesWithMapping(argZero, containers);
Mapping[] mappingCollection = MapLogicSupport.GetSelectedMappingCollection(distinctFilteredFaces); Mapping[] mappingCollection = MapLogicSupport.GetSelectedMappingCollection(distinctFilteredFaces);
MapLogicSupport mapLogicSupport = new( MapLogicSupport mapLogicSupport = new(
_Configuration.FaceDistanceAreaPermilleTolerance, _Configuration.FaceDistanceAreaPermilleTolerance,
@ -920,6 +875,12 @@ public partial class DlibDotNet
int totalNotMapped = mapLogic.AddToMapping(mappingCollection); int totalNotMapped = mapLogic.AddToMapping(mappingCollection);
if (_Configuration.MappingSaveMapped) if (_Configuration.MappingSaveMapped)
mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, totalNotMapped); mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, totalNotMapped);
if (_Configuration.MappingSaveNotMapped)
mapLogic.SaveNotMappedTicks();
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
mapLogic.SaveShortcuts(a2PeopleSingletonDirectory, personContainers, filteredItems, mappingCollection);
if (_Configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions.Contains(outputResolution))
mapLogic.SaveResizedImagesByPersonKeyFormatted(_Configuration.JLinks, a2PeopleSingletonDirectory, personContainers, mappingCollection, totalNotMapped);
MapLogicSupport.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces); MapLogicSupport.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces);
sortingContainers = mapLogicSupport.SetFaceMappingSortingCollectionThenGetSortingContainers(_AppSettings.MaxDegreeOfParallelism, ticks, mapLogic, distinctFilteredFaces, useFiltersCounter); sortingContainers = mapLogicSupport.SetFaceMappingSortingCollectionThenGetSortingContainers(_AppSettings.MaxDegreeOfParallelism, ticks, mapLogic, distinctFilteredFaces, useFiltersCounter);
if (!sortingContainers.Any()) if (!sortingContainers.Any())
@ -934,10 +895,6 @@ public partial class DlibDotNet
MapLogicSupport.SaveFaceDistances(_Configuration.PropertyConfiguration, sortingContainers); MapLogicSupport.SaveFaceDistances(_Configuration.PropertyConfiguration, sortingContainers);
if (totalNotMapped > 0) if (totalNotMapped > 0)
mapLogic.UpdateFromSortingContainersThenSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, useFiltersCounter, sortingContainers, totalNotMapped); mapLogic.UpdateFromSortingContainersThenSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, useFiltersCounter, sortingContainers, totalNotMapped);
if (_Configuration.MappingSaveNotMapped)
mapLogic.SaveNotMappedTicks();
if (_Configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions.Contains(outputResolution))
mapLogic.SaveResizedImagesByPersonKeyFormatted(_Configuration.JLinks, a2PeopleSingletonDirectory, personContainers, mappingCollection, totalNotMapped);
} }
private static Container? AreAllSameEndsWith(string argZero, Container[] containers) private static Container? AreAllSameEndsWith(string argZero, Container[] containers)
@ -1006,7 +963,7 @@ public partial class DlibDotNet
return result; return result;
} }
private void Search(long ticks, Model? model, PredictorModel? predictorModel, string argZero, string propertyRoot, PersonContainer[] personContainers) private void Search(long ticks, string argZero, string propertyRoot, PersonContainer[] personContainers)
{ {
int j; int j;
int f; int f;
@ -1048,13 +1005,13 @@ public partial class DlibDotNet
propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FileNameExtension, _Configuration.Reverse); propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FileNameExtension, _Configuration.Reverse);
} }
Dictionary<int, List<(string, int)>> idToMappedFaceFilesCollection = Map.Models.Stateless.Methods.IMapLogic.DeleteEmptyDirectoriesAndGetMappedFaceFiles(_MapConfiguration, ticks, a2PeopleContentDirectory, eDistanceContentDirectory, personContainers); Dictionary<int, List<(string, int)>> idToMappedFaceFilesCollection = Map.Models.Stateless.Methods.IMapLogic.DeleteEmptyDirectoriesAndGetMappedFaceFiles(_MapConfiguration, ticks, a2PeopleContentDirectory, eDistanceContentDirectory, personContainers);
FullDoWork(argZero, model, predictorModel, propertyRoot, ticks, propertyLogic, t, containers, eDistanceContentDirectory, idToMappedFaceFilesCollection); FullDoWork(argZero, propertyRoot, ticks, propertyLogic, t, containers, eDistanceContentDirectory, idToMappedFaceFilesCollection);
_Distance.Clear(); _Distance.Clear();
foreach (string outputResolution in _Configuration.OutputResolutions) foreach (string outputResolution in _Configuration.OutputResolutions)
{ {
if (_FirstRun || container is not null) if (_FirstRun || container is not null)
break; break;
(aResultsFullGroupDirectory, bResultsFullGroupDirectory, cResultsFullGroupDirectory, dResultsFullGroupDirectory) = GetResultsFullGroupDirectories(model, predictorModel, outputResolution); (aResultsFullGroupDirectory, bResultsFullGroupDirectory, cResultsFullGroupDirectory, dResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
if (_ArgZeroIsConfigurationRootDirectory if (_ArgZeroIsConfigurationRootDirectory
&& _Configuration.SaveResizedSubfiles && _Configuration.SaveResizedSubfiles
&& outputResolution == _Configuration.OutputResolutions[0] && outputResolution == _Configuration.OutputResolutions[0]

View File

@ -67,7 +67,8 @@ public class Configuration
[Display(Name = "Reverse"), Required] public bool? Reverse { get; set; } [Display(Name = "Reverse"), Required] public bool? Reverse { get; set; }
[Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; } [Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; } [Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; } [Display(Name = "Save Resized Images by Person Key Formatted"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; }
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; } [Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; }
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } [Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; }
[Display(Name = "Sorting Days Delta Tolerance"), Required] public int? SortingDaysDeltaTolerance { get; set; } [Display(Name = "Sorting Days Delta Tolerance"), Required] public int? SortingDaysDeltaTolerance { get; set; }
@ -136,10 +137,10 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.LocationFactor)); throw new NullReferenceException(nameof(configuration.LocationFactor));
if (configuration.MappingDefaultName is null) if (configuration.MappingDefaultName is null)
throw new NullReferenceException(nameof(configuration.MappingDefaultName)); throw new NullReferenceException(nameof(configuration.MappingDefaultName));
if (configuration.MappingSaveNotMapped is null)
throw new NullReferenceException(nameof(configuration.MappingSaveNotMapped));
if (configuration.MappingSaveMapped is null) if (configuration.MappingSaveMapped is null)
throw new NullReferenceException(nameof(configuration.MappingSaveMapped)); throw new NullReferenceException(nameof(configuration.MappingSaveMapped));
if (configuration.MappingSaveNotMapped is null)
throw new NullReferenceException(nameof(configuration.MappingSaveNotMapped));
if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null) if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null)
throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping)); throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping));
if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping is null) if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping is null)
@ -186,14 +187,16 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.Reverse)); throw new NullReferenceException(nameof(configuration.Reverse));
if (configuration.SaveFaceLandmarkForOutputResolutions is null) if (configuration.SaveFaceLandmarkForOutputResolutions is null)
configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>(); configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>();
if (configuration.SaveFaceLandmarkForOutputResolutions is null)
throw new NullReferenceException(nameof(configuration.SaveFaceLandmarkForOutputResolutions));
if (configuration.SaveFullYearOfRandomFiles is null) if (configuration.SaveFullYearOfRandomFiles is null)
throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles)); throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null) if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>(); configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedSubfiles is null) if (configuration.SaveResizedSubfiles is null)
throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles)); throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
if (configuration.SaveShortcutsForOutputResolutions is null)
configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>();
if (configuration.SaveShortcutsForOutputResolutions is null)
configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>();
if (configuration.SkipSearch is null) if (configuration.SkipSearch is null)
throw new NullReferenceException(nameof(configuration.SkipSearch)); throw new NullReferenceException(nameof(configuration.SkipSearch));
if (configuration.SortingDaysDeltaTolerance is null) if (configuration.SortingDaysDeltaTolerance is null)
@ -208,14 +211,6 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.TestDistanceResults)); throw new NullReferenceException(nameof(configuration.TestDistanceResults));
if (configuration.ValidResolutions is null) if (configuration.ValidResolutions is null)
throw new NullReferenceException(nameof(configuration.ValidResolutions)); throw new NullReferenceException(nameof(configuration.ValidResolutions));
if (configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions is null)
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions = Array.Empty<string>();
if (configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions is null)
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>();
if (configuration.SaveFaceLandmarkForOutputResolutions is null)
configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
_ = DateTime.Now.AddDays(-configuration.SortingDaysDeltaTolerance.Value); _ = DateTime.Now.AddDays(-configuration.SortingDaysDeltaTolerance.Value);
result = new(configuration.PropertyConfiguration, result = new(configuration.PropertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckDFaceAndUpWriteDates.Value,
@ -275,6 +270,7 @@ public class Configuration
configuration.SaveFaceLandmarkForOutputResolutions, configuration.SaveFaceLandmarkForOutputResolutions,
configuration.SaveFullYearOfRandomFiles.Value, configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions, configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions,
configuration.SaveShortcutsForOutputResolutions,
configuration.SaveResizedSubfiles.Value, configuration.SaveResizedSubfiles.Value,
configuration.SkipSearch.Value, configuration.SkipSearch.Value,
configuration.SortingDaysDeltaTolerance.Value, configuration.SortingDaysDeltaTolerance.Value,

View File

@ -66,6 +66,7 @@ public class Configuration
public string[] SaveFaceLandmarkForOutputResolutions { init; get; } public string[] SaveFaceLandmarkForOutputResolutions { init; get; }
public bool SaveFullYearOfRandomFiles { init; get; } public bool SaveFullYearOfRandomFiles { init; get; }
public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; } public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; }
public string[] SaveShortcutsForOutputResolutions { init; get; }
public bool SaveResizedSubfiles { init; get; } public bool SaveResizedSubfiles { init; get; }
public bool SkipSearch { init; get; } public bool SkipSearch { init; get; }
public int SortingDaysDeltaTolerance { init; get; } public int SortingDaysDeltaTolerance { init; get; }
@ -134,6 +135,7 @@ public class Configuration
string[] saveFaceLandmarkForOutputResolutions, string[] saveFaceLandmarkForOutputResolutions,
bool saveFullYearOfRandomFiles, bool saveFullYearOfRandomFiles,
string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions, string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions,
string[] saveShortcutsForOutputResolutions,
bool saveResizedSubfiles, bool saveResizedSubfiles,
bool skipSearch, bool skipSearch,
int sortingDaysDeltaTolerance, int sortingDaysDeltaTolerance,
@ -201,6 +203,7 @@ public class Configuration
SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions; SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions;
SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles; SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles;
SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions; SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SaveResizedSubfiles = saveResizedSubfiles; SaveResizedSubfiles = saveResizedSubfiles;
SkipSearch = skipSearch; SkipSearch = skipSearch;
SortingDaysDeltaTolerance = sortingDaysDeltaTolerance; SortingDaysDeltaTolerance = sortingDaysDeltaTolerance;

View File

@ -6,7 +6,6 @@ using View_by_Distance.Metadata.Models;
using View_by_Distance.Resize.Models; using View_by_Distance.Resize.Models;
using View_by_Distance.Shared.Models; using View_by_Distance.Shared.Models;
using View_by_Distance.Shared.Models.Methods; using View_by_Distance.Shared.Models.Methods;
using View_by_Distance.Shared.Models.Stateless;
namespace View_by_Distance.Instance.Models; namespace View_by_Distance.Instance.Models;

View File

@ -4,7 +4,6 @@ using View_by_Distance.Face.Models;
using View_by_Distance.FaceParts.Models; using View_by_Distance.FaceParts.Models;
using View_by_Distance.Metadata.Models; using View_by_Distance.Metadata.Models;
using View_by_Distance.Resize.Models; using View_by_Distance.Resize.Models;
using View_by_Distance.Shared.Models.Stateless;
namespace View_by_Distance.Instance.Models; namespace View_by_Distance.Instance.Models;

View File

@ -83,8 +83,8 @@
"MaxItemsInDistanceCollection": 50, "MaxItemsInDistanceCollection": 50,
"ModelDirectory": "C:/GitHub/dlib-models", "ModelDirectory": "C:/GitHub/dlib-models",
"ModelName": "Hog", "ModelName": "Hog",
"NumberOfJitters": 1, "NumberOfJitters": 0,
"NumberOfTimesToUpsample": 1, "NumberOfTimesToUpsample": 0,
"OutputExtension": ".jpg", "OutputExtension": ".jpg",
"OutputQuality": 95, "OutputQuality": 95,
"OverrideForFaceImages": false, "OverrideForFaceImages": false,
@ -147,6 +147,7 @@
"256 x 256" "256 x 256"
], ],
"SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [], "SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [],
"SaveShortcutsForOutputResolutions": [],
"ValidImageFormatExtensions": [ "ValidImageFormatExtensions": [
".bmp", ".bmp",
".BMP", ".BMP",

View File

@ -83,8 +83,8 @@
"MaxItemsInDistanceCollection": 50, "MaxItemsInDistanceCollection": 50,
"ModelDirectory": "L:/GitHub/dlib-models", "ModelDirectory": "L:/GitHub/dlib-models",
"ModelName": "Hog", "ModelName": "Hog",
"NumberOfJitters": 1, "NumberOfJitters": 0,
"NumberOfTimesToUpsample": 1, "NumberOfTimesToUpsample": 0,
"OutputExtension": ".jpg", "OutputExtension": ".jpg",
"OutputQuality": 95, "OutputQuality": 95,
"OverrideForFaceImages": false, "OverrideForFaceImages": false,
@ -139,6 +139,9 @@
"SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [ "SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [
"1920 x 1080" "1920 x 1080"
], ],
"SaveShortcutsForOutputResolutions": [
"1920 x 1080"
],
"ValidImageFormatExtensions": [ "ValidImageFormatExtensions": [
".bmp", ".bmp",
".BMP", ".BMP",

View File

@ -83,8 +83,8 @@
"MaxItemsInDistanceCollection": 50, "MaxItemsInDistanceCollection": 50,
"ModelDirectory": "C:/GitHub/dlib-models", "ModelDirectory": "C:/GitHub/dlib-models",
"ModelName": "Hog", "ModelName": "Hog",
"NumberOfJitters": 1, "NumberOfJitters": 0,
"NumberOfTimesToUpsample": 1, "NumberOfTimesToUpsample": 0,
"OutputExtension": ".jpg", "OutputExtension": ".jpg",
"OutputQuality": 95, "OutputQuality": 95,
"OverrideForFaceImages": false, "OverrideForFaceImages": false,
@ -148,6 +148,9 @@
"SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [ "SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [
"1920 x 1080" "1920 x 1080"
], ],
"SaveShortcutsForOutputResolutions": [
"1920 x 1080"
],
"ValidImageFormatExtensions": [ "ValidImageFormatExtensions": [
".bmp", ".bmp",
".BMP", ".BMP",

View File

@ -25,12 +25,14 @@ public class MapLogic
private readonly int _MaxDegreeOfParallelism; private readonly int _MaxDegreeOfParallelism;
private readonly Configuration? _Configuration; private readonly Configuration? _Configuration;
private readonly string _EDistanceContentTicksDirectory; private readonly string _EDistanceContentTicksDirectory;
private readonly Shared.Models.Properties.IPropertyConfiguration _PropertyConfiguration;
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, long ticks, PersonContainer[] personContainers, string a2PeopleSingletonDirectory, string eDistanceContentDirectory, Mapping[] mappingCollection, Shared.Models.Methods.IMapLogicSupport? faceDistance) public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, long ticks, PersonContainer[] personContainers, string a2PeopleSingletonDirectory, string eDistanceContentDirectory, Mapping[] mappingCollection, Shared.Models.Methods.IMapLogicSupport? faceDistance)
{ {
_Ticks = ticks; _Ticks = ticks;
_Configuration = configuration; _Configuration = configuration;
_Log = Serilog.Log.ForContext<MapLogic>(); _Log = Serilog.Log.ForContext<MapLogic>();
_PropertyConfiguration = propertyConfiguration;
_MaxDegreeOfParallelism = maxDegreeOfParallelism; _MaxDegreeOfParallelism = maxDegreeOfParallelism;
if (_Log is null) if (_Log is null)
{ } { }
@ -704,47 +706,82 @@ public class MapLogic
SaveContainers(totalNotMapped, updated, saveContainers); SaveContainers(totalNotMapped, updated, saveContainers);
} }
private (string, PersonBirthday?) GetPersonBirthday(string windowsShortcutPath)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
PersonBirthday? personBirthday = null;
string personKeyFormatted = string.Empty;
string[] directoryNames = IPath.GetDirectoryNames(windowsShortcutPath);
foreach (string directoryName in directoryNames)
{
personBirthday = IPersonBirthday.GetPersonBirthday(_Configuration.PersonBirthdayFormat, directoryName);
if (personBirthday is not null)
{
personKeyFormatted = directoryName;
break;
}
}
return new(personKeyFormatted, personBirthday);
}
private List<(string, PersonContainer)> GetPersonContainers(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers) private List<(string, PersonContainer)> GetPersonContainers(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers)
{ {
if (_Configuration is null) if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration)); throw new NullReferenceException(nameof(_Configuration));
List<(string, PersonContainer)> results = new(); List<(string, PersonContainer)> results = new();
string[] files; string[] files;
long personKey;
const int zero = 0; const int zero = 0;
string[] directories; string[] directories;
string checkDirectory; string checkDirectory;
string[] checkDirectories;
string personKeyFormatted; string personKeyFormatted;
string displayDirectoryName; PersonContainer[] matches;
PersonContainer[] collection;
PersonBirthday? personBirthday; PersonBirthday? personBirthday;
string fileNameWithoutExtension;
WindowsShortcut windowsShortcut; WindowsShortcut windowsShortcut;
List<(long, string)> collection = new();
foreach (string directoryName in jLinks) foreach (string directoryName in jLinks)
{ {
checkDirectory = Path.Combine(a2PeopleSingletonDirectory, directoryName); checkDirectory = Path.Combine(a2PeopleSingletonDirectory, directoryName);
if (!Directory.Exists(checkDirectory)) if (!Directory.Exists(checkDirectory))
continue; continue;
checkDirectories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly);
files = Directory.GetFiles(checkDirectory, "*.lnk", SearchOption.TopDirectoryOnly); files = Directory.GetFiles(checkDirectory, "*.lnk", SearchOption.TopDirectoryOnly);
foreach (string file in files) foreach (string file in files)
{ {
collection.Clear();
windowsShortcut = WindowsShortcut.Load(file); windowsShortcut = WindowsShortcut.Load(file);
if (windowsShortcut.Path is null || !Directory.Exists(windowsShortcut.Path)) fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file);
if (windowsShortcut.Path is null)
continue; continue;
directories = Directory.GetDirectories(windowsShortcut.Path, "*", SearchOption.TopDirectoryOnly); if (!Directory.Exists(windowsShortcut.Path) && files.Length != checkDirectories.Length)
foreach (string directory in directories) throw new NotSupportedException(fileNameWithoutExtension);
(personKeyFormatted, personBirthday) = GetPersonBirthday(windowsShortcut.Path);
if (personBirthday is not null)
collection.Add(new(personBirthday.Value.Ticks, Path.Combine(checkDirectory, personKeyFormatted, fileNameWithoutExtension)));
else
{ {
personKeyFormatted = Path.GetFileName(directory); directories = Directory.GetDirectories(windowsShortcut.Path, "*", SearchOption.TopDirectoryOnly);
personBirthday = IPersonBirthday.GetPersonBirthday(_Configuration.PersonBirthdayFormat, personKeyFormatted); foreach (string directory in directories)
if (personBirthday is null) {
continue; personKeyFormatted = Path.GetFileName(directory);
personKey = personBirthday.Value.Ticks; personBirthday = IPersonBirthday.GetPersonBirthday(_Configuration.PersonBirthdayFormat, personKeyFormatted);
collection = (from l in personContainers where l.Key == personKey && l.ApproximateYears.HasValue select l).ToArray(); if (personBirthday is null)
if (!collection.Any()) continue;
continue; collection.Add(new(personBirthday.Value.Ticks, Path.Combine(checkDirectory, personKeyFormatted, fileNameWithoutExtension)));
displayDirectoryName = Path.Combine(checkDirectory, personKeyFormatted, Path.GetFileNameWithoutExtension(file)); }
}
if (!collection.Any())
throw new NotSupportedException(fileNameWithoutExtension);
foreach ((long personKey, string displayDirectoryName) in collection)
{
matches = (from l in personContainers where l.Key == personKey && l.ApproximateYears.HasValue select l).ToArray();
if (!matches.Any())
throw new NotSupportedException(fileNameWithoutExtension);
if (!Directory.Exists(displayDirectoryName)) if (!Directory.Exists(displayDirectoryName))
_ = Directory.CreateDirectory(displayDirectoryName); _ = Directory.CreateDirectory(displayDirectoryName);
results.Add(new(personKeyFormatted, collection[zero])); results.Add(new(personKeyFormatted, matches[zero]));
} }
} }
} }
@ -759,7 +796,7 @@ public class MapLogic
return results; return results;
} }
private (int, FileHolder, int, string, string, string, string)[] GetCollection(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers, Mapping[] mappingCollection) private (int, FileHolder, int, string, string, string, string)[] GetCollectionForSaveResizedImagesByPersonKeyFormatted(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers, Mapping[] mappingCollection)
{ {
if (_Configuration is null) if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration)); throw new NullReferenceException(nameof(_Configuration));
@ -805,7 +842,7 @@ public class MapLogic
SaveContainer? saveContainer; SaveContainer? saveContainer;
List<int> distinctCollection = new(); List<int> distinctCollection = new();
List<SaveContainer> saveContainers = new(); List<SaveContainer> saveContainers = new();
(int, FileHolder, int, string, string, string, string)[] collection = GetCollection(jLinks, a2PeopleSingletonDirectory, personContainers, mappingCollection); (int, FileHolder, int, string, string, string, string)[] collection = GetCollectionForSaveResizedImagesByPersonKeyFormatted(jLinks, a2PeopleSingletonDirectory, personContainers, mappingCollection);
foreach ((int id, FileHolder resizedFileHolder, int approximateYears, string personKeyFormatted, string directory, string personDirectory, string checkFile) in collection) foreach ((int id, FileHolder resizedFileHolder, int approximateYears, string personKeyFormatted, string directory, string personDirectory, string checkFile) in collection)
{ {
if (distinctCollection.Contains(id)) if (distinctCollection.Contains(id))
@ -819,4 +856,89 @@ public class MapLogic
SaveContainers(totalNotMapped, null, saveContainers); SaveContainers(totalNotMapped, null, saveContainers);
} }
private List<(string, string, string)> GetCollectionForSaveShortcuts(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers, List<Item> filteredItems, Mapping[] mappingCollection)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
string fileName;
string directory;
string? directoryName;
string personDirectory;
string personKeyFormatted;
List<(string, string Directory, string)> collection = new();
string[] personKeyFormattedCollection = GetPersonKeyFormattedCollection(jLinks, a2PeopleSingletonDirectory, personContainers);
foreach (Item item in filteredItems)
{
directoryName = Path.GetDirectoryName(item.RelativePath);
if (directoryName is null)
throw new NotSupportedException();
if (item.ResizedFileHolder?.DirectoryName is null || !item.ResizedFileHolder.Exists)
continue;
directory = Path.Combine(item.ResizedFileHolder.DirectoryName, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", _PropertyConfiguration.ResultAllInOne);
personDirectory = Path.Combine(directory, "No Faces");
fileName = Path.Combine(personDirectory, $"{item.ResizedFileHolder.Name}.lnk");
collection.Add(new(item.ResizedFileHolder.FullName, personDirectory, fileName));
}
foreach (Mapping mapping in mappingCollection)
{
directoryName = Path.GetDirectoryName(mapping.MappingFromItem.RelativePath);
if (directoryName is null)
throw new NotSupportedException();
if (mapping.MappingFromItem.ResizedFileHolder.DirectoryName is null || !mapping.MappingFromItem.ResizedFileHolder.Exists)
continue;
if (mapping.By is null or IMapLogic.Sorting || mapping.MappingFromPerson?.ApproximateYears is null)
{
directory = Path.Combine(mapping.MappingFromItem.ResizedFileHolder.DirectoryName, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", _PropertyConfiguration.ResultAllInOne);
personDirectory = Path.Combine(directory, "Unknown");
fileName = Path.Combine(personDirectory, $"{mapping.MappingFromItem.ResizedFileHolder.Name}.lnk");
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, fileName));
}
else
{
if (string.IsNullOrEmpty(mapping.MappingFromPerson.SegmentB))
throw new NotSupportedException();
if (string.IsNullOrEmpty(mapping.MappingFromPerson.DisplayDirectoryName))
throw new NotSupportedException();
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
if (!personKeyFormattedCollection.Contains(personKeyFormatted))
continue;
directory = Path.Combine(mapping.MappingFromItem.ResizedFileHolder.DirectoryName, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", personKeyFormatted);
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName);
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ResizedFileHolder.Name}.lnk");
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, fileName));
}
}
return collection;
}
public void SaveShortcuts(string a2PeopleSingletonDirectory, PersonContainer[] personContainers, List<Item> filteredItems, Mapping[] mappingCollection)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
WindowsShortcut windowsShortcut;
string[] jLinks = new string[] { "All" };
List<(string, string Directory, string)> collection = GetCollectionForSaveShortcuts(jLinks, a2PeopleSingletonDirectory, personContainers, filteredItems, mappingCollection);
string[] directories = (from l in collection select l.Directory).Distinct().ToArray();
foreach (string directory in directories)
{
if (string.IsNullOrEmpty(directory))
continue;
if (!Directory.Exists(directory))
_ = Directory.CreateDirectory(directory);
}
foreach ((string fullName, string directory, string fileName) in collection)
{
if (File.Exists(fileName))
continue;
try
{
windowsShortcut = new() { Path = fullName };
windowsShortcut.Save(fileName);
windowsShortcut.Dispose();
}
catch (Exception)
{ }
}
}
} }

View File

@ -6,17 +6,14 @@ namespace View_by_Distance.Not.Copy.Copy.Models.Binder;
public class Configuration public class Configuration
{ {
#nullable disable
[Display(Name = "Compare Source"), Required] public string CompareSource { get; set; } [Display(Name = "Compare Source"), Required] public string CompareSource { get; set; }
[Display(Name = "Empty Destination"), Required] public string EmptyDestination { get; set; } [Display(Name = "Empty Destination"), Required] public string EmptyDestination { get; set; }
[Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } [Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; }
[Display(Name = "Selected Source"), Required] public string SelectedSource { get; set; } [Display(Name = "Selected Source"), Required] public string SelectedSource { get; set; }
public Configuration() #nullable restore
{
CompareSource = string.Empty;
EmptyDestination = string.Empty;
SelectedSource = string.Empty;
}
public override string ToString() public override string ToString()
{ {

View File

@ -6,10 +6,12 @@ namespace View_by_Distance.PrepareForOld.Models.Binder;
public class Configuration public class Configuration
{ {
#nullable disable
[Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } [Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; }
[Display(Name = "Spelling"), Required] public string[] Spelling { get; set; } [Display(Name = "Spelling"), Required] public string[] Spelling { get; set; }
public Configuration() => Spelling = Array.Empty<string>(); #nullable restore
public override string ToString() public override string ToString()
{ {

View File

@ -13,10 +13,10 @@ public interface IPersonBirthday
// ... // ...
string TestStatic_GetDateTime(string personKey) => string TestStatic_GetDateTime(string personKeyFormatted) =>
GetDateTime(personKey); GetDateTime(personKeyFormatted);
static string GetDateTime(string personKey) => static string GetDateTime(string personKeyFormatted) =>
personKey.Length < 5 || !personKey.Contains('#') ? personKey : personKey[..2] == "19" ? $"1600{personKey[4..]}" : $"1700{personKey[4..]}"; personKeyFormatted.Length < 5 || !personKeyFormatted.Contains('#') ? personKeyFormatted : personKeyFormatted[..2] == "19" ? $"1600{personKeyFormatted[4..]}" : $"1700{personKeyFormatted[4..]}";
double? TestStatic_GetAge(Models.PersonBirthday birthday) => double? TestStatic_GetAge(Models.PersonBirthday birthday) =>
GetAge(birthday); GetAge(birthday);
@ -68,10 +68,10 @@ public interface IPersonBirthday
static TimeSpan? GetTimeSpan(DateTime minimumDateTime, Models.PersonBirthday personBirthday) => static TimeSpan? GetTimeSpan(DateTime minimumDateTime, Models.PersonBirthday personBirthday) =>
PersonBirthday.GetTimeSpan(minimumDateTime, isWrongYear: false, personBirthday); PersonBirthday.GetTimeSpan(minimumDateTime, isWrongYear: false, personBirthday);
Models.PersonBirthday? TestStatic_GetPersonBirthday(string personBirthdayFormat, string personKey) => Models.PersonBirthday? TestStatic_GetPersonBirthday(string personBirthdayFormat, string personKeyFormatted) =>
GetPersonBirthday(personBirthdayFormat, personKey); GetPersonBirthday(personBirthdayFormat, personKeyFormatted);
static Models.PersonBirthday? GetPersonBirthday(string personBirthdayFormat, string personKey) => static Models.PersonBirthday? GetPersonBirthday(string personBirthdayFormat, string personKeyFormatted) =>
PersonBirthday.GetPersonBirthday(personBirthdayFormat, personKey); PersonBirthday.GetPersonBirthday(personBirthdayFormat, personKeyFormatted);
bool TestStatic_DoesBirthDateExits(Properties.IStorage storage, Models.PersonBirthday personBirthday) => bool TestStatic_DoesBirthDateExits(Properties.IStorage storage, Models.PersonBirthday personBirthday) =>
DoesBirthDateExits(storage, personBirthday); DoesBirthDateExits(storage, personBirthday);
@ -103,9 +103,9 @@ public interface IPersonBirthday
internal static bool DoesBirthDateExits(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday personBirthday) => internal static bool DoesBirthDateExits(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday personBirthday) =>
File.Exists(GetFileFullName(storage, personBirthdayFormat, personBirthday)); File.Exists(GetFileFullName(storage, personBirthdayFormat, personBirthday));
DateTime? TestStatic_GetDateTime(string personBirthdayFormat, string personKey) => DateTime? TestStatic_GetDateTime(string personBirthdayFormat, string personKeyFormatted) =>
GetDateTime(personBirthdayFormat, personKey); GetDateTime(personBirthdayFormat, personKeyFormatted);
static DateTime? GetDateTime(string personBirthdayFormat, string personKey) => static DateTime? GetDateTime(string personBirthdayFormat, string personKeyFormatted) =>
DateTime.TryParseExact(GetDateTime(personKey), personBirthdayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime) ? dateTime : null; DateTime.TryParseExact(GetDateTime(personKeyFormatted), personBirthdayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime) ? dateTime : null;
} }

View File

@ -7,14 +7,20 @@ internal abstract class PersonBirthday
// ... // ...
internal static Models.PersonBirthday? GetPersonBirthday(string personBirthdayFormat, string personKey) internal static Models.PersonBirthday? GetPersonBirthday(string personBirthdayFormat, string personKeyFormatted)
{ {
Models.PersonBirthday? result; Models.PersonBirthday? result;
DateTime? dateTime = IPersonBirthday.GetDateTime(personBirthdayFormat, personKey); DateTime? dateTime;
if (dateTime is null) if (personKeyFormatted.Length != personBirthdayFormat.Length)
result = null; result = null;
else else
result = new(dateTime.Value); {
dateTime = IPersonBirthday.GetDateTime(personBirthdayFormat, personKeyFormatted);
if (dateTime is null)
result = null;
else
result = new(dateTime.Value);
}
return result; return result;
} }

View File

@ -48,7 +48,8 @@ public class Configuration
[Display(Name = "Reverse"), Required] public bool? Reverse { get; set; } [Display(Name = "Reverse"), Required] public bool? Reverse { get; set; }
[Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; } [Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; } [Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; } [Display(Name = "Save Resized Images by Person Key Formatted"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; }
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; } [Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; }
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } [Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; }
[Display(Name = "Test Distance Results"), Required] public bool? TestDistanceResults { get; set; } [Display(Name = "Test Distance Results"), Required] public bool? TestDistanceResults { get; set; }
@ -83,6 +84,10 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); throw new NullReferenceException(nameof(configuration.IgnoreExtensions));
if (configuration.IgnoreRelativePaths is null) if (configuration.IgnoreRelativePaths is null)
throw new NullReferenceException(nameof(configuration.IgnoreRelativePaths)); throw new NullReferenceException(nameof(configuration.IgnoreRelativePaths));
if (configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions is null)
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions = Array.Empty<string>();
if (configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions is null)
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>();
if (configuration.LoadOrCreateThenSaveIndex is null) if (configuration.LoadOrCreateThenSaveIndex is null)
throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveIndex)); throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveIndex));
if (configuration.LocationConfidenceFactor is null) if (configuration.LocationConfidenceFactor is null)
@ -120,25 +125,21 @@ public class Configuration
if (configuration.Reverse is null) if (configuration.Reverse is null)
throw new NullReferenceException(nameof(configuration.Reverse)); throw new NullReferenceException(nameof(configuration.Reverse));
if (configuration.SaveFaceLandmarkForOutputResolutions is null) if (configuration.SaveFaceLandmarkForOutputResolutions is null)
throw new NullReferenceException(nameof(configuration.SaveFaceLandmarkForOutputResolutions)); configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>();
if (configuration.SaveFullYearOfRandomFiles is null) if (configuration.SaveFullYearOfRandomFiles is null)
throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles)); throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedSubfiles is null) if (configuration.SaveResizedSubfiles is null)
throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles)); throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
if (configuration.SaveShortcutsForOutputResolutions is null)
configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>();
if (configuration.SkipSearch is null) if (configuration.SkipSearch is null)
throw new NullReferenceException(nameof(configuration.SkipSearch)); throw new NullReferenceException(nameof(configuration.SkipSearch));
if (configuration.TestDistanceResults is null) if (configuration.TestDistanceResults is null)
throw new NullReferenceException(nameof(configuration.TestDistanceResults)); throw new NullReferenceException(nameof(configuration.TestDistanceResults));
if (configuration.ValidResolutions is null) if (configuration.ValidResolutions is null)
throw new NullReferenceException(nameof(configuration.ValidResolutions)); throw new NullReferenceException(nameof(configuration.ValidResolutions));
if (configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions is null)
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions = Array.Empty<string>();
if (configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions is null)
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>();
if (configuration.SaveFaceLandmarkForOutputResolutions is null)
configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
result = new(configuration.PropertyConfiguration, result = new(configuration.PropertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckDFaceAndUpWriteDates.Value,
configuration.CheckJsonForDistanceResults.Value, configuration.CheckJsonForDistanceResults.Value,
@ -178,6 +179,7 @@ public class Configuration
configuration.SaveFaceLandmarkForOutputResolutions, configuration.SaveFaceLandmarkForOutputResolutions,
configuration.SaveFullYearOfRandomFiles.Value, configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions, configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions,
configuration.SaveShortcutsForOutputResolutions,
configuration.SaveResizedSubfiles.Value, configuration.SaveResizedSubfiles.Value,
configuration.SkipSearch.Value, configuration.SkipSearch.Value,
configuration.TestDistanceResults.Value, configuration.TestDistanceResults.Value,

View File

@ -47,6 +47,7 @@ public class Configuration
public string[] SaveFaceLandmarkForOutputResolutions { init; get; } public string[] SaveFaceLandmarkForOutputResolutions { init; get; }
public bool SaveFullYearOfRandomFiles { init; get; } public bool SaveFullYearOfRandomFiles { init; get; }
public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; } public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; }
public string[] SaveShortcutsForOutputResolutions { init; get; }
public bool SaveResizedSubfiles { init; get; } public bool SaveResizedSubfiles { init; get; }
public bool SkipSearch { init; get; } public bool SkipSearch { init; get; }
public bool TestDistanceResults { init; get; } public bool TestDistanceResults { init; get; }
@ -92,6 +93,7 @@ public class Configuration
string[] saveFaceLandmarkForOutputResolutions, string[] saveFaceLandmarkForOutputResolutions,
bool saveFullYearOfRandomFiles, bool saveFullYearOfRandomFiles,
string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions, string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions,
string[] saveShortcutsForOutputResolutions,
bool saveResizedSubfiles, bool saveResizedSubfiles,
bool skipSearch, bool skipSearch,
bool testDistanceResults, bool testDistanceResults,
@ -136,6 +138,7 @@ public class Configuration
SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions; SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions;
SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles; SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles;
SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions; SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SaveResizedSubfiles = saveResizedSubfiles; SaveResizedSubfiles = saveResizedSubfiles;
SkipSearch = skipSearch; SkipSearch = skipSearch;
TestDistanceResults = testDistanceResults; TestDistanceResults = testDistanceResults;

View File

@ -67,7 +67,8 @@ public class Configuration
[Display(Name = "Reverse"), Required] public bool? Reverse { get; set; } [Display(Name = "Reverse"), Required] public bool? Reverse { get; set; }
[Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; } [Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; } [Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; } [Display(Name = "Save Resized Images by Person Key Formatted"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; }
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; } [Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; }
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } [Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; }
[Display(Name = "Sorting Days Delta Tolerance"), Required] public int? SortingDaysDeltaTolerance { get; set; } [Display(Name = "Sorting Days Delta Tolerance"), Required] public int? SortingDaysDeltaTolerance { get; set; }
@ -136,10 +137,10 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.LocationFactor)); throw new NullReferenceException(nameof(configuration.LocationFactor));
if (configuration.MappingDefaultName is null) if (configuration.MappingDefaultName is null)
throw new NullReferenceException(nameof(configuration.MappingDefaultName)); throw new NullReferenceException(nameof(configuration.MappingDefaultName));
if (configuration.MappingSaveNotMapped is null)
throw new NullReferenceException(nameof(configuration.MappingSaveNotMapped));
if (configuration.MappingSaveMapped is null) if (configuration.MappingSaveMapped is null)
throw new NullReferenceException(nameof(configuration.MappingSaveMapped)); throw new NullReferenceException(nameof(configuration.MappingSaveMapped));
if (configuration.MappingSaveNotMapped is null)
throw new NullReferenceException(nameof(configuration.MappingSaveNotMapped));
if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null) if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null)
throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping)); throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping));
if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping is null) if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping is null)
@ -186,14 +187,14 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.Reverse)); throw new NullReferenceException(nameof(configuration.Reverse));
if (configuration.SaveFaceLandmarkForOutputResolutions is null) if (configuration.SaveFaceLandmarkForOutputResolutions is null)
configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>(); configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>();
if (configuration.SaveFaceLandmarkForOutputResolutions is null)
throw new NullReferenceException(nameof(configuration.SaveFaceLandmarkForOutputResolutions));
if (configuration.SaveFullYearOfRandomFiles is null) if (configuration.SaveFullYearOfRandomFiles is null)
throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles)); throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null) if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>(); configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedSubfiles is null) if (configuration.SaveResizedSubfiles is null)
throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles)); throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
if (configuration.SaveShortcutsForOutputResolutions is null)
configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>();
if (configuration.SkipSearch is null) if (configuration.SkipSearch is null)
throw new NullReferenceException(nameof(configuration.SkipSearch)); throw new NullReferenceException(nameof(configuration.SkipSearch));
if (configuration.SortingDaysDeltaTolerance is null) if (configuration.SortingDaysDeltaTolerance is null)
@ -208,14 +209,6 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.TestDistanceResults)); throw new NullReferenceException(nameof(configuration.TestDistanceResults));
if (configuration.ValidResolutions is null) if (configuration.ValidResolutions is null)
throw new NullReferenceException(nameof(configuration.ValidResolutions)); throw new NullReferenceException(nameof(configuration.ValidResolutions));
if (configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions is null)
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions = Array.Empty<string>();
if (configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions is null)
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>();
if (configuration.SaveFaceLandmarkForOutputResolutions is null)
configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
_ = DateTime.Now.AddDays(-configuration.SortingDaysDeltaTolerance.Value); _ = DateTime.Now.AddDays(-configuration.SortingDaysDeltaTolerance.Value);
result = new(configuration.PropertyConfiguration, result = new(configuration.PropertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckDFaceAndUpWriteDates.Value,
@ -275,6 +268,7 @@ public class Configuration
configuration.SaveFaceLandmarkForOutputResolutions, configuration.SaveFaceLandmarkForOutputResolutions,
configuration.SaveFullYearOfRandomFiles.Value, configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions, configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions,
configuration.SaveShortcutsForOutputResolutions,
configuration.SaveResizedSubfiles.Value, configuration.SaveResizedSubfiles.Value,
configuration.SkipSearch.Value, configuration.SkipSearch.Value,
configuration.SortingDaysDeltaTolerance.Value, configuration.SortingDaysDeltaTolerance.Value,

View File

@ -66,6 +66,7 @@ public class Configuration
public string[] SaveFaceLandmarkForOutputResolutions { init; get; } public string[] SaveFaceLandmarkForOutputResolutions { init; get; }
public bool SaveFullYearOfRandomFiles { init; get; } public bool SaveFullYearOfRandomFiles { init; get; }
public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; } public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; }
public string[] SaveShortcutsForOutputResolutions { init; get; }
public bool SaveResizedSubfiles { init; get; } public bool SaveResizedSubfiles { init; get; }
public bool SkipSearch { init; get; } public bool SkipSearch { init; get; }
public int SortingDaysDeltaTolerance { init; get; } public int SortingDaysDeltaTolerance { init; get; }
@ -134,6 +135,7 @@ public class Configuration
string[] saveFaceLandmarkForOutputResolutions, string[] saveFaceLandmarkForOutputResolutions,
bool saveFullYearOfRandomFiles, bool saveFullYearOfRandomFiles,
string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions, string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions,
string[] saveShortcutsForOutputResolutions,
bool saveResizedSubfiles, bool saveResizedSubfiles,
bool skipSearch, bool skipSearch,
int sortingDaysDeltaTolerance, int sortingDaysDeltaTolerance,
@ -201,6 +203,7 @@ public class Configuration
SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions; SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions;
SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles; SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles;
SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions; SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SaveResizedSubfiles = saveResizedSubfiles; SaveResizedSubfiles = saveResizedSubfiles;
SkipSearch = skipSearch; SkipSearch = skipSearch;
SortingDaysDeltaTolerance = sortingDaysDeltaTolerance; SortingDaysDeltaTolerance = sortingDaysDeltaTolerance;