More strict birthday logic

This commit is contained in:
2022-09-26 14:59:51 -07:00
parent a145a89112
commit 27a4a1cfb4
11 changed files with 237 additions and 111 deletions

View File

@ -132,8 +132,6 @@ internal abstract class MapLogic
{
personFirstInitial = personDisplayDirectoryNames[^1][..1];
personFirstInitialDirectory = Path.Combine(yearDirectory, personFirstInitial.ToString());
if (personNameDirectory != personFirstInitialDirectory)
Directory.Move(personNameDirectory, personFirstInitialDirectory);
}
files = Directory.GetFiles(personFirstInitialDirectory, "*", SearchOption.TopDirectoryOnly);
if (personKeyFormatted == nameof(IMapLogic.Sorting) && files.Any())
@ -144,6 +142,11 @@ internal abstract class MapLogic
throw new Exception($"Move personKey directories up one from {forceSingleImageHumanized} and delete {forceSingleImageHumanized} directory!");
if (personKeyFormatted.Length != configuration.PersonBirthdayFormat.Length)
continue;
if (personNameDirectory != personFirstInitialDirectory && !Directory.Exists(personFirstInitialDirectory))
{
Directory.Move(personNameDirectory, personFirstInitialDirectory);
files = Directory.GetFiles(personFirstInitialDirectory, "*", SearchOption.TopDirectoryOnly);
}
foreach (string file in files)
{
if (file.EndsWith(".lnk") || file.EndsWith(".json"))
@ -194,17 +197,23 @@ internal abstract class MapLogic
return results;
}
internal static Dictionary<int, List<(string, int)>> DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, string facesFileNameExtension, long ticks, string eDistanceContentDirectory, PersonContainer[] personContainers)
internal static Dictionary<int, List<(string, int)>> DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, string facesFileNameExtension, long ticks, string? a2PeopleContentDirectory, string? eDistanceContentDirectory, PersonContainer[] personContainers)
{
Dictionary<int, List<(string, int)>> results;
string personKeyFormatted;
List<(long? PersonKey, string Line)> lines = new();
List<string> personKeyFormattedCollection = new();
_ = GetDistinctCollection(configuration, personContainers.ToList(), new());
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
string[] ticksDirectories = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
string[] ticksDirectories;
if (string.IsNullOrEmpty(eDistanceContentDirectory))
ticksDirectories = Array.Empty<string>();
else
ticksDirectories = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
string message = $") {ticksDirectories.Length:000} collect from and clean ticks Director(ies) - A - {totalSeconds} total second(s)";
foreach (PersonContainer personContainer in personContainers)
{
lines.AddRange(IPersonContainer.GetDisplay(configuration.PersonBirthdayFormat, personContainer));
if (personContainer.Person is null || personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
continue;
foreach (PersonBirthday personBirthday in personContainer.Birthdays)
@ -213,12 +222,9 @@ internal abstract class MapLogic
personKeyFormattedCollection.Add(personKeyFormatted);
}
}
List<(string, string[], string)> collection = DeleteEmptyDirectoriesAndGetCollection(
configuration,
facesFileNameExtension,
personKeyFormattedCollection,
ticksDirectories,
message);
if (!string.IsNullOrEmpty(a2PeopleContentDirectory))
File.WriteAllLines(Path.Combine(a2PeopleContentDirectory, "People - C.tsv"), from l in lines orderby l.PersonKey is null select l.Line);
List<(string, string[], string)> collection = DeleteEmptyDirectoriesAndGetCollection(configuration, facesFileNameExtension, personKeyFormattedCollection, ticksDirectories, message);
results = GetIdToCollection(facesFileNameExtension, collection);
return results;
}
@ -579,7 +585,7 @@ internal abstract class MapLogic
}
}
internal static void Set(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, string facesFileNameExtension, long ticks, List<PersonContainer> personContainers, string a2PeopleSingletonDirectory, string eDistanceContentDirectory, List<Face> distinctFilteredFaces, Shared.Models.Methods.IFaceDistance faceDistance, Dictionary<long, PersonContainer> personKeyToPersonContainer, Dictionary<long, (long LCL, long Minimum, long Maximum, long UCL)> personKeyToRanges, List<PersonContainer> notMappedPersonContainers, Dictionary<int, List<int>> skipCollection, Dictionary<int, Dictionary<int, PersonContainer[]>> idThenNormalizedPixelPercentageToPersonContainers)
internal static void Set(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, string facesFileNameExtension, long ticks, List<PersonContainer> personContainers, string? a2PeopleContentDirectory, string eDistanceContentDirectory, List<Face> distinctFilteredFaces, Shared.Models.Methods.IFaceDistance faceDistance, Dictionary<long, PersonContainer> personKeyToPersonContainer, Dictionary<long, (long LCL, long Minimum, long Maximum, long UCL)> personKeyToRanges, List<PersonContainer> notMappedPersonContainers, Dictionary<int, List<int>> skipCollection, Dictionary<int, Dictionary<int, PersonContainer[]>> idThenNormalizedPixelPercentageToPersonContainers)
{
if (configuration is null)
throw new NullReferenceException(nameof(configuration));
@ -594,14 +600,7 @@ internal abstract class MapLogic
List<(string, string[], int, int)> personKeyFormattedIdThenNormalizedPixelPercentageCollection = new();
List<(string, int, int)> incorrectPersonKeyFormattedIdThenNormalizedPixelPercentageCollection = new();
Dictionary<int, Dictionary<int, PersonContainer[]>> incorrectIdThenNormalizedPixelPercentageToPersonContainers = new();
SetPersonCollections(
configuration,
facesFileNameExtension,
personContainers,
personKeys,
personKeyFormattedToNewestPersonKeyFormatted,
personKeyFormattedCollection,
skipCollection);
SetPersonCollections(configuration, facesFileNameExtension, personContainers, personKeys, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection, skipCollection);
personContainers.AddRange(AddToPersonKeysThenGetNonSpecificPeopleCollection(configuration, personKeys));
foreach (Face face in distinctFilteredFaces)
{
@ -616,32 +615,9 @@ internal abstract class MapLogic
totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
string[] ticksDirectories = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
message = $") {ticksDirectories.Length:000} compile from and clean ticks Director(ies) - B - {totalSeconds} total second(s)";
List<(string, string[], string)> collection = DeleteEmptyDirectoriesAndGetCollection(
configuration,
facesFileNameExtension,
personKeyFormattedCollection,
ticksDirectories,
message);
(int unableToMatchCount, int duplicateCount) = SetCollectionsAndGetUnableToMatchCount(
facesFileNameExtension,
ticks,
keyValuePairs,
personKeyFormattedToNewestPersonKeyFormatted,
personKeyFormattedIdThenNormalizedPixelPercentageCollection,
incorrectPersonKeyFormattedIdThenNormalizedPixelPercentageCollection,
collection);
SetKeyValuePairs(
configuration,
ticks,
personContainers,
distinctFilteredFaces,
personKeyFormattedIdThenNormalizedPixelPercentageCollection,
incorrectPersonKeyFormattedIdThenNormalizedPixelPercentageCollection,
personKeyToPersonContainer,
idThenNormalizedPixelPercentageToPersonContainers,
possiblyNewPersonDisplayDirectoryNamesAndPersonContainer,
incorrectIdThenNormalizedPixelPercentageToPersonContainers,
personKeyToRanges);
List<(string, string[], string)> collection = DeleteEmptyDirectoriesAndGetCollection(configuration, facesFileNameExtension, personKeyFormattedCollection, ticksDirectories, message);
(int unableToMatchCount, int duplicateCount) = SetCollectionsAndGetUnableToMatchCount(facesFileNameExtension, ticks, keyValuePairs, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedIdThenNormalizedPixelPercentageCollection, incorrectPersonKeyFormattedIdThenNormalizedPixelPercentageCollection, collection);
SetKeyValuePairs(configuration, ticks, personContainers, distinctFilteredFaces, personKeyFormattedIdThenNormalizedPixelPercentageCollection, incorrectPersonKeyFormattedIdThenNormalizedPixelPercentageCollection, personKeyToPersonContainer, idThenNormalizedPixelPercentageToPersonContainers, possiblyNewPersonDisplayDirectoryNamesAndPersonContainer, incorrectIdThenNormalizedPixelPercentageToPersonContainers, personKeyToRanges);
totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
message = $") {collection.Count:000} message from ticks Director(ies) - D - {duplicateCount} Duplicate Count {unableToMatchCount} Unable To Match Count / {collection.Count} Collection - {totalSeconds} total second(s)";
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
@ -657,18 +633,9 @@ internal abstract class MapLogic
long[] personKeyCollection = (from l in nullablePersonKeyCollection where l is not null select l.Value).Distinct().ToArray();
SetPersonKeyToPersonContainer(configuration, personContainers, personKeyCollection, personKeyToPersonContainer);
notMappedPersonContainers.AddRange(GetNotMappedPersonContainers(configuration, personContainers, personKeyCollection));
AppendToSkipCollection(
skipCollection,
idThenNormalizedPixelPercentageToPersonContainers,
incorrectIdThenNormalizedPixelPercentageToPersonContainers);
AppendToSkipCollection(skipCollection, idThenNormalizedPixelPercentageToPersonContainers, incorrectIdThenNormalizedPixelPercentageToPersonContainers);
if (possiblyNewPersonDisplayDirectoryNamesAndPersonContainer.Any())
faceDistance.SavePossiblyNewPersonContainers(
propertyConfiguration,
configuration.PersonBirthdayFormat,
facesFileNameExtension,
a2PeopleSingletonDirectory,
personKeyToPersonContainer,
possiblyNewPersonDisplayDirectoryNamesAndPersonContainer);
faceDistance.SavePossiblyNewPersonContainers(propertyConfiguration, configuration.PersonBirthdayFormat, facesFileNameExtension, a2PeopleContentDirectory, personKeyToPersonContainer, possiblyNewPersonDisplayDirectoryNamesAndPersonContainer);
}
}