SaveParents

Removed GetFilteredOutMapped
Removed GetNonSpecificPeopleCollection
This commit is contained in:
2023-07-26 23:34:58 -07:00
parent a18fb1e756
commit 9071784255
14 changed files with 478 additions and 338 deletions

View File

@ -261,7 +261,12 @@ internal abstract class MapLogic
if (newestPersonKeyFormatted is null)
{
if (!IPerson.IsDefaultName(configuration.MappingDefaultName, personDisplayDirectoryNames[^1]))
{
foreach (string file in files)
File.Move(file, $"{file}.unk");
continue;
throw new NotImplementedException("Should this happen?");
}
}
if (personKeyFormatted.Length != configuration.PersonBirthdayFormat.Length)
continue;
@ -708,6 +713,92 @@ internal abstract class MapLogic
}
}
private static void SaveParents(ReadOnlyDictionary<int, List<GenealogicalDataCommunicationRelation>> familyIndexToCollection, List<GenealogicalDataCommunicationRelation> collection, string personKeyFormatted, string[] filteredDisplayDirectoryAllFiles)
{
string? directory;
string checkDirectory;
string? mergeWithLineTwo;
List<GenealogicalDataCommunicationRelation>? relations;
const string wife = IGenealogicalDataCommunication.Wife;
const string child = IGenealogicalDataCommunication.Child;
const string husband = IGenealogicalDataCommunication.Husband;
foreach (GenealogicalDataCommunicationRelation genealogicalDataCommunicationRelation in collection)
{
if (!filteredDisplayDirectoryAllFiles.Any())
continue;
directory = Path.GetDirectoryName(filteredDisplayDirectoryAllFiles.First());
if (string.IsNullOrEmpty(directory))
continue;
if (genealogicalDataCommunicationRelation.Relation != child)
continue;
if (genealogicalDataCommunicationRelation.NickName != personKeyFormatted)
continue;
if (!familyIndexToCollection.TryGetValue(genealogicalDataCommunicationRelation.FamilyIndex, out relations))
continue;
foreach (GenealogicalDataCommunicationRelation relation in relations)
{
if (relation.FamilyIndex != genealogicalDataCommunicationRelation.FamilyIndex)
continue;
if (relation.Relation is not husband and not wife)
continue;
checkDirectory = Path.Combine(directory, relation.NickName);
if (!Directory.Exists(checkDirectory))
{
_ = Directory.CreateDirectory(checkDirectory);
mergeWithLineTwo = IGenealogicalDataCommunication.GetMergeWithLineTwo(genealogicalDataCommunicationRelation, relation);
File.WriteAllText(Path.Combine(checkDirectory, $"{mergeWithLineTwo}.rel"), relation.FullName);
}
}
}
}
private static void SaveOne(Configuration configuration, ReadOnlyDictionary<int, List<GenealogicalDataCommunicationRelation>> familyIndexToCollection, List<LocationContainer<MetadataExtractor.Directory>> locationContainers, Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection)
{
string checkFile;
string? directory;
string personKeyFormatted;
List<long> distinct = new();
List<PersonContainer>? personContainers;
string[] filteredDisplayDirectoryAllFiles;
List<GenealogicalDataCommunicationRelation>? collection;
string checkExtension = $"{configuration.FacesFileNameExtension}{configuration.FacesHiddenFileNameExtension}";
ReadOnlyDictionary<long, List<GenealogicalDataCommunicationRelation>> personKeyToCollection = IGenealogicalDataCommunication.GetCollection(configuration.PersonBirthdayFormat, familyIndexToCollection);
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
{
if (!locationContainer.File.EndsWith(configuration.FacesFileNameExtension))
continue;
if (distinct.Contains(locationContainer.PersonKey))
continue;
if (!personKeyToPersonContainerCollection.TryGetValue(locationContainer.PersonKey, out personContainers))
continue;
foreach (PersonContainer personContainer in personContainers)
{
if (personContainer.Key is null)
continue;
if (personKeyToCollection.TryGetValue(personContainer.Key.Value, out collection))
{
personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, personContainer.Key.Value);
SaveParents(familyIndexToCollection, collection, personKeyFormatted, personContainer.DisplayDirectoryAllFiles.Where(l => l.EndsWith(checkExtension)).ToArray());
}
if (personContainer.DisplayDirectoryAllFiles.Any(l => l.EndsWith(checkExtension)))
continue;
filteredDisplayDirectoryAllFiles = personContainer.DisplayDirectoryAllFiles.Where(l => l.EndsWith(".pged")).ToArray();
if (!filteredDisplayDirectoryAllFiles.Any())
continue;
directory = Path.GetDirectoryName(filteredDisplayDirectoryAllFiles.First());
if (string.IsNullOrEmpty(directory))
continue;
checkFile = Path.Combine(directory, $"{Path.GetFileName(locationContainer.File)}{configuration.FacesHiddenFileNameExtension}");
if (File.Exists(checkFile))
break;
File.Copy(locationContainer.File, checkFile);
File.Delete(filteredDisplayDirectoryAllFiles.First());
break;
}
distinct.Add(locationContainer.PersonKey);
}
}
private static void LookForPossibleDuplicates(Configuration configuration, List<LocationContainer<MetadataExtractor.Directory>> locationContainers)
{
string key;
@ -775,7 +866,7 @@ internal abstract class MapLogic
return results;
}
internal static void Set(int maxDegreeOfParallelism, Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, string? a2PeopleSingletonDirectory, string eDistanceContentDirectory, Dictionary<long, PersonContainer> personKeyToPersonContainer, List<PersonContainer> notMappedPersonContainers, Dictionary<int, List<int>> skipCollection, Dictionary<int, List<int>> skipNotSkipCollection, List<LocationContainer<MetadataExtractor.Directory>> locationContainers, Dictionary<int, Dictionary<int, PersonContainer[]>> idThenWholePercentagesToPersonContainers)
internal static void Set(int maxDegreeOfParallelism, Configuration configuration, long ticks, ReadOnlyDictionary<int, List<GenealogicalDataCommunicationRelation>> familyIndexToCollection, ReadOnlyCollection<PersonContainer> personContainers, string? a2PeopleSingletonDirectory, string eDistanceContentDirectory, Dictionary<long, PersonContainer> personKeyToPersonContainer, List<PersonContainer> notMappedPersonContainers, Dictionary<int, List<int>> skipCollection, Dictionary<int, List<int>> skipNotSkipCollection, List<LocationContainer<MetadataExtractor.Directory>> locationContainers, Dictionary<int, Dictionary<int, PersonContainer[]>> idThenWholePercentagesToPersonContainers)
{
string message;
int totalSeconds;
@ -808,6 +899,8 @@ internal abstract class MapLogic
}
long[] personKeyCollection = (from l in nullablePersonKeyCollection where l is not null select l.Value).Distinct().ToArray();
SetPersonKeyToPersonContainer(configuration, personContainers, personKeyCollection, personKeyToPersonContainer, personKeyToPersonContainerCollection);
ReadOnlyDictionary<string, string> personKeyFormattedToPersonFullName = IPersonContainer.GetPersonKeyFormattedToPersonFullName(configuration.PersonBirthdayFormat, personContainers);
SaveOne(configuration, familyIndexToCollection, locationContainers, personKeyToPersonContainerCollection);
notMappedPersonContainers.AddRange(GetNotMappedPersonContainers(configuration, personContainers, personKeyCollection));
if (possiblyNewPersonDisplayDirectoryNamesAndPersonContainer.Any())
SavePossiblyNewPersonContainers(configuration.PersonBirthdayFormat, configuration.FacesFileNameExtension, a2PeopleSingletonDirectory, possiblyNewPersonDisplayDirectoryNamesAndPersonContainer);