PersonDirectory
This commit is contained in:
		| @ -834,7 +834,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic | |||||||
|                     throw new NotSupportedException(); |                     throw new NotSupportedException(); | ||||||
|                 if (!_PersonKeyToPersonContainer.TryGetValue(personKey, out personContainer)) |                 if (!_PersonKeyToPersonContainer.TryGetValue(personKey, out personContainer)) | ||||||
|                     continue; |                     continue; | ||||||
|                 if (personContainer.Char is null || !_Configuration.PersonCharacters.Contains(personContainer.Char.Value)) |                 if (personContainer.PersonDirectory is null || !_Configuration.PersonCharacters.Contains(personContainer.PersonDirectory.Char)) | ||||||
|                     continue; |                     continue; | ||||||
|                 if (i == 1) |                 if (i == 1) | ||||||
|                 { |                 { | ||||||
| @ -844,7 +844,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic | |||||||
|                 } |                 } | ||||||
|                 else if (i == 2) |                 else if (i == 2) | ||||||
|                 { |                 { | ||||||
|                     directory = Path.Combine(a2PeopleSingletonDirectory, personContainer.Char.Value.ToString(), personContainer.DisplayDirectoryName, personKeyToCount[personKey].ToString("0000")); |                     directory = Path.Combine(a2PeopleSingletonDirectory, personContainer.PersonDirectory.Char.ToString(), personContainer.DisplayDirectoryName, personKeyToCount[personKey].ToString("0000")); | ||||||
|                     if (results.Contains(directory)) |                     if (results.Contains(directory)) | ||||||
|                         continue; |                         continue; | ||||||
|                     results.Add(directory); |                     results.Add(directory); | ||||||
| @ -917,13 +917,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic | |||||||
|                 continue; |                 continue; | ||||||
|             if (!_PersonKeyToPersonContainer.TryGetValue(personKey, out personContainer)) |             if (!_PersonKeyToPersonContainer.TryGetValue(personKey, out personContainer)) | ||||||
|                 continue; |                 continue; | ||||||
|             if (personContainer.Char is null || !_Configuration.PersonCharacters.Contains(personContainer.Char.Value)) |             if (personContainer.PersonDirectory is null || !_Configuration.PersonCharacters.Contains(personContainer.PersonDirectory.Char)) | ||||||
|                 continue; |                 continue; | ||||||
|             if (personContainer.DisplayDirectoryAllFiles.Any(l => l.EndsWith(faceFileName))) |             if (personContainer.DisplayDirectoryAllFiles.Any(l => l.EndsWith(faceFileName))) | ||||||
|                 continue; |                 continue; | ||||||
|             if (!File.Exists(faceFile)) |             if (!File.Exists(faceFile)) | ||||||
|                 continue; |                 continue; | ||||||
|             directory = Path.Combine(a2PeopleSingletonDirectory, personContainer.Char.Value.ToString(), personContainer.DisplayDirectoryName); |             directory = Path.Combine(a2PeopleSingletonDirectory, personContainer.PersonDirectory.Char.ToString(), personContainer.DisplayDirectoryName); | ||||||
|             if (!Directory.Exists(directory)) |             if (!Directory.Exists(directory)) | ||||||
|                 continue; |                 continue; | ||||||
|             fileName = Path.Combine(directory, faceFileName); |             fileName = Path.Combine(directory, faceFileName); | ||||||
|  | |||||||
| @ -32,7 +32,7 @@ internal abstract class MapLogic | |||||||
|                 continue; |                 continue; | ||||||
|             personBirthday = IPersonBirthday.GetPersonBirthday(personKey); |             personBirthday = IPersonBirthday.GetPersonBirthday(personKey); | ||||||
|             person = IPerson.GetPerson(configuration.MappingDefaultName, configuration.PersonCharacters.ToArray(), configuration.MappingDefaultName, personKey, personBirthday); |             person = IPerson.GetPerson(configuration.MappingDefaultName, configuration.PersonCharacters.ToArray(), configuration.MappingDefaultName, personKey, personBirthday); | ||||||
|             personContainer = new(approximateYears, person, new PersonBirthday[] { personBirthday }, personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey); |             personContainer = new(approximateYears, new PersonBirthday[] { personBirthday }, personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey, person); | ||||||
|             results.Add(personContainer); |             results.Add(personContainer); | ||||||
|         } |         } | ||||||
|         return results; |         return results; | ||||||
| @ -511,7 +511,7 @@ internal abstract class MapLogic | |||||||
|                 if (!personKeyToPersonContainerCollection.ContainsKey(personKey)) |                 if (!personKeyToPersonContainerCollection.ContainsKey(personKey)) | ||||||
|                     personContainer = new(approximateYears, personBirthday, displayDirectoryName, personKey); |                     personContainer = new(approximateYears, personBirthday, displayDirectoryName, personKey); | ||||||
|                 else |                 else | ||||||
|                     personContainer = new(approximateYears, personBirthday, personKeyToPersonContainerCollection[personKey][zero].Char, displayDirectoryName, personKey); |                     personContainer = new(approximateYears, personBirthday, personKeyToPersonContainerCollection[personKey][zero].PersonDirectory, displayDirectoryName, personKey); | ||||||
|                 personKeyToPersonContainer.Add(personKey, personContainer); |                 personKeyToPersonContainer.Add(personKey, personContainer); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -7,45 +7,45 @@ public class PersonContainer : Properties.IPersonContainer | |||||||
| { | { | ||||||
|  |  | ||||||
|     public int? ApproximateYears { init; get; } |     public int? ApproximateYears { init; get; } | ||||||
|     public Person? Person { init; get; } |  | ||||||
|     public PersonBirthday[]? Birthdays { init; get; } |     public PersonBirthday[]? Birthdays { init; get; } | ||||||
|     public string[] DisplayDirectoryAllFiles { init; get; } |     public string[] DisplayDirectoryAllFiles { init; get; } | ||||||
|     public string DisplayDirectoryName { init; get; } |     public string DisplayDirectoryName { init; get; } | ||||||
|     public long? Key { init; get; } |     public long? Key { init; get; } | ||||||
|     public bool? KeyIsMaxBirthday { init; get; } |     public bool? KeyIsMaxBirthday { init; get; } | ||||||
|     public char? Char { init; get; } |     public Person? Person { init; get; } | ||||||
|  |     public PersonDirectory? PersonDirectory { init; get; } | ||||||
|  |  | ||||||
|     [JsonConstructor] |     [JsonConstructor] | ||||||
|     public PersonContainer(int? approximateYears, char? @char, Person? person, PersonBirthday[]? birthdays, string[] displayDirectoryAllFiles, string displayDirectoryName, long? key) |     public PersonContainer(int? approximateYears, PersonBirthday[]? birthdays, string[] displayDirectoryAllFiles, string displayDirectoryName, long? key, Person? person, PersonDirectory? personDirectory) | ||||||
|     { |     { | ||||||
|         ApproximateYears = approximateYears; |         ApproximateYears = approximateYears; | ||||||
|         Char = @char; |  | ||||||
|         Person = person; |  | ||||||
|         Birthdays = birthdays; |         Birthdays = birthdays; | ||||||
|         DisplayDirectoryAllFiles = displayDirectoryAllFiles; |         DisplayDirectoryAllFiles = displayDirectoryAllFiles; | ||||||
|         DisplayDirectoryName = displayDirectoryName; |         DisplayDirectoryName = displayDirectoryName; | ||||||
|         Key = key; |         Key = key; | ||||||
|  |         Person = person; | ||||||
|  |         PersonDirectory = personDirectory; | ||||||
|         KeyIsMaxBirthday = birthdays is null || key is null ? null : key.Value == birthdays.First().Value.Ticks; |         KeyIsMaxBirthday = birthdays is null || key is null ? null : key.Value == birthdays.First().Value.Ticks; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PersonContainer(string mappingDefaultName, char[] personCharacters, PersonBirthday birthday, string displayDirectoryName) : |     public PersonContainer(string mappingDefaultName, char[] personCharacters, PersonBirthday birthday, string displayDirectoryName) : | ||||||
|         this(Stateless.Methods.IAge.GetApproximateYears(personCharacters, displayDirectoryName), null, Stateless.Methods.IPerson.GetPerson(mappingDefaultName, personCharacters, displayDirectoryName, birthday.Value.Ticks, birthday), new PersonBirthday[] { birthday }, Array.Empty<string>(), displayDirectoryName, birthday.Value.Ticks) |         this(Stateless.Methods.IAge.GetApproximateYears(personCharacters, displayDirectoryName), new PersonBirthday[] { birthday }, Array.Empty<string>(), displayDirectoryName, birthday.Value.Ticks, Stateless.Methods.IPerson.GetPerson(mappingDefaultName, personCharacters, displayDirectoryName, birthday.Value.Ticks, birthday), null) | ||||||
|     { } |     { } | ||||||
|  |  | ||||||
|     public PersonContainer(int? approximateYears, PersonBirthday birthdays, string displayDirectoryName, long key) : |     public PersonContainer(int? approximateYears, PersonBirthday birthdays, string displayDirectoryName, long key) : | ||||||
|         this(approximateYears, null, null, new PersonBirthday[] { birthdays }, Array.Empty<string>(), displayDirectoryName, key) |         this(approximateYears, new PersonBirthday[] { birthdays }, Array.Empty<string>(), displayDirectoryName, key, null, null) | ||||||
|     { } |     { } | ||||||
|  |  | ||||||
|     public PersonContainer(int? approximateYears, PersonBirthday birthdays, char? @char, string displayDirectoryName, long key) : |     public PersonContainer(int? approximateYears, PersonBirthday birthdays, PersonDirectory? personDirectory, string displayDirectoryName, long key) : | ||||||
|         this(approximateYears, @char, null, new PersonBirthday[] { birthdays }, Array.Empty<string>(), displayDirectoryName, key) |         this(approximateYears, new PersonBirthday[] { birthdays }, Array.Empty<string>(), displayDirectoryName, key, null, personDirectory) | ||||||
|     { } |     { } | ||||||
|  |  | ||||||
|     public PersonContainer(int? approximateYears, char @char, string[] displayDirectoryAllFiles, string displayDirectoryName) : |     public PersonContainer(int? approximateYears, string[] displayDirectoryAllFiles, string displayDirectoryName, PersonDirectory? personDirectory) : | ||||||
|         this(approximateYears, @char, null, null, displayDirectoryAllFiles, displayDirectoryName, null) |         this(approximateYears, null, displayDirectoryAllFiles, displayDirectoryName, null, null, personDirectory) | ||||||
|     { } |     { } | ||||||
|  |  | ||||||
|     public PersonContainer(int? approximateYears, Person? person, PersonBirthday[]? birthdays, string[] displayDirectoryAllFiles, string displayDirectoryName, long? key) : |     public PersonContainer(int? approximateYears, PersonBirthday[]? birthdays, string[] displayDirectoryAllFiles, string displayDirectoryName, long? key, Person? person) : | ||||||
|         this(approximateYears, null, person, birthdays, displayDirectoryAllFiles, displayDirectoryName, key) |         this(approximateYears, birthdays, displayDirectoryAllFiles, displayDirectoryName, key, person, null) | ||||||
|     { } |     { } | ||||||
|  |  | ||||||
|     public override string ToString() |     public override string ToString() | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								Shared/Models/PersonDirectory.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								Shared/Models/PersonDirectory.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | using System.Text.Json; | ||||||
|  |  | ||||||
|  | namespace View_by_Distance.Shared.Models; | ||||||
|  |  | ||||||
|  | public record PersonDirectory(char Char, string Name, char Status, char Sex, char First) | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     public override string ToString() | ||||||
|  |     { | ||||||
|  |         string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -4,11 +4,12 @@ public interface IPersonContainer | |||||||
| { | { | ||||||
|  |  | ||||||
|     public int? ApproximateYears { init; get; } |     public int? ApproximateYears { init; get; } | ||||||
|     public Person? Person { init; get; } |  | ||||||
|     public PersonBirthday[]? Birthdays { init; get; } |     public PersonBirthday[]? Birthdays { init; get; } | ||||||
|     public string[] DisplayDirectoryAllFiles { init; get; } |     public string[] DisplayDirectoryAllFiles { init; get; } | ||||||
|     public string DisplayDirectoryName { init; get; } |     public string DisplayDirectoryName { init; get; } | ||||||
|     public long? Key { init; get; } |     public long? Key { init; get; } | ||||||
|     public bool? KeyIsMaxBirthday { init; get; } |     public bool? KeyIsMaxBirthday { init; get; } | ||||||
|  |     public Person? Person { init; get; } | ||||||
|  |     public PersonDirectory? PersonDirectory { init; get; } | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -251,7 +251,7 @@ internal abstract class GenealogicalDataCommunication | |||||||
|             birth = birth.Value.AddHours(hours); |             birth = birth.Value.AddHours(hours); | ||||||
|             if (age < 1) |             if (age < 1) | ||||||
|                 birth = null; |                 birth = null; | ||||||
|             if (death is null && (!alive || (age > 110 && !IPersonBirthday.IsCounterPersonBirthday(new(birth.Value))))) |             if (birth is not null && death is null && (!alive || (age > 110 && !IPersonBirthday.IsCounterPersonBirthday(new(birth.Value))))) | ||||||
|                 death = birth; |                 death = birth; | ||||||
|         } |         } | ||||||
|         death ??= !genealogicalDataCommunicationLines.Death.Any(l => l == "1 DEAT Y") ? null : birth; |         death ??= !genealogicalDataCommunicationLines.Death.Any(l => l == "1 DEAT Y") ? null : birth; | ||||||
|  | |||||||
| @ -90,27 +90,14 @@ internal abstract class PersonContainer | |||||||
|         return results; |         return results; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static List<Models.PersonContainer> GetPersonContainersCollections(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary<string, List<string>> individuals, char @char, string innerGroupDirectory, char numberSign, string personDisplayDirectory, string personDisplayDirectoryName, bool isDefaultName, int? approximateYears, List<(string PersonKeyFormatted, Models.PersonBirthday PersonBirthday)> collection) |     private static List<Models.PersonContainer> GetPersonContainersCollections(string mappingDefaultName, string facesFileNameExtension, char[] personCharacters, PersonDirectory personDirectory, char numberSign, string personDisplayDirectory, string personDisplayDirectoryName, bool isDefaultName, int? approximateYears, List<(string PersonKeyFormatted, Models.PersonBirthday PersonBirthday)> collection) | ||||||
|     { |     { | ||||||
|         List<Models.PersonContainer> results = new(); |         List<Models.PersonContainer> results = new(); | ||||||
|         char sex; |  | ||||||
|         bool first; |  | ||||||
|         bool? male; |  | ||||||
|         bool? alive; |  | ||||||
|         long personKey; |         long personKey; | ||||||
|         string[] matches; |  | ||||||
|         string? directory; |  | ||||||
|         string[] segments; |  | ||||||
|         bool verify = true; |  | ||||||
|         const int zero = 0; |         const int zero = 0; | ||||||
|         Models.Person person; |         Models.Person person; | ||||||
|         string innerGroupDirectoryName; |  | ||||||
|         const char exclamationPoint = '!'; |  | ||||||
|         List<string>? individualsLines = null; |  | ||||||
|         Models.PersonContainer personContainer; |         Models.PersonContainer personContainer; | ||||||
|         Models.PersonBirthday[] orderedPersonBirthdays; |         Models.PersonBirthday[] orderedPersonBirthdays; | ||||||
|         Models.GenealogicalDataCommunication genealogicalDataCommunication; |  | ||||||
|         GenealogicalDataCommunicationLines? genealogicalDataCommunicationLines; |  | ||||||
|         string[] personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, isDefaultName); |         string[] personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, isDefaultName); | ||||||
|         foreach ((string personKeyFormatted, Models.PersonBirthday personBirthday) in collection) |         foreach ((string personKeyFormatted, Models.PersonBirthday personBirthday) in collection) | ||||||
|         { |         { | ||||||
| @ -124,64 +111,8 @@ internal abstract class PersonContainer | |||||||
|                 personKey = orderedPersonBirthdays[zero].Value.Ticks; |                 personKey = orderedPersonBirthdays[zero].Value.Ticks; | ||||||
|             } |             } | ||||||
|             person = IPerson.GetPerson(mappingDefaultName, personCharacters, personDisplayDirectoryName, personDisplayDirectoryAllFiles, personKey); |             person = IPerson.GetPerson(mappingDefaultName, personCharacters, personDisplayDirectoryName, personDisplayDirectoryAllFiles, personKey); | ||||||
|             personContainer = new(approximateYears, @char, person, orderedPersonBirthdays, personDisplayDirectoryAllFiles, personDisplayDirectoryName, personKey); |             personContainer = new(approximateYears, orderedPersonBirthdays, personDisplayDirectoryAllFiles, personDisplayDirectoryName, personKey, person, personDirectory); | ||||||
|             results.Add(personContainer); |             results.Add(personContainer); | ||||||
|             if (personKeyFormatted != IPersonBirthday.GetFormatted(personBirthdayFormat, personKey)) |  | ||||||
|                 continue; |  | ||||||
|             _ = individuals.TryGetValue(personKeyFormatted, out individualsLines); |  | ||||||
|             isDefaultName = IPerson.IsDefaultName(mappingDefaultName, personDisplayDirectoryName); |  | ||||||
|             matches = (from l in personDisplayDirectoryAllFiles where l.Contains(personKeyFormatted) select l).ToArray(); |  | ||||||
|             if (!matches.Any()) |  | ||||||
|                 continue; |  | ||||||
|             directory = Path.GetDirectoryName(matches[zero]); |  | ||||||
|             if (directory is null) |  | ||||||
|                 continue; |  | ||||||
|             if (@char == exclamationPoint) |  | ||||||
|                 (sex, alive, male, first) = ('U', null, null, true); |  | ||||||
|             else |  | ||||||
|             { |  | ||||||
|                 innerGroupDirectoryName = Path.GetFileName(innerGroupDirectory); |  | ||||||
|                 segments = innerGroupDirectoryName.Split('-'); |  | ||||||
|                 if (segments.Length != 3) |  | ||||||
|                     continue; |  | ||||||
|                 alive = segments[zero] switch |  | ||||||
|                 { |  | ||||||
|                     "Alive" => true, |  | ||||||
|                     "Dead" => false, |  | ||||||
|                     "Unknown" => null, |  | ||||||
|                     _ => throw new NotImplementedException() |  | ||||||
|                 }; |  | ||||||
|                 sex = segments[1] switch |  | ||||||
|                 { |  | ||||||
|                     "Male" => 'M', |  | ||||||
|                     "Female" => 'F', |  | ||||||
|                     "Unknown" => 'U', |  | ||||||
|                     _ => throw new NotImplementedException() |  | ||||||
|                 }; |  | ||||||
|                 male = segments[1] switch |  | ||||||
|                 { |  | ||||||
|                     "Male" => true, |  | ||||||
|                     "Female" => false, |  | ||||||
|                     "Unknown" => null, |  | ||||||
|                     _ => throw new NotImplementedException() |  | ||||||
|                 }; |  | ||||||
|                 first = segments[2] switch |  | ||||||
|                 { |  | ||||||
|                     "Yes" => true, |  | ||||||
|                     "No" => false, |  | ||||||
|                     "Unknown" => true, |  | ||||||
|                     _ => throw new NotImplementedException() |  | ||||||
|                 }; |  | ||||||
|             } |  | ||||||
|             if (alive is null) |  | ||||||
|                 continue; |  | ||||||
|             genealogicalDataCommunicationLines = individualsLines is null ? null : GenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(personBirthday, individualsLines); |  | ||||||
|             if (genealogicalDataCommunicationLines is null) |  | ||||||
|                 continue; |  | ||||||
|             genealogicalDataCommunication = GenealogicalDataCommunication.GetGenealogicalDataCommunication(genealogicalDataCommunicationLines); |  | ||||||
|             if (genealogicalDataCommunication.Sex != sex) |  | ||||||
|                 continue; |  | ||||||
|             GenealogicalDataCommunication.WriteFile(personKeyFormatted, person.Name, individualsLines, isDefaultName, directory, genealogicalDataCommunication, verify, first); |  | ||||||
|         } |         } | ||||||
|         return results; |         return results; | ||||||
|     } |     } | ||||||
| @ -217,7 +148,48 @@ internal abstract class PersonContainer | |||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static List<Models.PersonContainer> GetPersonContainersGroup(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary<string, List<string>> individuals, char @char, string innerGroupDirectory, string[] personDisplayDirectories) |     private static void MaybeGenealogicalDataCommunicationWriteFile(string mappingDefaultName, string personBirthdayFormat, Dictionary<string, List<string>> individuals, PersonDirectory personDirectory, string personDisplayDirectoryName, bool isDefaultName, List<Models.PersonContainer> personContainers) | ||||||
|  |     { | ||||||
|  |         bool? first; | ||||||
|  |         bool? male; | ||||||
|  |         string[] matches; | ||||||
|  |         string? directory; | ||||||
|  |         bool verify = true; | ||||||
|  |         const int zero = 0; | ||||||
|  |         string personKeyFormatted; | ||||||
|  |         List<string>? individualsLines = null; | ||||||
|  |         Models.GenealogicalDataCommunication genealogicalDataCommunication; | ||||||
|  |         GenealogicalDataCommunicationLines? genealogicalDataCommunicationLines; | ||||||
|  |         foreach (Models.PersonContainer personContainer in personContainers) | ||||||
|  |         { | ||||||
|  |             if (personContainer.Key is null || personContainer.Birthdays is null || personContainer.Person is null || !personContainer.Birthdays.Any()) | ||||||
|  |                 continue; | ||||||
|  |             male = personDirectory.Sex == 'U' ? null : personDirectory.Sex == 'M' || (personDirectory.Sex == 'F' ? false : throw new Exception()); | ||||||
|  |             first = personDirectory.First == 'U' ? null : personDirectory.First == 'Y' || (personDirectory.First == 'N' ? false : throw new Exception()); | ||||||
|  |             if (first is null) | ||||||
|  |                 continue; | ||||||
|  |             isDefaultName = IPerson.IsDefaultName(mappingDefaultName, personDisplayDirectoryName); | ||||||
|  |             personKeyFormatted = IPersonBirthday.GetFormatted(personBirthdayFormat, personContainer.Key.Value); | ||||||
|  |             _ = individuals.TryGetValue(personKeyFormatted, out individualsLines); | ||||||
|  |             matches = (from l in personContainer.DisplayDirectoryAllFiles where l.Contains(personKeyFormatted) select l).ToArray(); | ||||||
|  |             if (!matches.Any()) | ||||||
|  |                 continue; | ||||||
|  |             directory = Path.GetDirectoryName(matches[zero]); | ||||||
|  |             if (directory is null) | ||||||
|  |                 continue; | ||||||
|  |             genealogicalDataCommunicationLines = individualsLines is null ? null : GenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(personContainer.Birthdays[0], individualsLines); | ||||||
|  |             if (genealogicalDataCommunicationLines is null) | ||||||
|  |                 continue; | ||||||
|  |             genealogicalDataCommunication = GenealogicalDataCommunication.GetGenealogicalDataCommunication(genealogicalDataCommunicationLines); | ||||||
|  |             if (genealogicalDataCommunication.Sex != personDirectory.Sex) | ||||||
|  |                 continue; | ||||||
|  |             if (genealogicalDataCommunication.Death is null && personDirectory.Status == 'D' || genealogicalDataCommunication.Death is not null && personDirectory.Status == 'A') | ||||||
|  |                 continue; | ||||||
|  |             GenealogicalDataCommunication.WriteFile(personKeyFormatted, personContainer.Person.Name, individualsLines, isDefaultName, directory, genealogicalDataCommunication, verify, first.Value); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private static List<Models.PersonContainer> GetPersonContainersGroup(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary<string, List<string>> individuals, PersonDirectory personDirectory, string[] personDisplayDirectories) | ||||||
|     { |     { | ||||||
|         List<Models.PersonContainer> results = new(); |         List<Models.PersonContainer> results = new(); | ||||||
|         string? minusOne; |         string? minusOne; | ||||||
| @ -229,6 +201,7 @@ internal abstract class PersonContainer | |||||||
|         string? personDisplayDirectoryName; |         string? personDisplayDirectoryName; | ||||||
|         Models.PersonContainer personContainer; |         Models.PersonContainer personContainer; | ||||||
|         string[] personDisplayDirectoryAllFiles; |         string[] personDisplayDirectoryAllFiles; | ||||||
|  |         List<Models.PersonContainer> personContainers; | ||||||
|         List<(string, Models.PersonBirthday)> collection; |         List<(string, Models.PersonBirthday)> collection; | ||||||
|         foreach (string personDisplayDirectory in personDisplayDirectories) |         foreach (string personDisplayDirectory in personDisplayDirectories) | ||||||
|         { |         { | ||||||
| @ -249,11 +222,15 @@ internal abstract class PersonContainer | |||||||
|             if (changes.Any(l => l is not null)) |             if (changes.Any(l => l is not null)) | ||||||
|                 continue; |                 continue; | ||||||
|             if (collection.Any()) |             if (collection.Any()) | ||||||
|                 results.AddRange(GetPersonContainersCollections(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, @char, innerGroupDirectory, numberSign, personDisplayDirectory, personDisplayDirectoryName, isDefaultName, approximateYears, collection)); |             { | ||||||
|  |                 personContainers = GetPersonContainersCollections(mappingDefaultName, facesFileNameExtension, personCharacters, personDirectory, numberSign, personDisplayDirectory, personDisplayDirectoryName, isDefaultName, approximateYears, collection); | ||||||
|  |                 MaybeGenealogicalDataCommunicationWriteFile(mappingDefaultName, personBirthdayFormat, individuals, personDirectory, personDisplayDirectoryName, isDefaultName, personContainers); | ||||||
|  |                 results.AddRange(personContainers); | ||||||
|  |             } | ||||||
|             else |             else | ||||||
|             { |             { | ||||||
|                 personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, isDefaultName); |                 personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, isDefaultName); | ||||||
|                 personContainer = new(approximateYears, @char, personDisplayDirectoryAllFiles, personDisplayDirectoryName); |                 personContainer = new(approximateYears, personDisplayDirectoryAllFiles, personDisplayDirectoryName, personDirectory); | ||||||
|                 results.Add(personContainer); |                 results.Add(personContainer); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -265,14 +242,36 @@ internal abstract class PersonContainer | |||||||
|     private static List<Models.PersonContainer> GetPersonContainersInnerGroups(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary<string, List<string>> individuals, string groupDirectory, string groupDirectoryName) |     private static List<Models.PersonContainer> GetPersonContainersInnerGroups(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary<string, List<string>> individuals, string groupDirectory, string groupDirectoryName) | ||||||
|     { |     { | ||||||
|         List<Models.PersonContainer> results = new(); |         List<Models.PersonContainer> results = new(); | ||||||
|  |         char @char; | ||||||
|  |         string[] segments; | ||||||
|         const int zero = 0; |         const int zero = 0; | ||||||
|  |         string innerGroupDirectoryName; | ||||||
|  |         PersonDirectory personDirectory; | ||||||
|         string[] personDisplayDirectories; |         string[] personDisplayDirectories; | ||||||
|  |         const char exclamationPoint = '!'; | ||||||
|         List<Models.PersonContainer> collection; |         List<Models.PersonContainer> collection; | ||||||
|         string[] innerGroupDirectories = Directory.GetDirectories(groupDirectory, "*", SearchOption.TopDirectoryOnly); |         string[] innerGroupDirectories = Directory.GetDirectories(groupDirectory, "*", SearchOption.TopDirectoryOnly); | ||||||
|         foreach (string innerGroupDirectory in innerGroupDirectories) |         foreach (string innerGroupDirectory in innerGroupDirectories) | ||||||
|         { |         { | ||||||
|  |             @char = groupDirectoryName[zero]; | ||||||
|  |             innerGroupDirectoryName = Path.GetFileName(innerGroupDirectory); | ||||||
|  |             if (@char == exclamationPoint) | ||||||
|  |                 personDirectory = new(@char, innerGroupDirectoryName, 'U', 'U', 'U'); | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 segments = innerGroupDirectoryName.Split('-'); | ||||||
|  |                 if (segments.Length != 3) | ||||||
|  |                     continue; | ||||||
|  |                 if (segments[zero] is not "Alive" and not "Dead" and not "Unknown") | ||||||
|  |                     continue; | ||||||
|  |                 if (segments[1] is not "Male" and not "Female" and not "Unknown") | ||||||
|  |                     continue; | ||||||
|  |                 if (segments[2] is not "Yes" and not "No" and not "Unknown") | ||||||
|  |                     continue; | ||||||
|  |                 personDirectory = new(@char, innerGroupDirectoryName, segments[zero][zero], segments[1][zero], segments[2][zero]); | ||||||
|  |             } | ||||||
|             personDisplayDirectories = Directory.GetDirectories(innerGroupDirectory, "*", SearchOption.TopDirectoryOnly); |             personDisplayDirectories = Directory.GetDirectories(innerGroupDirectory, "*", SearchOption.TopDirectoryOnly); | ||||||
|             collection = GetPersonContainersGroup(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, groupDirectoryName[zero], innerGroupDirectory, personDisplayDirectories); |             collection = GetPersonContainersGroup(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, personDirectory, personDisplayDirectories); | ||||||
|             results.AddRange(collection); |             results.AddRange(collection); | ||||||
|         } |         } | ||||||
|         return results; |         return results; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user