SegmentB, personKey,

personKeyFormatted and Sorting
This commit is contained in:
2022-09-01 01:18:08 -07:00
parent d4c950e8e3
commit 73de1070b8
17 changed files with 847 additions and 573 deletions

View File

@ -7,12 +7,8 @@ public interface IMapLogic
static (bool?, string[]) IsWrongYear(Shared.Models.Item item) =>
MapLogic.IsWrongYear(item);
string TestStatic_GetDateKey(DateTime dateTime, Shared.Models.Mapping mapping, DateTime minimumDateTime, bool? isWrongYear);
static string GetDateKey(DateTime dateTime, Shared.Models.Mapping mapping, DateTime minimumDateTime, bool? isWrongYear) =>
MapLogic.GetDateKey(dateTime, mapping, minimumDateTime, isWrongYear);
Dictionary<string, List<Shared.Models.MappingContainer>> TestStatic_GetKeyValuePairs(string[] ignoreRelativePaths, string argZero, Shared.Models.Container[] containers);
static Dictionary<string, List<Shared.Models.MappingContainer>> GetKeyValuePairs(string[] ignoreRelativePaths, string argZero, Shared.Models.Container[] containers) =>
MapLogic.GetKeyValuePairs(ignoreRelativePaths, argZero, containers);
Dictionary<string, List<Shared.Models.MappingContainer>> TestStatic_GetKeyValuePairs(Shared.Models.Item[] items);
static Dictionary<string, List<Shared.Models.MappingContainer>> GetKeyValuePairs(Shared.Models.Item[] items) =>
MapLogic.GetKeyValuePairs(items);
}

View File

@ -5,21 +5,22 @@ namespace View_by_Distance.Map.Models.Stateless;
internal abstract class MapLogic
{
internal static string GetDateKey(DateTime dateTime, Mapping mapping, DateTime minimumDateTime, bool? isWrongYear)
internal static string GetMappingSegmentB(long ticks, PersonBirthday personBirthday, int? approximateYears, DateTime minimumDateTime, bool? isWrongYear)
{
int years;
string result;
TimeSpan? timeSpan = Shared.Models.Stateless.Methods.IPersonBirthday.GetTimeSpan(minimumDateTime, isWrongYear, mapping.PersonBirthday);
TimeSpan? timeSpan = Shared.Models.Stateless.Methods.IPersonBirthday.GetTimeSpan(minimumDateTime, isWrongYear, personBirthday);
if (timeSpan.HasValue && timeSpan.Value.Ticks < 0)
result = "!---";
else if (timeSpan.HasValue)
{
(years, _) = Shared.Models.Stateless.Methods.IPersonBirthday.GetAge(minimumDateTime, mapping.PersonBirthday);
(years, _) = Shared.Models.Stateless.Methods.IPersonBirthday.GetAge(minimumDateTime, personBirthday);
result = $"^{years:000}";
}
else if (mapping.ApproximateYears.HasValue)
else if (approximateYears.HasValue)
{
(years, _) = Shared.Models.Stateless.Methods.IAge.GetAge(minimumDateTime, dateTime.AddYears(-mapping.ApproximateYears.Value));
DateTime dateTime = new(ticks);
(years, _) = Shared.Models.Stateless.Methods.IAge.GetAge(minimumDateTime, dateTime.AddYears(-approximateYears.Value));
result = $"~{years:000}";
}
else
@ -30,50 +31,40 @@ internal abstract class MapLogic
return result;
}
internal static Dictionary<string, List<MappingContainer>> GetKeyValuePairs(string[] ignoreRelativePaths, string argZero, Container[] containers)
internal static Dictionary<string, List<MappingContainer>> GetKeyValuePairs(Item[] items)
{
Dictionary<string, List<MappingContainer>> results = new();
string key;
string dateKey;
bool? isWrongYear;
string personKey;
string personKeyFormatted;
DateTime minimumDateTime;
DateTime dateTime = DateTime.Now;
MappingContainer mappingContainer;
foreach (Container container in containers)
foreach (Item item in items)
{
if (!container.Items.Any())
if (item.Property?.Id is null || item.ImageFileHolder is null || item.ResizedFileHolder is null)
continue;
if (!container.SourceDirectory.StartsWith(argZero))
if (!item.Mapping.Any())
continue;
if (ignoreRelativePaths.Contains(Path.GetFileName(container.SourceDirectory)))
continue;
foreach (Item item in container.Items)
foreach (Face face in item.Faces)
{
if (item.ImageFileHolder is null || item.Property?.Id is null || !item.Mapping.Any())
if (face.FaceEncoding is null || face.Location?.NormalizedPixelPercentage is null)
continue;
foreach (Face face in item.Faces)
foreach (Mapping mapping in item.Mapping)
{
if (face.FaceEncoding is null || face.Location?.NormalizedPixelPercentage is null)
if (mapping.NormalizedPixelPercentage.HasValue && mapping.NormalizedPixelPercentage.Value != face.Location.NormalizedPixelPercentage.Value)
continue;
foreach (Mapping mapping in item.Mapping)
{
if (mapping.NormalizedPixelPercentage.HasValue && mapping.NormalizedPixelPercentage.Value != face.Location.NormalizedPixelPercentage.Value)
continue;
// if (named.NormalizedPixelPercentage is null && (Shared.Models.Stateless.INamed.OnlyUseNamedWithNormalizedPixelPercentagePopulatedForGetKeyValuePairs || item.Named.Count != 1 || item.Faces.Count != 1))
// continue;
minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
(isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime);
personKey = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(mapping.PersonBirthday);
dateKey = GetDateKey(dateTime, mapping, minimumDateTime, isWrongYear);
key = string.Concat(personKey, dateKey);
if (!results.ContainsKey(key))
results.Add(key, new());
mappingContainer = new(face, item.Property.Id.Value, isWrongYear, key, mapping, minimumDateTime);
results[key].Add(mappingContainer);
// if (named.NormalizedPixelPercentage is null)
// break;
}
// if (named.NormalizedPixelPercentage is null && (Shared.Models.Stateless.INamed.OnlyUseNamedWithNormalizedPixelPercentagePopulatedForGetKeyValuePairs || item.Named.Count != 1 || item.Faces.Count != 1))
// continue;
minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
(isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime);
personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(mapping.PersonBirthday);
key = string.Concat(personKeyFormatted, mapping.SegmentB);
if (!results.ContainsKey(key))
results.Add(key, new());
mappingContainer = new(face, item.Property.Id.Value, isWrongYear, key, mapping, minimumDateTime);
results[key].Add(mappingContainer);
// if (named.NormalizedPixelPercentage is null)
// break;
}
}
}

View File

@ -11,10 +11,10 @@ public class ByDeterministicHashCode
{
long ticks;
string json;
string personKey;
string[] segments;
int? approximateYears;
string groupDirectoryName;
string personKeyFormatted;
PersonBirthday[] collection;
string personKeyJsonFileName;
List<long> personKeys = new();
@ -28,10 +28,10 @@ public class ByDeterministicHashCode
Dictionary<string, Person> personKeyValuePairs = new();
foreach (Person person in people)
{
personKey = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(person.Birthday);
if (personKeyValuePairs.ContainsKey(personKey))
personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(person.Birthday);
if (personKeyValuePairs.ContainsKey(personKeyFormatted))
break;
personKeyValuePairs.Add(personKey, person);
personKeyValuePairs.Add(personKeyFormatted, person);
}
string[] groupDirectories = Directory.GetDirectories(deterministicHashCodePeopleDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string groupDirectory in groupDirectories)
@ -65,14 +65,14 @@ public class ByDeterministicHashCode
personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string personKeyDirectory in personKeyDirectories)
{
personKey = Path.GetFileName(personKeyDirectory);
if (!DateTime.TryParseExact(personKey, "MM.dd.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime birthday))
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKey);
personKeyFormatted = Path.GetFileName(personKeyDirectory);
if (!DateTime.TryParseExact(personKeyFormatted, "MM.dd.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime birthday))
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKeyFormatted);
else
{
personBirthday = new PersonBirthday(birthday);
personKey = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(personBirthday);
convertedPersonKeyDirectory = Path.Combine(personDisplayDirectory, personKey);
personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(personBirthday);
convertedPersonKeyDirectory = Path.Combine(personDisplayDirectory, personKeyFormatted);
if (!Directory.Exists(convertedPersonKeyDirectory))
Directory.Move(personKeyDirectory, convertedPersonKeyDirectory);
}
@ -84,17 +84,17 @@ public class ByDeterministicHashCode
continue;
foreach (string personKeyDirectory in personKeyDirectories)
{
personKey = Path.GetFileName(personKeyDirectory);
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKey);
personKeyFormatted = Path.GetFileName(personKeyDirectory);
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKeyFormatted);
if (personBirthday is null)
continue;
if (personKeyValuePairs.ContainsKey(personKey))
if (personKeyValuePairs.ContainsKey(personKeyFormatted))
{
personKeyJsonDirectory = Path.Combine(personDisplayDirectory, personKey);
personKeyJsonDirectory = Path.Combine(personDisplayDirectory, personKeyFormatted);
if (!Directory.Exists(personKeyJsonDirectory))
Directory.Move(personKeyDirectory, personKeyJsonDirectory);
personKeyJsonFileName = Path.Combine(personKeyJsonDirectory, $"{personKey}.json");
json = JsonSerializer.Serialize(personKeyValuePairs[personKey], new JsonSerializerOptions() { WriteIndented = true });
personKeyJsonFileName = Path.Combine(personKeyJsonDirectory, $"{personKeyFormatted}.json");
json = JsonSerializer.Serialize(personKeyValuePairs[personKeyFormatted], new JsonSerializerOptions() { WriteIndented = true });
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(personKeyJsonFileName, json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null);
}
collection = personBirthdays.OrderByDescending(l => l.Value).ToArray();
@ -116,7 +116,7 @@ public class ByDeterministicHashCode
ticks = incrementDate.Ticks;
personBirthday = new(incrementDate);
incrementDate = incrementDate.AddDays(1);
personKey = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(personBirthday);
personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(personBirthday);
if (personKeys.Contains(ticks))
continue;
personKeys.Add(ticks);
@ -212,13 +212,13 @@ public class ByDeterministicHashCode
private static List<long> GetTicks(Dictionary<int, PersonBirthday[]> deterministicHashCodeUnknownFaceKeyValuePairs)
{
List<long> results = new();
long ticks;
long personKey;
foreach (KeyValuePair<int, PersonBirthday[]> keyValuePair in deterministicHashCodeUnknownFaceKeyValuePairs)
{
foreach (PersonBirthday personBirthday in keyValuePair.Value)
{
ticks = personBirthday.Value.Ticks;
results.Add(ticks);
personKey = personBirthday.Value.Ticks;
results.Add(personKey);
}
}
results = results.Distinct().ToList();
@ -227,15 +227,15 @@ public class ByDeterministicHashCode
private static void Set(List<(PersonBirthday PersonBirthday, double IdAndNormalizedPixelPercentage)> deterministicHashCodeCollection, List<long> deterministicHashCodePersonKeys, Dictionary<double, List<PersonBirthday>> deterministicHashCodeScope)
{
long ticks;
long personKey;
deterministicHashCodeCollection = (from l in deterministicHashCodeCollection orderby l.IdAndNormalizedPixelPercentage select l).ToList();
foreach ((PersonBirthday personBirthday, double idAndNormalizedPixelPercentage) in deterministicHashCodeCollection)
{
if (!deterministicHashCodeScope.ContainsKey(idAndNormalizedPixelPercentage))
deterministicHashCodeScope.Add(idAndNormalizedPixelPercentage, new());
deterministicHashCodeScope[idAndNormalizedPixelPercentage].Add(personBirthday);
ticks = personBirthday.Value.Ticks;
deterministicHashCodePersonKeys.Add(ticks);
personKey = personBirthday.Value.Ticks;
deterministicHashCodePersonKeys.Add(personKey);
}
}
@ -281,20 +281,20 @@ public class ByDeterministicHashCode
int? approximateYears = null;
PersonBirthday? personBirthday;
const string displayDirectoryName = Property.Models.Stateless.IResult.AllInOne;
foreach (long ticks in deterministicHashCodeUnknownFacePersonKeys)
foreach (long personKey in deterministicHashCodeUnknownFacePersonKeys)
{
if (!peopleKeyValuePairs.ContainsKey(ticks))
if (!peopleKeyValuePairs.ContainsKey(personKey))
{
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(ticks);
peopleKeyValuePairs.Add(ticks, new(displayDirectoryName, approximateYears, new PersonBirthday[] { personBirthday }, ticks));
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKey);
peopleKeyValuePairs.Add(personKey, new(displayDirectoryName, approximateYears, new PersonBirthday[] { personBirthday }, personKey));
}
}
foreach (long ticks in deterministicHashCodePersonKeys)
foreach (long personKey in deterministicHashCodePersonKeys)
{
if (!peopleKeyValuePairs.ContainsKey(ticks))
if (!peopleKeyValuePairs.ContainsKey(personKey))
{
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(ticks);
peopleKeyValuePairs.Add(ticks, new(displayDirectoryName, approximateYears, new PersonBirthday[] { personBirthday }, ticks));
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKey);
peopleKeyValuePairs.Add(personKey, new(displayDirectoryName, approximateYears, new PersonBirthday[] { personBirthday }, personKey));
}
}
}