Error - Don't keep

This commit is contained in:
2022-12-30 17:01:39 -07:00
parent 6db116d54b
commit 4b6811644c
17 changed files with 145 additions and 310 deletions

View File

@ -13,7 +13,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
protected readonly Dictionary<int, List<int>> _SkipCollection;
protected readonly List<PersonContainer> _NotMappedPersonContainers;
protected readonly Dictionary<long, PersonContainer> _PersonKeyToPersonContainer;
protected Dictionary<long, (long LCL, long Minimum, long Maximum, long UCL)>? _PersonKeyToRanges;
protected readonly Dictionary<int, Dictionary<int, PersonContainer[]>> _IdThenNormalizedRectangleToPersonContainers;
public Dictionary<int, int[]> KeyValuePairs => throw new NotImplementedException();
@ -101,6 +100,37 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
return result;
}
public void CreateTree(long ticks, string a2PeopleContentDirectory)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
string by;
string directory;
string[] segments;
const int zero = 0;
string personKeyFormatted;
PersonBirthday personBirthday;
string rootDirectory = Path.Combine(a2PeopleContentDirectory, $"{ticks}-Tree");
foreach (KeyValuePair<long, PersonContainer> personKeyToPersonContainer in _PersonKeyToPersonContainer)
{
if (personKeyToPersonContainer.Value.Key is null || personKeyToPersonContainer.Value.Birthdays is null || !personKeyToPersonContainer.Value.Birthdays.Any())
continue;
if (personKeyToPersonContainer.Value.DisplayDirectoryName == _Configuration.MappingDefaultName)
continue;
personBirthday = personKeyToPersonContainer.Value.Birthdays[zero];
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
by = IPersonBirthday.IsCounterPersonBirthday(personBirthday) ? _PropertyConfiguration.ResultAllInOne : "People";
segments = personKeyToPersonContainer.Value.DisplayDirectoryName.Split(_Configuration.PersonCharacters.ToArray());
if (segments.Length < 2)
directory = Path.Combine(rootDirectory, $"000 {personKeyFormatted} {personKeyToPersonContainer.Value.DisplayDirectoryName}");
else
directory = Path.Combine(rootDirectory, $"{segments[1].PadLeft(3, '0')} {personKeyFormatted} {personKeyToPersonContainer.Value.DisplayDirectoryName}");
if (Directory.Exists(directory))
continue;
_ = Directory.CreateDirectory(directory);
}
}
private static Dictionary<int, List<long>> GetIdToPersonKeys(Dictionary<long, List<int>> keyValuePairs)
{
Dictionary<int, List<long>> results = new();
@ -593,23 +623,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory);
}
private List<(long, long, long, long)> GetPersonKeysRangesCollection(PersonContainer[] personContainers)
{
if (_PersonKeyToRanges is null)
throw new NullReferenceException(nameof(_PersonKeyToRanges));
List<(long, long, long, long)> results = new();
(long, long, long, long) singleton;
foreach (PersonContainer personContainer in personContainers)
{
if (personContainer.Key is null)
continue;
if (!_PersonKeyToRanges.TryGetValue(personContainer.Key.Value, out singleton))
continue;
results.Add(singleton);
}
return results;
}
public bool Used(FaceDistance faceDistanceEncoding)
{
bool result = false;
@ -636,7 +649,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
FaceDistance faceDistanceLength;
List<int>? normalizedRectangles;
Dictionary<int, PersonContainer[]>? normalizedRectangleToPersonContainers;
List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection;
for (int j = 0; j < faceDistanceLengths.Count; j++)
{
if (faceDistanceEncoding.NormalizedRectangle is null)
@ -655,16 +667,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
throw new NotSupportedException();
if (faceDistanceLength.Length == 0)
continue;
if (!_IdThenNormalizedRectangleToPersonContainers.TryGetValue(faceDistanceLength.Id, out normalizedRectangleToPersonContainers))
personKeysRangesCollection = new();
else
{
if (!normalizedRectangleToPersonContainers.ContainsKey(faceDistanceLength.NormalizedRectangle.Value))
personKeysRangesCollection = new();
else
personKeysRangesCollection = GetPersonKeysRangesCollection(normalizedRectangleToPersonContainers[faceDistanceLength.NormalizedRectangle.Value]);
}
sorting = ISorting.Get(_Configuration.FaceDistancePermyriad, _Configuration.RangeDistanceTolerance, faceDistanceEncoding, faceDistanceLength, personKeysRangesCollection);
sorting = ISorting.Get(_Configuration.FaceDistancePermyriad, _Configuration.RangeDistanceTolerance, faceDistanceEncoding, faceDistanceLength);
if (sorting.DistancePermyriad == 0)
continue;
if (sorting.Id == faceDistanceEncoding.Id)
@ -787,15 +790,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
string by = nameof(Shared.Models.Stateless.IMapLogic.ManualCopy);
Dictionary<int, PersonContainer[]>? normalizedRectangleToPeronContainerCollection;
string successfull = $"_ {nameof(Shared.Models.Stateless.IMapLogic.ManualCopy).Humanize(LetterCasing.Title)} Successfull";
foreach (KeyValuePair<long, PersonContainer> keyValuePair in _PersonKeyToPersonContainer)
foreach (KeyValuePair<long, PersonContainer> personKeyToPersonContainer in _PersonKeyToPersonContainer)
{
if (keyValuePair.Value.Key is null || keyValuePair.Value.Birthdays is null || !keyValuePair.Value.Birthdays.Any())
if (personKeyToPersonContainer.Value.Key is null || personKeyToPersonContainer.Value.Birthdays is null || !personKeyToPersonContainer.Value.Birthdays.Any())
continue;
personBirthday = keyValuePair.Value.Birthdays[zero];
foreach (string personDisplayDirectoryAllFile in keyValuePair.Value.DisplayDirectoryAllFiles)
personBirthday = personKeyToPersonContainer.Value.Birthdays[zero];
foreach (string personDisplayDirectoryAllFile in personKeyToPersonContainer.Value.DisplayDirectoryAllFiles)
{
if (personDisplayDirectoryAllFile.Contains("-2318605"))
continue;
if (!personDisplayDirectoryAllFile.EndsWith(_Configuration.FacesFileNameExtension))
continue;
(id, normalizedRectangle) = IMapping.GetConverted(_Configuration.FacesFileNameExtension, personDisplayDirectoryAllFile);
@ -807,9 +808,9 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
personDisplayFileName = Path.GetFileName(personDisplayDirectoryAllFile);
personDisplayDirectory = Path.GetDirectoryName(personDisplayDirectoryAllFile);
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
mappingSegmentB = Stateless.MapLogic.GetMappingSegmentB(_Ticks, personBirthday, keyValuePair.Value.ApproximateYears, fileInfo.CreationTime, isWrongYear: null);
mappingSegmentB = Stateless.MapLogic.GetMappingSegmentB(_Ticks, personBirthday, personKeyToPersonContainer.Value.ApproximateYears, fileInfo.CreationTime, isWrongYear: null);
directory = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, mappingSegmentB);
personDirectory = Path.Combine(directory, keyValuePair.Value.DisplayDirectoryName, "lnk");
personDirectory = Path.Combine(directory, personKeyToPersonContainer.Value.DisplayDirectoryName, "lnk");
if (!idToNormalizedRectangleToMapping.TryGetValue(id.Value, out normalizedRectangleToMapping))
continue;
if (!normalizedRectangleToMapping.ContainsKey(normalizedRectangle.Value))
@ -913,32 +914,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
}
}
public void SaveNotMappedTicks()
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
int updated = 0;
string directory;
const int zero = 0;
int totalNotMapped = 0;
string personKeyFormatted;
SaveContainer saveContainer;
PersonBirthday personBirthday;
List<SaveContainer> saveContainers = new();
const string facePopulatedKey = nameof(Shared.Models.Stateless.IMapLogic.Sorting);
foreach (PersonContainer personContainer in _NotMappedPersonContainers)
{
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
continue;
personBirthday = personContainer.Birthdays[zero];
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
directory = Path.Combine(_EDistanceContentTicksDirectory, $"{facePopulatedKey}NotMapped", personKeyFormatted, _Configuration.MappingDefaultName);
saveContainer = new(directory);
saveContainers.Add(saveContainer);
}
SaveContainers(totalNotMapped, updated, saveContainers);
}
private (string, PersonBirthday?) GetPersonBirthday(string[] directoryNames)
{
if (_Configuration is null)
@ -1226,67 +1201,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
}
}
private List<(string, FileHolder, string)> GetCollection(string dFacesContentDirectory, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedRectangleToMapping)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
List<(string, FileHolder, string)> results = new();
Mapping mapping;
string checkFile;
string directory;
string? directoryName;
string? facesDirectory;
FileHolder faceFileHolder;
List<int>? normalizedRectangles;
string by = nameof(Shared.Models.Stateless.IMapLogic.CopyNotMappedFaces);
Dictionary<int, PersonContainer[]>? normalizedRectangleToPersonContainers;
foreach (KeyValuePair<int, Dictionary<int, Mapping>> keyValuePair in idToNormalizedRectangleToMapping)
{
_ = _IdThenNormalizedRectangleToPersonContainers.TryGetValue(keyValuePair.Key, out normalizedRectangleToPersonContainers);
foreach (KeyValuePair<int, Mapping> normalizedRectangleAndMapping in keyValuePair.Value)
{
mapping = normalizedRectangleAndMapping.Value;
if (normalizedRectangleToPersonContainers is not null && normalizedRectangleToPersonContainers.ContainsKey(mapping.MappingFromLocation.NormalizedRectangle))
continue;
_ = _SkipCollection.TryGetValue(keyValuePair.Key, out normalizedRectangles);
if (normalizedRectangles is not null && normalizedRectangles.Contains(mapping.MappingFromLocation.NormalizedRectangle))
continue;
directoryName = Path.GetDirectoryName(mapping.MappingFromItem.RelativePath);
facesDirectory = GetFacesDirectory(dFacesContentDirectory, mapping.MappingFromItem);
if (facesDirectory is null)
continue;
faceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}"));
if (directoryName is null || !faceFileHolder.Exists)
continue;
directory = Path.Combine(_EDistanceContentTicksDirectory, by, $"{mapping.MappingFromLocation.AreaPermille:0000}A{mapping.MappingFromItem.MinimumDateTime.ToString("yyyy")[..3]}#");
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}");
results.Add(new(directory, faceFileHolder, checkFile));
}
}
return results;
}
public void CopyNotMappedFaces(int[] rangeFaceAreaPermilleTolerance, string dFacesContentDirectory, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedRectangleToMapping)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
List<(string Directory, FileHolder FaceFileHolder, string CheckFile)> collection = GetCollection(dFacesContentDirectory, idToNormalizedRectangleToMapping);
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 directory, FileHolder faceFileHolder, string checkFile) in collection)
{
if (File.Exists(checkFile))
continue;
File.Copy(faceFileHolder.FullName, checkFile);
}
}
public Dictionary<int, Dictionary<int, PersonContainer[]>> GetMissing(Dictionary<int, Dictionary<int, Mapping>> idToNormalizedRectangleToMapping)
{
Dictionary<int, Dictionary<int, PersonContainer[]>> results = new();
@ -1299,13 +1213,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
return results;
}
public void UpdatedPersonKeyToRanges(Configuration configuration, long ticks, Mapping[] mappingCollection)
{
Dictionary<long, (long LCL, long Minimum, long Maximum, long UCL)> personKeyToRanges = new();
Stateless.MapLogic.SetPersonTicks(configuration, ticks, mappingCollection, personKeyToRanges, _IdThenNormalizedRectangleToPersonContainers);
_PersonKeyToRanges = personKeyToRanges;
}
public List<Face> GetFurtherFilterBySkipCollection(List<Face> distinctFilteredFaces)
{
List<Face> results = new();