Person Containers Inner Groups
This commit is contained in:
parent
b97a939c58
commit
e5484bdcc5
@ -114,12 +114,13 @@ internal abstract class GenealogicalDataCommunication
|
|||||||
internal static List<string> GetMappedLines(string genealogicalDataCommunicationFile, bool requireNickName)
|
internal static List<string> GetMappedLines(string genealogicalDataCommunicationFile, bool requireNickName)
|
||||||
{
|
{
|
||||||
List<string> results = new();
|
List<string> results = new();
|
||||||
|
Models.PersonBirthday personBirthday = new(DateTime.Now);
|
||||||
GenealogicalDataCommunicationLines genealogicalDataCommunicationLines;
|
GenealogicalDataCommunicationLines genealogicalDataCommunicationLines;
|
||||||
(string[] headerLines, Dictionary<string, List<string>> individuals, string[] footerLines) = GetIndividuals(genealogicalDataCommunicationFile, requireNickName);
|
(string[] headerLines, Dictionary<string, List<string>> individuals, string[] footerLines) = GetIndividuals(genealogicalDataCommunicationFile, requireNickName);
|
||||||
results.AddRange(headerLines);
|
results.AddRange(headerLines);
|
||||||
foreach (KeyValuePair<string, List<string>> keyValuePair in individuals)
|
foreach (KeyValuePair<string, List<string>> keyValuePair in individuals)
|
||||||
{
|
{
|
||||||
genealogicalDataCommunicationLines = GetGenealogicalDataCommunicationLines(keyValuePair.Value);
|
genealogicalDataCommunicationLines = GetGenealogicalDataCommunicationLines(personBirthday, keyValuePair.Value);
|
||||||
if (!string.IsNullOrEmpty(genealogicalDataCommunicationLines.Id))
|
if (!string.IsNullOrEmpty(genealogicalDataCommunicationLines.Id))
|
||||||
results.Add(genealogicalDataCommunicationLines.Id);
|
results.Add(genealogicalDataCommunicationLines.Id);
|
||||||
if (!string.IsNullOrEmpty(genealogicalDataCommunicationLines.UId))
|
if (!string.IsNullOrEmpty(genealogicalDataCommunicationLines.UId))
|
||||||
@ -142,7 +143,7 @@ internal abstract class GenealogicalDataCommunication
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static GenealogicalDataCommunicationLines GetGenealogicalDataCommunicationLines(List<string> individualsLines)
|
internal static GenealogicalDataCommunicationLines GetGenealogicalDataCommunicationLines(Models.PersonBirthday personBirthday, List<string> individualsLines)
|
||||||
{
|
{
|
||||||
GenealogicalDataCommunicationLines result;
|
GenealogicalDataCommunicationLines result;
|
||||||
string? idLine = null;
|
string? idLine = null;
|
||||||
@ -202,11 +203,16 @@ internal abstract class GenealogicalDataCommunication
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!birthLines.Any())
|
||||||
|
{
|
||||||
|
birthLines.Add("1 BIRT");
|
||||||
|
birthLines.Add($"2 DATE {personBirthday.Value:dd MMM yyyy}");
|
||||||
|
}
|
||||||
result = new(idLine, uIdLine, nameLine, givenNameLine, surNameLine, suffixLine, nickNameLine, sexLine, birthLines, deathLines, changedLines);
|
result = new(idLine, uIdLine, nameLine, givenNameLine, surNameLine, suffixLine, nickNameLine, sexLine, birthLines, deathLines, changedLines);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Models.GenealogicalDataCommunication GetGenealogicalDataCommunication(Models.PersonBirthday personBirthday, GenealogicalDataCommunicationLines genealogicalDataCommunicationLines)
|
internal static Models.GenealogicalDataCommunication GetGenealogicalDataCommunication(GenealogicalDataCommunicationLines genealogicalDataCommunicationLines)
|
||||||
{
|
{
|
||||||
Models.GenealogicalDataCommunication result;
|
Models.GenealogicalDataCommunication result;
|
||||||
DateTime? birth;
|
DateTime? birth;
|
||||||
@ -245,47 +251,20 @@ 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))
|
if (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 is not null ? birth : personBirthday.Value;
|
death ??= !genealogicalDataCommunicationLines.Death.Any(l => l == "1 DEAT Y") ? null : birth;
|
||||||
result = new(id, uId, name, givenName, surName, suffix, nickName, sex, birth, death, changed);
|
result = new(id, uId, name, givenName, surName, suffix, nickName, sex, birth, death, changed);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void WriteFile(string personKeyFormatted, Models.PersonBirthday personBirthday, Models.PersonName personName, List<string>? individualsLines, bool isDefaultName, string directory, Models.GenealogicalDataCommunication? genealogicalDataCommunication, bool verify)
|
internal static void WriteFile(string personKeyFormatted, Models.PersonName personName, List<string>? individualsLines, bool isDefaultName, string directory, Models.GenealogicalDataCommunication genealogicalDataCommunication, bool verify, bool first)
|
||||||
{
|
{
|
||||||
char sex;
|
if (verify)
|
||||||
bool alive;
|
|
||||||
bool first;
|
|
||||||
if (personKeyFormatted[^2..] is "15")
|
|
||||||
(sex, alive, first) = ('M', false, true);
|
|
||||||
else if (personKeyFormatted[^2..] is "14")
|
|
||||||
(sex, alive, first) = ('F', false, true);
|
|
||||||
else if (personKeyFormatted[^2..] is "05")
|
|
||||||
(sex, alive, first) = ('M', true, true);
|
|
||||||
else if (personKeyFormatted[^2..] is "04")
|
|
||||||
(sex, alive, first) = ('F', true, true);
|
|
||||||
else if (personKeyFormatted[^2..] is "23" or "21" or "19" or "17")
|
|
||||||
(sex, alive, first) = ('M', false, false);
|
|
||||||
else if (personKeyFormatted[^2..] is "22" or "20" or "18" or "16")
|
|
||||||
(sex, alive, first) = ('F', false, false);
|
|
||||||
else if (personKeyFormatted[^2..] is "13" or "11" or "09" or "07")
|
|
||||||
(sex, alive, first) = ('M', true, false);
|
|
||||||
else if (personKeyFormatted[^2..] is "12" or "10" or "08" or "06")
|
|
||||||
(sex, alive, first) = ('F', true, false);
|
|
||||||
else
|
|
||||||
(sex, alive, first) = ('U', true, false);
|
|
||||||
if (verify && genealogicalDataCommunication is not null)
|
|
||||||
{
|
{
|
||||||
if (genealogicalDataCommunication.SurName != personName.Last.Value)
|
if (genealogicalDataCommunication.SurName != personName.Last.Value)
|
||||||
throw new Exception($"{genealogicalDataCommunication.Name} - {personKeyFormatted}");
|
throw new Exception($"{genealogicalDataCommunication.Name} - {personKeyFormatted}");
|
||||||
if (genealogicalDataCommunication.Sex != sex)
|
|
||||||
throw new Exception($"{genealogicalDataCommunication.Name} - {personKeyFormatted}");
|
|
||||||
if (genealogicalDataCommunication.Death is not null && alive || genealogicalDataCommunication.Death is null && !alive)
|
|
||||||
throw new Exception($"{genealogicalDataCommunication.Name} - {personKeyFormatted}");
|
|
||||||
if (genealogicalDataCommunication.Birth is not null && genealogicalDataCommunication.Birth.Value.ToString("yyyy-MM-dd") != personBirthday.Value.ToString("yyyy-MM-dd"))
|
|
||||||
throw new Exception($"{genealogicalDataCommunication.Name} - {personKeyFormatted}");
|
|
||||||
}
|
}
|
||||||
string jrOrSr;
|
string jrOrSr;
|
||||||
if (string.IsNullOrEmpty(personName.Alias.Value))
|
if (string.IsNullOrEmpty(personName.Alias.Value))
|
||||||
@ -299,7 +278,7 @@ internal abstract class GenealogicalDataCommunication
|
|||||||
else
|
else
|
||||||
jrOrSr = string.Empty;
|
jrOrSr = string.Empty;
|
||||||
}
|
}
|
||||||
string code = IPersonBirthday.GetHour(alive, sex).ToString("00");
|
string code = IPersonBirthday.GetHour(genealogicalDataCommunication.Death is null, genealogicalDataCommunication.Sex).ToString("00");
|
||||||
if (directory.EndsWith("00"))
|
if (directory.EndsWith("00"))
|
||||||
directory = string.Concat(directory[..^2], code);
|
directory = string.Concat(directory[..^2], code);
|
||||||
else if (directory.EndsWith("01"))
|
else if (directory.EndsWith("01"))
|
||||||
@ -325,13 +304,17 @@ internal abstract class GenealogicalDataCommunication
|
|||||||
if (!string.IsNullOrEmpty(jrOrSr))
|
if (!string.IsNullOrEmpty(jrOrSr))
|
||||||
pGedLines.Add($"2 NSFX {jrOrSr.Trim()}");
|
pGedLines.Add($"2 NSFX {jrOrSr.Trim()}");
|
||||||
pGedLines.Add($"2 NICK {personKeyFormatted}");
|
pGedLines.Add($"2 NICK {personKeyFormatted}");
|
||||||
pGedLines.Add($"1 SEX {sex}");
|
pGedLines.Add($"1 SEX {genealogicalDataCommunication.Sex}");
|
||||||
if (!IPersonBirthday.IsCounterPersonBirthday(personBirthday))
|
if (genealogicalDataCommunication.Birth is not null)
|
||||||
{
|
{
|
||||||
pGedLines.Add("1 BIRT");
|
Models.PersonBirthday personBirthday = new(genealogicalDataCommunication.Birth.Value);
|
||||||
pGedLines.Add($"2 DATE {personBirthday.Value:dd MMM yyyy}");
|
if (!IPersonBirthday.IsCounterPersonBirthday(personBirthday))
|
||||||
|
{
|
||||||
|
pGedLines.Add("1 BIRT");
|
||||||
|
pGedLines.Add($"2 DATE {genealogicalDataCommunication.Birth.Value:dd MMM yyyy}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!alive)
|
if (genealogicalDataCommunication.Death is not null)
|
||||||
{
|
{
|
||||||
if (genealogicalDataCommunication?.Death is null || genealogicalDataCommunication.Death == genealogicalDataCommunication.Birth || IPersonBirthday.IsCounterPersonBirthday(new(genealogicalDataCommunication.Death.Value)))
|
if (genealogicalDataCommunication?.Death is null || genealogicalDataCommunication.Death == genealogicalDataCommunication.Birth || IPersonBirthday.IsCounterPersonBirthday(new(genealogicalDataCommunication.Death.Value)))
|
||||||
pGedLines.Add("1 DEAT Y");
|
pGedLines.Add("1 DEAT Y");
|
||||||
|
@ -5,25 +5,25 @@ public interface IGenealogicalDataCommunication
|
|||||||
|
|
||||||
// ...
|
// ...
|
||||||
|
|
||||||
void TestStatic_WriteFile(string personKeyFormatted, Models.PersonBirthday personBirthday, Models.PersonName personName, List<string>? individualsLines, bool isDefaultName, string directory, Models.GenealogicalDataCommunication? genealogicalDataCommunication, bool verify) =>
|
void TestStatic_WriteFile(string personKeyFormatted, Models.PersonName personName, List<string>? individualsLines, bool isDefaultName, string directory, Models.GenealogicalDataCommunication genealogicalDataCommunication, bool verify, bool first) =>
|
||||||
WriteFile(personKeyFormatted, personBirthday, personName, individualsLines, isDefaultName, directory, genealogicalDataCommunication, verify);
|
WriteFile(personKeyFormatted, personName, individualsLines, isDefaultName, directory, genealogicalDataCommunication, verify, first);
|
||||||
static void WriteFile(string personKeyFormatted, Models.PersonBirthday personBirthday, Models.PersonName personName, List<string>? individualsLines, bool isDefaultName, string directory, Models.GenealogicalDataCommunication? genealogicalDataCommunication, bool verify) =>
|
static void WriteFile(string personKeyFormatted, Models.PersonName personName, List<string>? individualsLines, bool isDefaultName, string directory, Models.GenealogicalDataCommunication genealogicalDataCommunication, bool verify, bool first) =>
|
||||||
GenealogicalDataCommunication.WriteFile(personKeyFormatted, personBirthday, personName, individualsLines, isDefaultName, directory, genealogicalDataCommunication, verify);
|
GenealogicalDataCommunication.WriteFile(personKeyFormatted, personName, individualsLines, isDefaultName, directory, genealogicalDataCommunication, verify, first);
|
||||||
|
|
||||||
List<string> TestStatic_GetMappedLines(string genealogicalDataCommunicationFile, bool requireNickName) =>
|
List<string> TestStatic_GetMappedLines(string genealogicalDataCommunicationFile, bool requireNickName) =>
|
||||||
GetMappedLines(genealogicalDataCommunicationFile, requireNickName);
|
GetMappedLines(genealogicalDataCommunicationFile, requireNickName);
|
||||||
static List<string> GetMappedLines(string genealogicalDataCommunicationFile, bool requireNickName) =>
|
static List<string> GetMappedLines(string genealogicalDataCommunicationFile, bool requireNickName) =>
|
||||||
GenealogicalDataCommunication.GetMappedLines(genealogicalDataCommunicationFile, requireNickName);
|
GenealogicalDataCommunication.GetMappedLines(genealogicalDataCommunicationFile, requireNickName);
|
||||||
|
|
||||||
GenealogicalDataCommunicationLines TestStatic_GetGenealogicalDataCommunicationLines(List<string> individualsLines) =>
|
GenealogicalDataCommunicationLines TestStatic_GetGenealogicalDataCommunicationLines(Models.PersonBirthday personBirthday, List<string> individualsLines) =>
|
||||||
GetGenealogicalDataCommunicationLines(individualsLines);
|
GetGenealogicalDataCommunicationLines(individualsLines);
|
||||||
static GenealogicalDataCommunicationLines GetGenealogicalDataCommunicationLines(List<string> individualsLines) =>
|
static GenealogicalDataCommunicationLines GetGenealogicalDataCommunicationLines(List<string> individualsLines) =>
|
||||||
GenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(individualsLines);
|
GenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(new(DateTime.Now), individualsLines);
|
||||||
|
|
||||||
Models.GenealogicalDataCommunication TestStatic_GetGenealogicalDataCommunication(Models.PersonBirthday personBirthday, GenealogicalDataCommunicationLines genealogicalDataCommunicationLines) =>
|
Models.GenealogicalDataCommunication TestStatic_GetGenealogicalDataCommunication(GenealogicalDataCommunicationLines genealogicalDataCommunicationLines) =>
|
||||||
GetGenealogicalDataCommunication(personBirthday, genealogicalDataCommunicationLines);
|
GetGenealogicalDataCommunication(genealogicalDataCommunicationLines);
|
||||||
static Models.GenealogicalDataCommunication GetGenealogicalDataCommunication(Models.PersonBirthday personBirthday, GenealogicalDataCommunicationLines genealogicalDataCommunicationLines) =>
|
static Models.GenealogicalDataCommunication GetGenealogicalDataCommunication(GenealogicalDataCommunicationLines genealogicalDataCommunicationLines) =>
|
||||||
GenealogicalDataCommunication.GetGenealogicalDataCommunication(personBirthday, genealogicalDataCommunicationLines);
|
GenealogicalDataCommunication.GetGenealogicalDataCommunication(genealogicalDataCommunicationLines);
|
||||||
|
|
||||||
(string[] headerLines, Dictionary<string, List<string>> individuals, string[] footerLines) TestStatic_GetIndividuals(string genealogicalDataCommunicationFile, bool requireNickName) =>
|
(string[] headerLines, Dictionary<string, List<string>> individuals, string[] footerLines) TestStatic_GetIndividuals(string genealogicalDataCommunicationFile, bool requireNickName) =>
|
||||||
GetIndividuals(genealogicalDataCommunicationFile, requireNickName);
|
GetIndividuals(genealogicalDataCommunicationFile, requireNickName);
|
||||||
|
@ -90,19 +90,26 @@ 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, 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 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)
|
||||||
{
|
{
|
||||||
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[] matches;
|
||||||
string? directory;
|
string? directory;
|
||||||
const int zero = 0;
|
string[] segments;
|
||||||
bool verify = true;
|
bool verify = true;
|
||||||
|
const int zero = 0;
|
||||||
Models.Person person;
|
Models.Person person;
|
||||||
|
string innerGroupDirectoryName;
|
||||||
|
const char exclamationPoint = '!';
|
||||||
List<string>? individualsLines = null;
|
List<string>? individualsLines = null;
|
||||||
Models.PersonContainer personContainer;
|
Models.PersonContainer personContainer;
|
||||||
Models.PersonBirthday[] orderedPersonBirthdays;
|
Models.PersonBirthday[] orderedPersonBirthdays;
|
||||||
Models.GenealogicalDataCommunication? genealogicalDataCommunication;
|
Models.GenealogicalDataCommunication genealogicalDataCommunication;
|
||||||
GenealogicalDataCommunicationLines? genealogicalDataCommunicationLines;
|
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)
|
||||||
@ -129,9 +136,52 @@ internal abstract class PersonContainer
|
|||||||
directory = Path.GetDirectoryName(matches[zero]);
|
directory = Path.GetDirectoryName(matches[zero]);
|
||||||
if (directory is null)
|
if (directory is null)
|
||||||
continue;
|
continue;
|
||||||
genealogicalDataCommunicationLines = individualsLines is null ? null : GenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(individualsLines);
|
if (@char == exclamationPoint)
|
||||||
genealogicalDataCommunication = genealogicalDataCommunicationLines is null ? null : GenealogicalDataCommunication.GetGenealogicalDataCommunication(personBirthday, genealogicalDataCommunicationLines);
|
(sex, alive, male, first) = ('U', null, null, true);
|
||||||
GenealogicalDataCommunication.WriteFile(personKeyFormatted, personBirthday, person.Name, individualsLines, isDefaultName, directory, genealogicalDataCommunication, verify);
|
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;
|
||||||
}
|
}
|
||||||
@ -167,7 +217,7 @@ 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[] personDisplayDirectories)
|
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)
|
||||||
{
|
{
|
||||||
List<Models.PersonContainer> results = new();
|
List<Models.PersonContainer> results = new();
|
||||||
string? minusOne;
|
string? minusOne;
|
||||||
@ -199,7 +249,7 @@ 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, numberSign, personDisplayDirectory, personDisplayDirectoryName, isDefaultName, approximateYears, collection));
|
results.AddRange(GetPersonContainersCollections(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, @char, innerGroupDirectory, numberSign, personDisplayDirectory, personDisplayDirectoryName, isDefaultName, approximateYears, collection));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, isDefaultName);
|
personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, isDefaultName);
|
||||||
@ -212,12 +262,27 @@ internal abstract class PersonContainer
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
const int zero = 0;
|
||||||
|
string[] personDisplayDirectories;
|
||||||
|
List<Models.PersonContainer> collection;
|
||||||
|
string[] innerGroupDirectories = Directory.GetDirectories(groupDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
|
foreach (string innerGroupDirectory in innerGroupDirectories)
|
||||||
|
{
|
||||||
|
personDisplayDirectories = Directory.GetDirectories(innerGroupDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
|
collection = GetPersonContainersGroup(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, groupDirectoryName[zero], innerGroupDirectory, personDisplayDirectories);
|
||||||
|
results.AddRange(collection);
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
private static Models.PersonContainer[] GetPersonContainersGroups(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary<string, List<string>> individuals, string[] groupDirectories)
|
private static Models.PersonContainer[] GetPersonContainersGroups(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary<string, List<string>> individuals, string[] groupDirectories)
|
||||||
{
|
{
|
||||||
Models.PersonContainer[] results;
|
Models.PersonContainer[] results;
|
||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
string groupDirectoryName;
|
string groupDirectoryName;
|
||||||
string[] personDisplayDirectories;
|
|
||||||
List<Models.PersonContainer> collection;
|
List<Models.PersonContainer> collection;
|
||||||
List<Models.PersonContainer> personContainers = new();
|
List<Models.PersonContainer> personContainers = new();
|
||||||
foreach (string groupDirectory in groupDirectories)
|
foreach (string groupDirectory in groupDirectories)
|
||||||
@ -225,8 +290,7 @@ internal abstract class PersonContainer
|
|||||||
groupDirectoryName = Path.GetFileName(groupDirectory);
|
groupDirectoryName = Path.GetFileName(groupDirectory);
|
||||||
if (!personCharacters.Contains(groupDirectoryName[zero]))
|
if (!personCharacters.Contains(groupDirectoryName[zero]))
|
||||||
continue;
|
continue;
|
||||||
personDisplayDirectories = Directory.GetDirectories(groupDirectory, "*", SearchOption.TopDirectoryOnly);
|
collection = GetPersonContainersInnerGroups(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, groupDirectory, groupDirectoryName);
|
||||||
collection = GetPersonContainersGroup(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, groupDirectoryName[zero], personDisplayDirectories);
|
|
||||||
personContainers.AddRange(collection);
|
personContainers.AddRange(collection);
|
||||||
}
|
}
|
||||||
results = (from l in personContainers orderby l.Key is not null, l.Key select l).ToArray();
|
results = (from l in personContainers orderby l.Key is not null, l.Key select l).ToArray();
|
||||||
|
@ -249,7 +249,6 @@ public partial class UnitTestHardCoded
|
|||||||
{
|
{
|
||||||
List<string> mappedLines;
|
List<string> mappedLines;
|
||||||
Dictionary<string, List<string>> individuals;
|
Dictionary<string, List<string>> individuals;
|
||||||
PersonBirthday personBirthday = new(DateTime.Now);
|
|
||||||
GenealogicalDataCommunication genealogicalDataCommunication;
|
GenealogicalDataCommunication genealogicalDataCommunication;
|
||||||
GenealogicalDataCommunicationLines genealogicalDataCommunicationLines;
|
GenealogicalDataCommunicationLines genealogicalDataCommunicationLines;
|
||||||
List<(bool, string)> genealogicalDataCommunicationFiles = new()
|
List<(bool, string)> genealogicalDataCommunicationFiles = new()
|
||||||
@ -272,7 +271,7 @@ public partial class UnitTestHardCoded
|
|||||||
{
|
{
|
||||||
genealogicalDataCommunicationLines = IGenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(keyValuePair.Value);
|
genealogicalDataCommunicationLines = IGenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(keyValuePair.Value);
|
||||||
Assert.IsNotNull(genealogicalDataCommunicationLines.Name);
|
Assert.IsNotNull(genealogicalDataCommunicationLines.Name);
|
||||||
genealogicalDataCommunication = IGenealogicalDataCommunication.GetGenealogicalDataCommunication(personBirthday, genealogicalDataCommunicationLines);
|
genealogicalDataCommunication = IGenealogicalDataCommunication.GetGenealogicalDataCommunication(genealogicalDataCommunicationLines);
|
||||||
Assert.IsNotNull(genealogicalDataCommunication.Name);
|
Assert.IsNotNull(genealogicalDataCommunication.Name);
|
||||||
}
|
}
|
||||||
mappedLines = IGenealogicalDataCommunication.GetMappedLines(genealogicalDataCommunicationFile, requireNickName);
|
mappedLines = IGenealogicalDataCommunication.GetMappedLines(genealogicalDataCommunicationFile, requireNickName);
|
||||||
@ -290,10 +289,10 @@ public partial class UnitTestHardCoded
|
|||||||
string ageGroup;
|
string ageGroup;
|
||||||
string fileName;
|
string fileName;
|
||||||
string? directory;
|
string? directory;
|
||||||
|
bool first = true;
|
||||||
PersonName? personName;
|
PersonName? personName;
|
||||||
string personKeyFormatted;
|
string personKeyFormatted;
|
||||||
bool isDefaultName = false;
|
bool isDefaultName = false;
|
||||||
PersonBirthday personBirthday;
|
|
||||||
DateTime dateTime = DateTime.Now;
|
DateTime dateTime = DateTime.Now;
|
||||||
Dictionary<string, List<string>> individuals;
|
Dictionary<string, List<string>> individuals;
|
||||||
GenealogicalDataCommunication genealogicalDataCommunication;
|
GenealogicalDataCommunication genealogicalDataCommunication;
|
||||||
@ -318,18 +317,16 @@ public partial class UnitTestHardCoded
|
|||||||
(_, individuals, _) = IGenealogicalDataCommunication.GetIndividuals(genealogicalDataCommunicationFile, requireNickName);
|
(_, individuals, _) = IGenealogicalDataCommunication.GetIndividuals(genealogicalDataCommunicationFile, requireNickName);
|
||||||
foreach (KeyValuePair<string, List<string>> keyValuePair in individuals)
|
foreach (KeyValuePair<string, List<string>> keyValuePair in individuals)
|
||||||
{
|
{
|
||||||
personBirthday = new(dateTime);
|
|
||||||
genealogicalDataCommunicationLines = IGenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(keyValuePair.Value);
|
genealogicalDataCommunicationLines = IGenealogicalDataCommunication.GetGenealogicalDataCommunicationLines(keyValuePair.Value);
|
||||||
Assert.IsNotNull(genealogicalDataCommunicationLines.Name);
|
Assert.IsNotNull(genealogicalDataCommunicationLines.Name);
|
||||||
genealogicalDataCommunication = IGenealogicalDataCommunication.GetGenealogicalDataCommunication(personBirthday, genealogicalDataCommunicationLines);
|
genealogicalDataCommunication = IGenealogicalDataCommunication.GetGenealogicalDataCommunication(genealogicalDataCommunicationLines);
|
||||||
Assert.IsNotNull(genealogicalDataCommunication.Name);
|
Assert.IsNotNull(genealogicalDataCommunication.Name);
|
||||||
if (genealogicalDataCommunication.Birth is null)
|
if (genealogicalDataCommunication.Birth is null)
|
||||||
continue;
|
continue;
|
||||||
personName = IPersonName.GetPersonName(genealogicalDataCommunication);
|
personName = IPersonName.GetPersonName(genealogicalDataCommunication);
|
||||||
if (personName is null)
|
if (personName is null)
|
||||||
continue;
|
continue;
|
||||||
personBirthday = new(genealogicalDataCommunication.Birth.Value);
|
personKey = genealogicalDataCommunication.Birth.Value.Ticks;
|
||||||
personKey = personBirthday.Value.Ticks;
|
|
||||||
(age, _) = IAge.GetAge(dateTime.Ticks, personKey);
|
(age, _) = IAge.GetAge(dateTime.Ticks, personKey);
|
||||||
personKeyFormatted = IPersonBirthday.GetFormatted(_PropertyConfiguration.PersonBirthdayFormat, personKey);
|
personKeyFormatted = IPersonBirthday.GetFormatted(_PropertyConfiguration.PersonBirthdayFormat, personKey);
|
||||||
if (age < 25)
|
if (age < 25)
|
||||||
@ -345,13 +342,13 @@ public partial class UnitTestHardCoded
|
|||||||
directory = Path.Combine(saveDirectory, fileName, ageGroup, $"{personName.First.Value} {personName.Last.Value}^{age}", personKeyFormatted);
|
directory = Path.Combine(saveDirectory, fileName, ageGroup, $"{personName.First.Value} {personName.Last.Value}^{age}", personKeyFormatted);
|
||||||
if (!Directory.Exists(directory))
|
if (!Directory.Exists(directory))
|
||||||
_ = Directory.CreateDirectory(directory);
|
_ = Directory.CreateDirectory(directory);
|
||||||
IGenealogicalDataCommunication.WriteFile(personKeyFormatted, personBirthday, personName, keyValuePair.Value, isDefaultName, directory, genealogicalDataCommunication, verify);
|
IGenealogicalDataCommunication.WriteFile(personKeyFormatted, personName, keyValuePair.Value, isDefaultName, directory, genealogicalDataCommunication, verify, first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
NonThrowTryCatch();
|
NonThrowTryCatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
private string[] GetFamily() => new string[]{
|
private static string[] GetFamily() => new string[]{
|
||||||
"UBertha Scott (Barry Scott) 10/2/1900-8/19/1993",
|
"UBertha Scott (Barry Scott) 10/2/1900-8/19/1993",
|
||||||
"MEarl Daniel Herman 1/5/1918-10/19/1962",
|
"MEarl Daniel Herman 1/5/1918-10/19/1962",
|
||||||
"FGlendola Koch 8/10/1919-5/16/1910",
|
"FGlendola Koch 8/10/1919-5/16/1910",
|
||||||
@ -645,12 +642,11 @@ public partial class UnitTestHardCoded
|
|||||||
public void TestMethodFamily()
|
public void TestMethodFamily()
|
||||||
{
|
{
|
||||||
int age;
|
int age;
|
||||||
char sex;
|
|
||||||
int hours;
|
|
||||||
bool alive;
|
|
||||||
string name;
|
string name;
|
||||||
long personKey;
|
long personKey;
|
||||||
|
DateTime? death;
|
||||||
string ageGroup;
|
string ageGroup;
|
||||||
|
bool first = true;
|
||||||
string? directory;
|
string? directory;
|
||||||
bool verify = false;
|
bool verify = false;
|
||||||
string[] dateSegments;
|
string[] dateSegments;
|
||||||
@ -658,17 +654,14 @@ public partial class UnitTestHardCoded
|
|||||||
PersonName? personName;
|
PersonName? personName;
|
||||||
string[] spaceSegments;
|
string[] spaceSegments;
|
||||||
string personKeyFormatted;
|
string personKeyFormatted;
|
||||||
List<string> lines = new();
|
|
||||||
bool isDefaultName = false;
|
bool isDefaultName = false;
|
||||||
PersonBirthday personBirthday;
|
PersonBirthday personBirthday;
|
||||||
string[] family = GetFamily();
|
string[] family = GetFamily();
|
||||||
DateTime dateTime = DateTime.Now;
|
DateTime dateTime = DateTime.Now;
|
||||||
|
GenealogicalDataCommunication genealogicalDataCommunication;
|
||||||
string saveDirectory = $"D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Norman-{dateTime.Ticks}";
|
string saveDirectory = $"D:/1) Images A/Images-9b89679-Results/A2) People/9b89679/([])/Norman-{dateTime.Ticks}";
|
||||||
foreach (string familyMember in family)
|
foreach (string familyMember in family)
|
||||||
{
|
{
|
||||||
sex = familyMember[0];
|
|
||||||
if (sex is not 'U' and not 'F' and not 'M')
|
|
||||||
continue;
|
|
||||||
spaceSegments = familyMember[1..].Split(' ');
|
spaceSegments = familyMember[1..].Split(' ');
|
||||||
dateSegments = spaceSegments[^1].Split('-');
|
dateSegments = spaceSegments[^1].Split('-');
|
||||||
name = string.Join(' ', spaceSegments[..^1]);
|
name = string.Join(' ', spaceSegments[..^1]);
|
||||||
@ -678,22 +671,17 @@ public partial class UnitTestHardCoded
|
|||||||
if (personName is null)
|
if (personName is null)
|
||||||
continue;
|
continue;
|
||||||
personBirthday = new(parseDateTime);
|
personBirthday = new(parseDateTime);
|
||||||
if (dateSegments.Length == 1)
|
personKey = personBirthday.Value.Ticks;
|
||||||
{
|
|
||||||
lines.Add($"{name}\t{sex}\t{personBirthday.Value:yyyy-MM-dd}\tnull");
|
|
||||||
alive = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!DateTime.TryParse(dateSegments[1], out parseDateTime))
|
|
||||||
continue;
|
|
||||||
alive = false;
|
|
||||||
lines.Add($"{name}\t{sex}\t{personBirthday.Value:yyyy-MM-dd}\t{parseDateTime:yyyy-MM-dd}");
|
|
||||||
}
|
|
||||||
hours = IPersonBirthday.GetHour(alive, sex);
|
|
||||||
personKey = personBirthday.Value.AddHours(hours).Ticks;
|
|
||||||
personKeyFormatted = IPersonBirthday.GetFormatted(_PropertyConfiguration.PersonBirthdayFormat, personKey);
|
personKeyFormatted = IPersonBirthday.GetFormatted(_PropertyConfiguration.PersonBirthdayFormat, personKey);
|
||||||
(age, _) = IAge.GetAge(dateTime.Ticks, personKey);
|
(age, _) = IAge.GetAge(dateTime.Ticks, personKey);
|
||||||
|
if (dateSegments.Length == 1)
|
||||||
|
death = null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!DateTime.TryParse(dateSegments[0], out parseDateTime))
|
||||||
|
continue;
|
||||||
|
death = parseDateTime;
|
||||||
|
}
|
||||||
if (age < 25)
|
if (age < 25)
|
||||||
ageGroup = "1) Less-25";
|
ageGroup = "1) Less-25";
|
||||||
else if (age < 50)
|
else if (age < 50)
|
||||||
@ -707,9 +695,33 @@ public partial class UnitTestHardCoded
|
|||||||
directory = Path.Combine(saveDirectory, "Norman", ageGroup, $"{personName.First.Value} {personName.Last.Value}^{age}", personKeyFormatted);
|
directory = Path.Combine(saveDirectory, "Norman", ageGroup, $"{personName.First.Value} {personName.Last.Value}^{age}", personKeyFormatted);
|
||||||
if (!Directory.Exists(directory))
|
if (!Directory.Exists(directory))
|
||||||
_ = Directory.CreateDirectory(directory);
|
_ = Directory.CreateDirectory(directory);
|
||||||
IGenealogicalDataCommunication.WriteFile(personKeyFormatted, personBirthday, personName, null, isDefaultName, directory, null, verify);
|
genealogicalDataCommunication = new(null, null, null, null, null, null, null, 'U', personBirthday.Value, death, null);
|
||||||
|
IGenealogicalDataCommunication.WriteFile(personKeyFormatted, personName, null, isDefaultName, directory, genealogicalDataCommunication, verify, first);
|
||||||
}
|
}
|
||||||
File.WriteAllLines(Path.Combine(saveDirectory, "tsv.txt"), lines);
|
NonThrowTryCatch();
|
||||||
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void TestMethodGroup()
|
||||||
|
{
|
||||||
|
// const int Number = 0;
|
||||||
|
// const int Partial = 1;
|
||||||
|
// const int Approximate = 5;
|
||||||
|
// const int Exact = 9;
|
||||||
|
// //
|
||||||
|
// const int Alive = 0;
|
||||||
|
// const int Dead = 5;
|
||||||
|
// //
|
||||||
|
// const int Unknown = 0;
|
||||||
|
// const int Male = 5;
|
||||||
|
// const int Female = 9;
|
||||||
|
// foreach (var item in new string[] { "Number", "Partial", "Approximate", "Exact" })
|
||||||
|
foreach (string status in new string[] { "Alive", "Dead" })
|
||||||
|
{
|
||||||
|
foreach (string sex in new string[] { "Unknown", "Male", "Female" })
|
||||||
|
_ = Directory.CreateDirectory($"D:/{status}-{sex}");
|
||||||
|
}
|
||||||
|
|
||||||
NonThrowTryCatch();
|
NonThrowTryCatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user