Removed both

faceDistanceLength.Length.Value / distanceTolerance
and
confidence / rangeFaceConfidence[1]
Removed ReviewLocationContainerDistanceTolerance
Added MoveToDecade
IFaceDistance.MappingFromFilterPost
ISorting.CanReMap
This commit is contained in:
2023-09-04 23:25:31 -07:00
parent 600f6e7e2b
commit b2e2a66101
23 changed files with 275 additions and 239 deletions

View File

@ -231,6 +231,7 @@ internal abstract class MapLogic
}
}
}
_ = IPath.DeleteEmptyDirectories(personKeyDirectory);
}
private static List<MappedFile> GetDisplayDirectoryAllFiles(string fileNameExtension, string personBirthdayFormat, ReadOnlyCollection<PersonContainer> personContainers)
@ -724,7 +725,7 @@ internal abstract class MapLogic
yield return new(l, Path.GetFileName(l));
}
private static List<(string, long)> GetGenealogicalDataCommunicationDirectories(string genealogicalDataCommunicationFile, string[] jLinks, string personBirthdayFormat)
private static List<(string, long)> GetDirectoryAndTicksCollection(string[] jLinks, string personBirthdayFormat, string? rootDirectory)
{
List<(string, long)> results = new();
string directory;
@ -732,12 +733,11 @@ internal abstract class MapLogic
string[] personKeyDirectories;
string[] personDisplayDirectoryNames;
string personKeyFormattedDirectoryName;
string? genealogicalDataCommunicationDirectory = Path.GetDirectoryName(genealogicalDataCommunicationFile);
foreach (string jLink in jLinks)
{
if (genealogicalDataCommunicationDirectory is null)
if (rootDirectory is null)
continue;
directory = Path.Combine(genealogicalDataCommunicationDirectory, jLink);
directory = Path.Combine(rootDirectory, jLink);
if (!Directory.Exists(directory))
continue;
personDisplayDirectoryNames = Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly);
@ -756,6 +756,14 @@ internal abstract class MapLogic
return results;
}
private static List<(string, long)> GetGenealogicalDataCommunicationDirectories(string genealogicalDataCommunicationFile, string[] jLinks, string personBirthdayFormat)
{
List<(string, long)> results;
string? genealogicalDataCommunicationDirectory = Path.GetDirectoryName(genealogicalDataCommunicationFile);
results = GetDirectoryAndTicksCollection(jLinks, personBirthdayFormat, genealogicalDataCommunicationDirectory);
return results;
}
private static string? TryToFind(char[] personCharacters, string a2PeopleSingletonDirectory, List<(string Directory, string DirectoryName, string DirectoryNameSplitFirst)> a2PeopleSingletonDirectories, string file, string path)
{
string? result;
@ -871,7 +879,6 @@ internal abstract class MapLogic
int? wholePercentages;
string? checkDirectory;
ProgressBar progressBar;
string? yearDirectoryName;
string[] yearDirectories;
string personKeyFormatted;
string? personFirstInitial;
@ -927,22 +934,6 @@ internal abstract class MapLogic
personNameDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string file in files)
File.Delete(file);
yearDirectoryName = Path.GetFileName(yearDirectory);
if (!string.IsNullOrEmpty(yearDirectoryName) && yearDirectoryName.Length != 8)
{
checkDirectory = Path.Combine(personKeyFormattedDirectory, "abcdefgh");
if (Directory.Exists(checkDirectory))
{
MoveDirectory(personNameDirectories, checkDirectory);
if (!check)
check = true;
continue;
}
Directory.Move(yearDirectory, checkDirectory);
if (!check)
check = true;
continue;
}
foreach (string personNameDirectory in personNameDirectories)
{
directoryNumber++;
@ -1070,33 +1061,6 @@ internal abstract class MapLogic
return results;
}
private static void MoveDirectory(string[] personNameDirectories, string destination)
{
string[] files;
string checkFile;
string checkDirectory;
string? personNameDirectoryName;
foreach (string personNameDirectory in personNameDirectories)
{
personNameDirectoryName = Path.GetFileName(personNameDirectory);
checkDirectory = Path.Combine(destination, personNameDirectoryName);
if (personNameDirectory == checkDirectory)
continue;
if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory);
files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string file in files)
{
checkFile = Path.Combine(checkDirectory, Path.GetFileName(file));
if (checkFile == file)
continue;
if (File.Exists(checkFile))
continue;
File.Move(file, checkFile);
}
}
}
internal static void SetKeyValuePairsAndAddToCollections(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<long, PersonContainer> personKeyToPersonContainer, ReadOnlyCollection<PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection, Dictionary<long, int> personKeyToCount, Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer, Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection, List<(PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer)
{
PersonBirthday? personBirthday;
@ -1291,7 +1255,7 @@ internal abstract class MapLogic
}
}
internal static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(Shared.Models.Methods.IDistance<MetadataExtractor.Directory> distance, int maxDegreeOfParallelism, Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<int, List<(string, int)>> skipCollection, List<Record> records)
internal static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(int maxDegreeOfParallelism, Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<int, List<(string, int)>> skipCollection, List<Record> records)
{
List<LocationContainer<MetadataExtractor.Directory>> results = new();
List<MappedFile> mappedFiles = GetMappedFiles(configuration, personContainers, records);
@ -1310,8 +1274,6 @@ internal abstract class MapLogic
}
ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers = new(results.OrderBy(l => l.DirectoryNumber).ToArray());
LookForPossibleDuplicates(configuration, locationContainers);
if (configuration.LocationContainerDistanceTolerance is not null)
distance.ReviewLocationContainerDistanceTolerance(configuration.LocationContainerDistanceTolerance.Value, locationContainers);
return results;
}
@ -1558,7 +1520,10 @@ internal abstract class MapLogic
string checkDirectory;
WindowsShortcut windowsShortcut;
List<string> resolvedDirectories = new();
results = GetGenealogicalDataCommunicationDirectories(genealogicalDataCommunicationFile, jLinks, personBirthdayFormat);
if (string.IsNullOrEmpty(genealogicalDataCommunicationFile))
results = GetDirectoryAndTicksCollection(jLinks, personBirthdayFormat, a2PeopleContentDirectory);
else
results = GetGenealogicalDataCommunicationDirectories(genealogicalDataCommunicationFile, jLinks, personBirthdayFormat);
if (results.Count == 0 || results.Count < jLinks.Length)
{
List<(string, string, string)> a2PeopleSingletonDirectories = new();
@ -1710,10 +1675,24 @@ internal abstract class MapLogic
return new(results);
}
internal static void SetCreationTime(MappingFromItem mappingFromItem, MappingFromPerson mappingFromPerson)
{
DateTime dateTime;
FileInfo fileInfo;
foreach (string locationContainersFile in mappingFromPerson.LocationContainersFiles)
{
fileInfo = new(locationContainersFile);
if (!fileInfo.Exists)
continue;
dateTime = mappingFromItem.DateTimeOriginal is null ? mappingFromItem.MinimumDateTime : mappingFromItem.DateTimeOriginal.Value;
if (fileInfo.CreationTime != dateTime)
File.SetCreationTime(locationContainersFile, dateTime);
}
}
internal static void MoveToDecade(Property.Models.Configuration propertyConfiguration, MappingFromItem mappingFromItem, MappingFromPerson mappingFromPerson)
{
string year;
DateTime dateTime;
FileInfo fileInfo;
string halfDecade;
string checkDirectory;
@ -1744,24 +1723,20 @@ internal abstract class MapLogic
break;
if (mappingFromItem.DateTimeOriginal is null)
{
dateTime = mappingFromItem.MinimumDateTime;
year = mappingFromItem.MinimumDateTime.Year.ToString();
halfDecade = year[3] > '4' ? $"#{year[..3]}+" : $"#{year[..3]}-";
}
else
{
dateTime = mappingFromItem.DateTimeOriginal.Value;
year = mappingFromItem.DateTimeOriginal.Value.Year.ToString();
halfDecade = year[3] > '4' ? $"^{year[..3]}+" : $"^{year[..3]}-";
}
if (fileInfo.CreationTime != dateTime)
File.SetCreationTime(locationContainersFile, dateTime);
if (halfDecade == yearDirectoryName)
continue;
checkDirectory = Path.Combine(personKeyFormattedDirectory, halfDecade, personNameDirectoryName);
if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory);
File.Move(locationContainersFile, Path.Combine(checkDirectory, Path.Combine(checkDirectory, Path.GetFileName(locationContainersFile))));
File.Move(locationContainersFile, Path.Combine(checkDirectory, Path.GetFileName(locationContainersFile)));
}
}
@ -1807,6 +1782,7 @@ internal abstract class MapLogic
internal static void SaveMappedRelations(Configuration configuration, Shared.Models.Methods.IDistance<MetadataExtractor.Directory> distance, string a2PeopleContentDirectory, string eDistanceContentDirectory, long ticks, List<LocationContainer<MetadataExtractor.Directory>> locationContainers, ReadOnlyDictionary<string, PersonContainer> readOnlyPersonKeyFormattedToPersonContainer, ReadOnlyDictionary<long, List<PersonContainer>> readOnlyPersonKeyToPersonContainerCollection)
{
bool isCounterPersonYear;
string personKeyFormatted;
string? displayDirectoryName;
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
@ -1816,13 +1792,32 @@ internal abstract class MapLogic
using ProgressBar progressBar = new(collections.Count, message, options);
foreach (ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> collection in collections)
{
if (configuration.LocationContainerDistanceTolerance is null)
break;
progressBar.Tick();
if (collection.Count == 0)
continue;
personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, collection[0].PersonKey);
isCounterPersonYear = IPersonBirthday.IsCounterPersonYear(new DateTime(collection[0].PersonKey).Year);
displayDirectoryName = GetDisplayDirectoryName(readOnlyPersonKeyToPersonContainerCollection, readOnlyPersonKeyFormattedToPersonContainer, collection[0].PersonKey, personKeyFormatted);
distance.SaveMappedForOutputResolutions(a2PeopleContentDirectory, eDistanceContentDirectory, configuration.RangeDistanceTolerance, collection, personKeyFormatted, displayDirectoryName);
distance.SaveMappedForOutputResolutions(a2PeopleContentDirectory, eDistanceContentDirectory, configuration.LocationContainerDistanceTolerance.Value, collection, collection[0].PersonKey, isCounterPersonYear, personKeyFormatted, displayDirectoryName);
}
}
internal static bool? CanReMap(long[] jLinkResolvedPersonKeys, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers, MappingFromLocation mappingFromLocation)
{
bool? result;
ReadOnlyCollection<PersonContainer>? personContainers;
if (wholePercentagesToPersonContainers is null)
result = null;
else
{
if (!wholePercentagesToPersonContainers.TryGetValue(mappingFromLocation.WholePercentages, out personContainers))
result = null;
else
result = personContainers.Any(l => IPerson.IsDefaultName(l) && l.Key is not null && IPersonBirthday.IsCounterPersonYear(new DateTime(l.Key.Value).Year) && !jLinkResolvedPersonKeys.Contains(l.Key.Value));
}
return result;
}
}