Shortcut to reference

This commit is contained in:
Mike Phares 2022-10-01 07:12:13 -07:00
parent b81d9e9862
commit 5d257b0bec
3 changed files with 62 additions and 40 deletions

View File

@ -908,6 +908,22 @@ public partial class DlibDotNet
return results; return results;
} }
internal static Dictionary<int, Dictionary<int, Mapping>> GetIdToNormalizedPixelPercentageToFace(Mapping[] mappingCollection)
{
Dictionary<int, Dictionary<int, Mapping>> results = new();
Dictionary<int, Mapping> keyValuePairs;
foreach (Mapping mapping in mappingCollection)
{
if (!results.ContainsKey(mapping.MappingFromItem.Id))
results.Add(mapping.MappingFromItem.Id, new());
keyValuePairs = results[mapping.MappingFromItem.Id];
if (keyValuePairs.ContainsKey(mapping.MappingFromLocation.NormalizedPixelPercentage))
throw new NotSupportedException();
keyValuePairs.Add(mapping.MappingFromLocation.NormalizedPixelPercentage, mapping);
}
return results;
}
private void DistanceThenMapLogic(string argZero, long ticks, PersonContainer[] personContainers, Container[] containers, string a2PeopleSingletonDirectory, string dResultsFullGroupDirectory, string d2FacePartsContentDirectory, string eDistanceContentDirectory, string outputResolution) private void DistanceThenMapLogic(string argZero, long ticks, PersonContainer[] personContainers, Container[] containers, string a2PeopleSingletonDirectory, string dResultsFullGroupDirectory, string d2FacePartsContentDirectory, string eDistanceContentDirectory, string outputResolution)
{ {
int? useFiltersCounter = null; int? useFiltersCounter = null;
@ -925,10 +941,11 @@ public partial class DlibDotNet
eDistanceContentDirectory, eDistanceContentDirectory,
mappingCollection, mappingCollection,
_Distance); _Distance);
mapLogic.CopyManualFiles(dFacesContentDirectory, mappingCollection); Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping = GetIdToNormalizedPixelPercentageToFace(mappingCollection);
mapLogic.CopyManualFiles(dFacesContentDirectory, idToNormalizedPixelPercentageToMapping);
int totalNotMapped = mapLogic.AddToMapping(mappingCollection); int totalNotMapped = mapLogic.AddToMapping(mappingCollection);
if (_Configuration.MappingSaveMapped) if (_Configuration.MappingSaveMapped)
mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, totalNotMapped); mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, totalNotMapped);
E_Distance.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces); E_Distance.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces);
sortingContainers = _Distance.SetFaceMappingSortingCollectionThenGetSortingContainers(_AppSettings.MaxDegreeOfParallelism, ticks, mapLogic, distinctFilteredFaces, useFiltersCounter); sortingContainers = _Distance.SetFaceMappingSortingCollectionThenGetSortingContainers(_AppSettings.MaxDegreeOfParallelism, ticks, mapLogic, distinctFilteredFaces, useFiltersCounter);
if (!sortingContainers.Any()) if (!sortingContainers.Any())
@ -942,7 +959,7 @@ public partial class DlibDotNet
} }
E_Distance.SaveFaceDistances(_Configuration.PropertyConfiguration, sortingContainers); E_Distance.SaveFaceDistances(_Configuration.PropertyConfiguration, sortingContainers);
if (totalNotMapped > 0) if (totalNotMapped > 0)
mapLogic.ForceSingleImageThenSaveSorting(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, sortingContainers, useFiltersCounter, totalNotMapped); mapLogic.ForceSingleImageThenSaveSorting(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, sortingContainers, useFiltersCounter, totalNotMapped);
if (_Configuration.MappingSaveNotMapped) if (_Configuration.MappingSaveNotMapped)
mapLogic.SaveNotMappedTicks(); mapLogic.SaveNotMappedTicks();
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution)) if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))

View File

@ -200,9 +200,7 @@ public class MapLogic
} }
foreach (SaveContainer saveContainer in saveContainers) foreach (SaveContainer saveContainer in saveContainers)
{ {
if (string.IsNullOrEmpty(saveContainer.Directory) || string.IsNullOrEmpty(saveContainer.CheckFile) || saveContainer.ResizedFileHolder is null) if (string.IsNullOrEmpty(saveContainer.ShortcutFile) || saveContainer.ResizedFileHolder is null || !saveContainer.ResizedFileHolder.Exists)
continue;
if (string.IsNullOrEmpty(saveContainer.ShortcutFile) || !saveContainer.ResizedFileHolder.Exists)
continue; continue;
try try
{ {
@ -215,14 +213,14 @@ public class MapLogic
} }
} }
public void SaveMapped(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, int totalNotMapped) public void SaveMapped(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping, int totalNotMapped)
{ {
if (_Configuration is null) if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration)); throw new NullReferenceException(nameof(_Configuration));
int? updated = null; int? updated = null;
int? useFiltersCounter = null; int? useFiltersCounter = null;
string mappingDirectory = Path.Combine(_EDistanceContentTicksDirectory, nameof(Stateless.IMapLogic.Mapping)); string mappingDirectory = Path.Combine(_EDistanceContentTicksDirectory, nameof(Stateless.IMapLogic.Mapping));
List<SaveContainer> saveContainers = Stateless.MapLogic.GetSaveContainers(_Configuration, _EDistanceContentTicksDirectory, dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, useFiltersCounter, saveMapped: true); List<SaveContainer> saveContainers = Stateless.MapLogic.GetSaveContainers(_Configuration, _EDistanceContentTicksDirectory, dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, useFiltersCounter, saveMapped: true);
SaveContainers(totalNotMapped, updated, saveContainers); SaveContainers(totalNotMapped, updated, saveContainers);
if (!string.IsNullOrEmpty(_EDistanceContentTicksDirectory) && Directory.Exists(mappingDirectory)) if (!string.IsNullOrEmpty(_EDistanceContentTicksDirectory) && Directory.Exists(mappingDirectory))
Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory); Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory);
@ -404,7 +402,7 @@ public class MapLogic
} }
} }
public void ForceSingleImageThenSaveSorting(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, SortingContainer[] sortingContainers, int? useFiltersCounter, int totalNotMapped) public void ForceSingleImageThenSaveSorting(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping, SortingContainer[] sortingContainers, int? useFiltersCounter, int totalNotMapped)
{ {
if (_Configuration is null) if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration)); throw new NullReferenceException(nameof(_Configuration));
@ -414,19 +412,19 @@ public class MapLogic
{ {
updated = 0; updated = 0;
ForceSingleImage(mappingCollection); ForceSingleImage(mappingCollection);
saveContainers = Stateless.MapLogic.GetSaveContainers(_Configuration, _EDistanceContentTicksDirectory, dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, useFiltersCounter, saveMapped: false); saveContainers = Stateless.MapLogic.GetSaveContainers(_Configuration, _EDistanceContentTicksDirectory, dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, useFiltersCounter, saveMapped: false);
} }
else else
{ {
updated = UpdateFromSortingContainers(sortingContainers); updated = UpdateFromSortingContainers(sortingContainers);
if (useFiltersCounter is null && totalNotMapped - updated > 0) if (useFiltersCounter is null && totalNotMapped - updated > 0)
ForceSingleImage(mappingCollection); ForceSingleImage(mappingCollection);
saveContainers = Stateless.MapLogic.GetSaveContainers(_Configuration, _EDistanceContentTicksDirectory, dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, useFiltersCounter, saveMapped: false); saveContainers = Stateless.MapLogic.GetSaveContainers(_Configuration, _EDistanceContentTicksDirectory, dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, useFiltersCounter, saveMapped: false);
} }
SaveContainers(totalNotMapped, updated, saveContainers); SaveContainers(totalNotMapped, updated, saveContainers);
} }
public void CopyManualFiles(string dFacesContentDirectory, Mapping[] mappingCollection) public void CopyManualFiles(string dFacesContentDirectory, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping)
{ {
if (_Configuration is null) if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration)); throw new NullReferenceException(nameof(_Configuration));
@ -453,7 +451,6 @@ public class MapLogic
string by = nameof(Stateless.IMapLogic.ManualCopy); string by = nameof(Stateless.IMapLogic.ManualCopy);
Dictionary<int, Mapping>? normalizedPixelPercentageToMapping; Dictionary<int, Mapping>? normalizedPixelPercentageToMapping;
string successfull = $"_ {nameof(Stateless.IMapLogic.ManualCopy).Humanize(LetterCasing.Title)} Successfull"; string successfull = $"_ {nameof(Stateless.IMapLogic.ManualCopy).Humanize(LetterCasing.Title)} Successfull";
Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToFace = Stateless.MapLogic.GetKeyValuePairs(mappingCollection);
foreach (KeyValuePair<long, PersonContainer> keyValuePair in _PersonKeyToPersonContainer) foreach (KeyValuePair<long, PersonContainer> keyValuePair in _PersonKeyToPersonContainer)
{ {
if (keyValuePair.Value.Key is null || keyValuePair.Value.Birthdays is null || !keyValuePair.Value.Birthdays.Any()) if (keyValuePair.Value.Key is null || keyValuePair.Value.Birthdays is null || !keyValuePair.Value.Birthdays.Any())
@ -480,11 +477,11 @@ public class MapLogic
mappingSegmentB = Stateless.MapLogic.GetMappingSegmentB(_Ticks, personBirthday, keyValuePair.Value.ApproximateYears, fileInfo.CreationTime, isWrongYear: null); mappingSegmentB = Stateless.MapLogic.GetMappingSegmentB(_Ticks, personBirthday, keyValuePair.Value.ApproximateYears, fileInfo.CreationTime, isWrongYear: null);
directory = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, mappingSegmentB); directory = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, mappingSegmentB);
personDirectory = Path.Combine(directory, keyValuePair.Value.DisplayDirectoryName, "lnk"); personDirectory = Path.Combine(directory, keyValuePair.Value.DisplayDirectoryName, "lnk");
if (!idToNormalizedPixelPercentageToFace.TryGetValue(id.Value, out normalizedPixelPercentageToMapping)) if (!idToNormalizedPixelPercentageToMapping.TryGetValue(id.Value, out normalizedPixelPercentageToMapping))
continue; continue;
if (!normalizedPixelPercentageToMapping.ContainsKey(normalizedPixelPercentage.Value)) if (!normalizedPixelPercentageToMapping.ContainsKey(normalizedPixelPercentage.Value))
continue; continue;
mapping = idToNormalizedPixelPercentageToFace[id.Value][normalizedPixelPercentage.Value]; mapping = normalizedPixelPercentageToMapping[normalizedPixelPercentage.Value];
if (string.IsNullOrEmpty(personDisplayDirectory)) if (string.IsNullOrEmpty(personDisplayDirectory))
throw new NotSupportedException(); throw new NotSupportedException();
directoryName = Path.GetDirectoryName(mapping.MappingFromItem.RelativePath); directoryName = Path.GetDirectoryName(mapping.MappingFromItem.RelativePath);

View File

@ -654,28 +654,25 @@ internal abstract class MapLogic
return result; return result;
} }
internal static Dictionary<int, Dictionary<int, Mapping>> GetKeyValuePairs(Mapping[] mappingCollection) private static SaveContainer GetSaveContainer(string directory, SortingContainer sortingContainer, Mapping mapping)
{ {
Dictionary<int, Dictionary<int, Mapping>> results = new(); SaveContainer result;
Dictionary<int, Mapping> keyValuePairs; string checkFile = string.Empty;
foreach (Mapping mapping in mappingCollection) FileHolder? faceFileHolder = null;
{ FileHolder? facePartsFileHolder = null;
if (!results.ContainsKey(mapping.MappingFromItem.Id)) FileHolder? hiddenFaceFileHolder = null;
results.Add(mapping.MappingFromItem.Id, new()); string shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.lnk");
keyValuePairs = results[mapping.MappingFromItem.Id]; result = new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
if (keyValuePairs.ContainsKey(mapping.MappingFromLocation.NormalizedPixelPercentage)) return result;
throw new NotSupportedException();
keyValuePairs.Add(mapping.MappingFromLocation.NormalizedPixelPercentage, mapping);
}
return results;
} }
internal static List<SaveContainer> GetSaveContainers(Configuration configuration, string eDistanceContentTicksDirectory, string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, int? useFiltersCounter, bool saveMapped) internal static List<SaveContainer> GetSaveContainers(Configuration configuration, string eDistanceContentTicksDirectory, string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping, int? useFiltersCounter, bool saveMapped)
{ {
List<SaveContainer> results = new(); List<SaveContainer> results = new();
string by; string by;
string checkFile; string checkFile;
bool isByMapping; bool isByMapping;
bool isBySorting;
string directory; string directory;
string shortcutFile; string shortcutFile;
string facesDirectory; string facesDirectory;
@ -687,6 +684,7 @@ internal abstract class MapLogic
SaveContainer saveContainer; SaveContainer saveContainer;
FileHolder facePartsFileHolder; FileHolder facePartsFileHolder;
FileHolder hiddenFaceFileHolder; FileHolder hiddenFaceFileHolder;
Dictionary<int, Mapping>? normalizedPixelPercentageToMapping;
string forceSingleImageHumanized = nameof(IMapLogic.ForceSingleImage).Humanize(LetterCasing.Title); string forceSingleImageHumanized = nameof(IMapLogic.ForceSingleImage).Humanize(LetterCasing.Title);
foreach (Mapping mapping in mappingCollection) foreach (Mapping mapping in mappingCollection)
{ {
@ -700,25 +698,27 @@ internal abstract class MapLogic
if (mapping.MappingFromPerson.By is null) if (mapping.MappingFromPerson.By is null)
{ {
isByMapping = false; isByMapping = false;
isBySorting = false;
by = $"{nameof(IMapLogic.Mapping)}Null"; by = $"{nameof(IMapLogic.Mapping)}Null";
} }
else if (useFiltersCounter.HasValue && mapping.MappingFromPerson.By.Value == IMapLogic.Sorting)
{
isByMapping = false;
by = $"{nameof(IMapLogic.Sorting)} Modified Filters - {useFiltersCounter.Value}";
}
else else
{ {
isByMapping = mapping.MappingFromPerson.By == IMapLogic.Mapping; isByMapping = mapping.MappingFromPerson.By == IMapLogic.Mapping;
isBySorting = mapping.MappingFromPerson.By == IMapLogic.Sorting;
if (isByMapping && !saveMapped) if (isByMapping && !saveMapped)
continue; continue;
by = mapping.MappingFromPerson.By.Value switch if (isBySorting && useFiltersCounter.HasValue)
by = $"{nameof(IMapLogic.Sorting)} Modified Filters - {useFiltersCounter.Value}";
else
{ {
IMapLogic.Mapping => nameof(IMapLogic.Mapping), by = mapping.MappingFromPerson.By.Value switch
IMapLogic.Sorting => nameof(IMapLogic.Sorting), {
IMapLogic.ForceSingleImage => forceSingleImageHumanized, IMapLogic.Mapping => nameof(IMapLogic.Mapping),
_ => throw new NotImplementedException() IMapLogic.Sorting => nameof(IMapLogic.Sorting),
}; IMapLogic.ForceSingleImage => forceSingleImageHumanized,
_ => throw new NotImplementedException()
};
}
} }
personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday); personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
directory = Path.Combine(eDistanceContentTicksDirectory, by, personKeyFormatted, mapping.MappingFromPerson.SegmentB); directory = Path.Combine(eDistanceContentTicksDirectory, by, personKeyFormatted, mapping.MappingFromPerson.SegmentB);
@ -747,6 +747,14 @@ internal abstract class MapLogic
saveContainer = new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile); saveContainer = new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
} }
results.Add(saveContainer); results.Add(saveContainer);
if (!isBySorting || mapping.SortingContainer is null)
continue;
if (!idToNormalizedPixelPercentageToMapping.TryGetValue(mapping.SortingContainer.Sorting.Id, out normalizedPixelPercentageToMapping))
continue;
if (!normalizedPixelPercentageToMapping.ContainsKey(mapping.SortingContainer.Sorting.NormalizedPixelPercentage))
continue;
saveContainer = GetSaveContainer(directory, mapping.SortingContainer, normalizedPixelPercentageToMapping[mapping.SortingContainer.Sorting.NormalizedPixelPercentage]);
results.Add(saveContainer);
} }
return results; return results;
} }