Removed
VerifyPersonContainersDisplayDirectoryAllFiles, SaveOne, SaveParents, GetRelations, CleanDisplayDirectoryAllFilesAndWriteTicksGed
This commit is contained in:
@ -11,6 +11,13 @@ internal abstract class GenealogicalDataCommunication
|
||||
|
||||
// ...
|
||||
|
||||
private record Record(Models.PersonContainer PersonContainer,
|
||||
string PersonKeyFormatted,
|
||||
string File,
|
||||
string RelationPersonKeyFormatted,
|
||||
string MergeWithLineTwo,
|
||||
string? RelationFullName);
|
||||
|
||||
private static string[] GetHeaderLines(string startsWith, string[] sourceLines)
|
||||
{
|
||||
List<string> results = new();
|
||||
@ -23,39 +30,6 @@ internal abstract class GenealogicalDataCommunication
|
||||
return results.ToArray();
|
||||
}
|
||||
|
||||
private static List<GenealogicalDataCommunicationRelation> GetRelations(string personBirthdayFormat, ReadOnlyDictionary<string, string> personKeyFormattedToPersonFullName, Dictionary<string, string> idToNick, List<string[]> familyGroupLines)
|
||||
{
|
||||
List<GenealogicalDataCommunicationRelation> results = new();
|
||||
string? nick;
|
||||
long? personKey;
|
||||
string relation;
|
||||
string? fullName;
|
||||
string[] segments;
|
||||
string[] familyLines;
|
||||
Models.PersonBirthday? personBirthday;
|
||||
for (int i = 0; i < familyGroupLines.Count; i++)
|
||||
{
|
||||
familyLines = familyGroupLines[i];
|
||||
for (int j = 0; j < familyLines.Length; j++)
|
||||
{
|
||||
segments = familyLines[j].Split('@');
|
||||
if (segments.First().Length < 3 || segments.Length != 3)
|
||||
continue;
|
||||
if (!idToNick.TryGetValue(segments[1], out nick))
|
||||
continue;
|
||||
relation = segments.First()[2..].Trim();
|
||||
personBirthday = IPersonBirthday.GetPersonBirthday(personBirthdayFormat, nick);
|
||||
personKey = personBirthday?.Value.Ticks;
|
||||
fullName = personKeyFormattedToPersonFullName.GetValueOrDefault(nick);
|
||||
if (j + 1 >= familyLines.Length || familyLines[j + 1].Length < 3 || familyLines[j + 1][..3] != "2 _")
|
||||
results.Add(new(i, relation, segments[1], nick, personKey, fullName, null));
|
||||
else
|
||||
results.Add(new(i, relation, segments[1], nick, personKey, fullName, familyLines[j + 1][2..]));
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private static ReadOnlyDictionary<string, string[]> Convert(Dictionary<string, List<string>> keyValuePairs)
|
||||
{
|
||||
Dictionary<string, string[]> results = new();
|
||||
@ -64,8 +38,9 @@ internal abstract class GenealogicalDataCommunication
|
||||
return new(results);
|
||||
}
|
||||
|
||||
internal static (string[], ReadOnlyDictionary<string, string[]>, List<string[]>, string[], List<GenealogicalDataCommunicationRelation> genealogicalDataCommunicationRelations) GetIndividuals(string personBirthdayFormat, string genealogicalDataCommunicationFile, ReadOnlyCollection<Models.PersonContainer> personContainers, bool requireNickName)
|
||||
internal static GenealogicalDataCommunicationCollections GetIndividuals(string genealogicalDataCommunicationFile, bool requireNickName)
|
||||
{
|
||||
GenealogicalDataCommunicationCollections result;
|
||||
ReadOnlyDictionary<string, string[]> results;
|
||||
string? nick;
|
||||
string[] segments;
|
||||
@ -75,7 +50,6 @@ internal abstract class GenealogicalDataCommunication
|
||||
List<string[]> familyGroupLines = new();
|
||||
Dictionary<string, string> idToNick = new();
|
||||
Dictionary<string, List<string>> keyValuePairs = new();
|
||||
ReadOnlyDictionary<string, string> personKeyFormattedToPersonFullName = IPersonContainer.GetPersonKeyFormattedToPersonFullName(personBirthdayFormat, personContainers);
|
||||
string[] sourceLines = string.IsNullOrEmpty(genealogicalDataCommunicationFile) || !File.Exists(genealogicalDataCommunicationFile) ? Array.Empty<string>() : File.ReadAllLines(genealogicalDataCommunicationFile);
|
||||
string[] headerLines = GetHeaderLines(startsWith, sourceLines);
|
||||
for (int i = headerLines.Length; i < sourceLines.Length; i++)
|
||||
@ -135,18 +109,18 @@ internal abstract class GenealogicalDataCommunication
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
results = Convert(keyValuePairs);
|
||||
List<GenealogicalDataCommunicationRelation> genealogicalDataCommunicationRelations = GetRelations(personBirthdayFormat, personKeyFormattedToPersonFullName, idToNick, familyGroupLines);
|
||||
return (headerLines, results, familyGroupLines, footerLines.ToArray(), genealogicalDataCommunicationRelations);
|
||||
result = new(headerLines, results, familyGroupLines, new(idToNick), footerLines.ToArray());
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static List<string> GetMappedLines(string personBirthdayFormat, string genealogicalDataCommunicationFile, ReadOnlyCollection<Models.PersonContainer> personContainers, bool requireNickName)
|
||||
internal static List<string> GetMappedLines(string genealogicalDataCommunicationFile, bool requireNickName)
|
||||
{
|
||||
List<string> results = new();
|
||||
Models.PersonBirthday personBirthday = new(DateTime.Now);
|
||||
GenealogicalDataCommunicationLines genealogicalDataCommunicationLines;
|
||||
(string[] headerLines, ReadOnlyDictionary<string, string[]> individuals, List<string[]> familyGroupLines, string[] footerLines, _) = GetIndividuals(personBirthdayFormat, genealogicalDataCommunicationFile, personContainers, requireNickName);
|
||||
results.AddRange(headerLines);
|
||||
foreach (KeyValuePair<string, string[]> keyValuePair in individuals)
|
||||
GenealogicalDataCommunicationCollections genealogicalDataCommunicationCollections = GetIndividuals(genealogicalDataCommunicationFile, requireNickName);
|
||||
results.AddRange(genealogicalDataCommunicationCollections.HeaderLines);
|
||||
foreach (KeyValuePair<string, string[]> keyValuePair in genealogicalDataCommunicationCollections.Individuals)
|
||||
{
|
||||
genealogicalDataCommunicationLines = GetGenealogicalDataCommunicationLines(personBirthday, keyValuePair.Value);
|
||||
if (!string.IsNullOrEmpty(genealogicalDataCommunicationLines.Id))
|
||||
@ -167,9 +141,9 @@ internal abstract class GenealogicalDataCommunication
|
||||
results.AddRange(genealogicalDataCommunicationLines.Death);
|
||||
results.AddRange(genealogicalDataCommunicationLines.Changed);
|
||||
}
|
||||
for (int i = 0; i < familyGroupLines.Count; i++)
|
||||
results.AddRange(familyGroupLines[i]);
|
||||
results.AddRange(footerLines);
|
||||
for (int i = 0; i < genealogicalDataCommunicationCollections.FamilyGroupLines.Count; i++)
|
||||
results.AddRange(genealogicalDataCommunicationCollections.FamilyGroupLines[i]);
|
||||
results.AddRange(genealogicalDataCommunicationCollections.FooterLines);
|
||||
return results;
|
||||
}
|
||||
|
||||
@ -301,94 +275,45 @@ internal abstract class GenealogicalDataCommunication
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static bool CleanDisplayDirectoryAllFilesAndWriteTicksGed(string mappingDefaultName, string personBirthdayFormat, ReadOnlyCollection<Models.PersonContainer> personContainers, string[] headerLines, List<string[]> familyGroupLines, string[] footerLines, long ticks, string a2PeopleContentDirectory)
|
||||
private static List<GenealogicalDataCommunicationRelation> GetRelations(string personBirthdayFormat, ReadOnlyCollection<Models.PersonContainer> personContainers, GenealogicalDataCommunicationCollections genealogicalDataCommunicationCollections)
|
||||
{
|
||||
bool result = false;
|
||||
string directory;
|
||||
string[] mdFiles;
|
||||
string[] txtFiles;
|
||||
const int zero = 0;
|
||||
string[] jsonFiles;
|
||||
string[] pGedFiles;
|
||||
string personKeyFormatted;
|
||||
List<string> lines = new();
|
||||
List<long> distinct = new();
|
||||
List<string> individualsLines;
|
||||
DateTime dateTime = new(ticks);
|
||||
Models.PersonBirthday personBirthday;
|
||||
Calendar calendar = new CultureInfo("en-US").Calendar;
|
||||
string weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
|
||||
lines.AddRange(headerLines);
|
||||
foreach (Models.PersonContainer personContainer in personContainers)
|
||||
List<GenealogicalDataCommunicationRelation> results = new();
|
||||
string? nick;
|
||||
long? personKey;
|
||||
string relation;
|
||||
string? fullName;
|
||||
string[] segments;
|
||||
string[] familyLines;
|
||||
Models.PersonBirthday? personBirthday;
|
||||
ReadOnlyDictionary<string, string> personKeyFormattedToPersonFullName = IPersonContainer.GetPersonKeyFormattedToPersonFullName(personBirthdayFormat, personContainers);
|
||||
for (int i = 0; i < genealogicalDataCommunicationCollections.FamilyGroupLines.Count; i++)
|
||||
{
|
||||
if (personContainer.Key is null || personContainer.Birthdays is null || personContainer.Person is null || !personContainer.Birthdays.Any())
|
||||
continue;
|
||||
if (IPerson.IsDefaultName(mappingDefaultName, personContainer.DisplayDirectoryName) || IPerson.IsDefaultName(mappingDefaultName, personContainer.Person))
|
||||
continue;
|
||||
if (distinct.Contains(personContainer.Key.Value))
|
||||
continue;
|
||||
distinct.Add(personContainer.Key.Value);
|
||||
personBirthday = personContainer.Birthdays[zero];
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(personBirthdayFormat, personBirthday);
|
||||
mdFiles = (from l in personContainer.DisplayDirectoryAllFiles where l.EndsWith(".md") select l).ToArray();
|
||||
txtFiles = (from l in personContainer.DisplayDirectoryAllFiles where l.EndsWith(".txt") select l).ToArray();
|
||||
jsonFiles = (from l in personContainer.DisplayDirectoryAllFiles where l.EndsWith(".json") select l).ToArray();
|
||||
pGedFiles = (from l in personContainer.DisplayDirectoryAllFiles where l.EndsWith(".pged") select l).ToArray();
|
||||
foreach (string mdFile in mdFiles)
|
||||
familyLines = genealogicalDataCommunicationCollections.FamilyGroupLines[i];
|
||||
for (int j = 0; j < familyLines.Length; j++)
|
||||
{
|
||||
if (string.IsNullOrEmpty(personKeyFormatted))
|
||||
segments = familyLines[j].Split('@');
|
||||
if (segments.First().Length < 3 || segments.Length != 3)
|
||||
continue;
|
||||
if (!mdFile.Contains(personKeyFormatted))
|
||||
{
|
||||
if (!result)
|
||||
result = true;
|
||||
File.Delete(mdFile);
|
||||
}
|
||||
}
|
||||
foreach (string pGedFile in pGedFiles)
|
||||
{
|
||||
if (string.IsNullOrEmpty(personKeyFormatted))
|
||||
if (!genealogicalDataCommunicationCollections.IdToNick.TryGetValue(segments[1], out nick))
|
||||
continue;
|
||||
if (!pGedFile.Contains(personKeyFormatted))
|
||||
{
|
||||
if (!result)
|
||||
result = true;
|
||||
File.Delete(pGedFile);
|
||||
continue;
|
||||
}
|
||||
individualsLines = File.ReadAllLines(pGedFile).ToList();
|
||||
foreach (string jsonFile in jsonFiles)
|
||||
{
|
||||
if (!result)
|
||||
result = true;
|
||||
File.Delete(jsonFile);
|
||||
}
|
||||
foreach (string txtFile in txtFiles)
|
||||
{
|
||||
if (new FileInfo(txtFile).Length == 0)
|
||||
{
|
||||
if (!result)
|
||||
result = true;
|
||||
File.Delete(txtFile);
|
||||
}
|
||||
}
|
||||
lines.AddRange(individualsLines);
|
||||
relation = segments.First()[2..].Trim();
|
||||
personBirthday = IPersonBirthday.GetPersonBirthday(personBirthdayFormat, nick);
|
||||
personKey = personBirthday?.Value.Ticks;
|
||||
fullName = personKeyFormattedToPersonFullName.GetValueOrDefault(nick);
|
||||
if (j + 1 >= familyLines.Length || familyLines[j + 1].Length < 3 || familyLines[j + 1][..3] != "2 _")
|
||||
results.Add(new(i, relation, segments[1], nick, personKey, fullName, null));
|
||||
else
|
||||
results.Add(new(i, relation, segments[1], nick, personKey, fullName, familyLines[j + 1][2..]));
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < familyGroupLines.Count; i++)
|
||||
lines.AddRange(familyGroupLines[i]);
|
||||
lines.AddRange(footerLines);
|
||||
directory = Path.Combine(a2PeopleContentDirectory, $"{dateTime.Year}-GenealogicalDataCommunication", $"{dateTime.Year}-Week-{weekOfYear}");
|
||||
if (!Directory.Exists(directory))
|
||||
_ = Directory.CreateDirectory(directory);
|
||||
File.WriteAllLines(Path.Combine(directory, $"{ticks}.ged"), lines);
|
||||
return result;
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static ReadOnlyDictionary<int, List<GenealogicalDataCommunicationRelation>> GetFamilyIndexToCollection(List<GenealogicalDataCommunicationRelation> genealogicalDataCommunicationRelations)
|
||||
internal static ReadOnlyDictionary<int, List<GenealogicalDataCommunicationRelation>> GetFamilyIndexToCollection(string personBirthdayFormat, ReadOnlyCollection<Models.PersonContainer> personContainers, GenealogicalDataCommunicationCollections genealogicalDataCommunicationCollections)
|
||||
{
|
||||
Dictionary<int, List<GenealogicalDataCommunicationRelation>> results = new();
|
||||
List<GenealogicalDataCommunicationRelation>? relations;
|
||||
List<GenealogicalDataCommunicationRelation> genealogicalDataCommunicationRelations = GetRelations(personBirthdayFormat, personContainers, genealogicalDataCommunicationCollections);
|
||||
foreach (GenealogicalDataCommunicationRelation genealogicalDataCommunicationRelation in genealogicalDataCommunicationRelations)
|
||||
{
|
||||
if (!results.TryGetValue(genealogicalDataCommunicationRelation.FamilyIndex, out relations))
|
||||
@ -551,7 +476,7 @@ internal abstract class GenealogicalDataCommunication
|
||||
ReadOnlyDictionary<string, string> personKeyFormattedToPersonFullName = IPersonContainer.GetPersonKeyFormattedToPersonFullName(personBirthdayFormat, personContainers);
|
||||
foreach (Models.PersonContainer personContainer in personContainers.OrderByDescending(l => l.Key))
|
||||
{
|
||||
if (personContainer.Key is null || personContainer.Birthdays is null || personContainer.Person is null || personContainer.PersonDirectory is null || !personContainer.Birthdays.Any())
|
||||
if (personContainer.Key is null || personContainer.Birthdays is null || personContainer.Person is null || personContainer.PersonDirectory is null || personContainer.Birthdays.Length == 0)
|
||||
continue;
|
||||
male = personContainer.PersonDirectory.Sex == 'U' ? null : personContainer.PersonDirectory.Sex == 'M' || (personContainer.PersonDirectory.Sex == 'F' ? false : throw new Exception());
|
||||
first = personContainer.PersonDirectory.First == 'U' ? null : personContainer.PersonDirectory.First == 'Y' || (personContainer.PersonDirectory.First == 'N' ? false : throw new Exception());
|
||||
|
Reference in New Issue
Block a user