Removed
VerifyPersonContainersDisplayDirectoryAllFiles, SaveOne, SaveParents, GetRelations, CleanDisplayDirectoryAllFilesAndWriteTicksGed
This commit is contained in:
@ -3,7 +3,6 @@ using ShellProgressBar;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Text.Json;
|
||||
using View_by_Distance.Shared.Models;
|
||||
using View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
using WindowsShortcutFactory;
|
||||
@ -17,6 +16,12 @@ internal abstract class MapLogic
|
||||
string[] PersonDisplayDirectoryNames,
|
||||
string MappedFaceFile);
|
||||
|
||||
private record PersonKeyFormattedIdThenWholePercentages(string PersonKeyFormatted,
|
||||
string[] PersonDisplayDirectoryNames,
|
||||
string MappedFaceFile,
|
||||
int Id,
|
||||
int WholePercentages);
|
||||
|
||||
private static void SetPersonCollections(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, string? a2PeopleSingletonDirectory, Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, List<string> personKeyFormattedCollection, Dictionary<int, List<int>> skipCollection, Dictionary<int, List<int>> skipNotSkipCollection)
|
||||
{
|
||||
int? id;
|
||||
@ -47,7 +52,7 @@ internal abstract class MapLogic
|
||||
skipNotSkipCollection[id.Value].Add(wholePercentages.Value);
|
||||
}
|
||||
}
|
||||
if (personContainer.Person is null || personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
|
||||
if (personContainer.Person is null || personContainer.Key is null || personContainer.Birthdays is null || personContainer.Birthdays.Length == 0)
|
||||
continue;
|
||||
foreach (PersonBirthday personBirthday in personContainer.Birthdays)
|
||||
{
|
||||
@ -186,14 +191,35 @@ internal abstract class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
private static void MovedToNewestPersonKeyFormatted(string personKeyFormatted, string newestPersonKeyFormatted, string ticksDirectory, string personKeyDirectory)
|
||||
{
|
||||
string newestPersonKeyDirectory = Path.Combine(ticksDirectory, newestPersonKeyFormatted);
|
||||
if (Directory.Exists(newestPersonKeyDirectory))
|
||||
MoveFiles(personKeyFormatted, personKeyDirectory, newestPersonKeyFormatted, newestPersonKeyDirectory);
|
||||
else
|
||||
Directory.Move(personKeyDirectory, newestPersonKeyDirectory);
|
||||
}
|
||||
|
||||
private static void RenameUnknown(string[] files)
|
||||
{
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (file.EndsWith(".unk"))
|
||||
continue;
|
||||
File.Move(file, $"{file}.unk");
|
||||
}
|
||||
}
|
||||
|
||||
private static List<Record> DeleteEmptyDirectoriesAndGetCollection(Configuration configuration, Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, List<string> personKeyFormattedCollection, string[] ticksDirectories, string message)
|
||||
{
|
||||
List<Record> results = new();
|
||||
int? id;
|
||||
long ticks;
|
||||
string[] files;
|
||||
string fileName;
|
||||
bool isNotDefault;
|
||||
TimeSpan timeSpan;
|
||||
bool check = false;
|
||||
const int zero = 0;
|
||||
int? wholePercentages;
|
||||
string[] yearDirectories;
|
||||
string personKeyFormatted;
|
||||
@ -203,7 +229,6 @@ internal abstract class MapLogic
|
||||
List<string> distinct = new();
|
||||
string[] personKeyDirectories;
|
||||
string[] personNameDirectories;
|
||||
string newestPersonKeyDirectory;
|
||||
string? newestPersonKeyFormatted;
|
||||
string[] personNameLinkDirectories;
|
||||
string? personFirstInitialDirectory;
|
||||
@ -216,7 +241,9 @@ internal abstract class MapLogic
|
||||
{
|
||||
progressBar.Tick();
|
||||
ticksDirectoryName = Path.GetFileName(ticksDirectory);
|
||||
if (ticksDirectoryName.Length < 3 || ticksDirectoryName[zero] != '(' || ticksDirectoryName[^1] != ')')
|
||||
if (ticksDirectoryName.Length < 3 || ticksDirectoryName.First() != '(' || ticksDirectoryName[^1] != ')')
|
||||
continue;
|
||||
if (!long.TryParse(ticksDirectoryName[1..^1], out ticks))
|
||||
continue;
|
||||
personKeyDirectories = Directory.GetDirectories(ticksDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string personKeyDirectory in personKeyDirectories)
|
||||
@ -228,16 +255,12 @@ internal abstract class MapLogic
|
||||
Individually(configuration, ticksDirectory, personKeyDirectory);
|
||||
throw new Exception($"B) Move personKey directories up one from {nameof(Shared.Models.Stateless.IMapLogic.Sorting)} and delete {nameof(Shared.Models.Stateless.IMapLogic.Sorting)} directory!");
|
||||
}
|
||||
if (personKeyFormattedToNewestPersonKeyFormatted.TryGetValue(personKeyFormatted, out newestPersonKeyFormatted) && personKeyFormatted != newestPersonKeyFormatted)
|
||||
_ = personKeyFormattedToNewestPersonKeyFormatted.TryGetValue(personKeyFormatted, out newestPersonKeyFormatted);
|
||||
if (personKeyFormattedToNewestPersonKeyFormatted.Count > 0 && newestPersonKeyFormatted is null)
|
||||
{
|
||||
if (!check)
|
||||
check = true;
|
||||
newestPersonKeyDirectory = Path.Combine(ticksDirectory, newestPersonKeyFormatted);
|
||||
if (Directory.Exists(newestPersonKeyDirectory))
|
||||
MoveFiles(personKeyFormatted, personKeyDirectory, newestPersonKeyFormatted, newestPersonKeyDirectory);
|
||||
else
|
||||
Directory.Move(personKeyDirectory, newestPersonKeyDirectory);
|
||||
continue;
|
||||
timeSpan = new TimeSpan(DateTime.Now.Ticks - ticks);
|
||||
if (timeSpan.TotalDays > 3)
|
||||
throw new Exception($"{configuration.MappingDefaultName} are only allowed within x days!");
|
||||
}
|
||||
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string yearDirectory in yearDirectories)
|
||||
@ -251,6 +274,18 @@ internal abstract class MapLogic
|
||||
personDisplayDirectoryNames = IPath.GetDirectoryNames(personNameDirectory);
|
||||
if (!personDisplayDirectoryNames.Any())
|
||||
continue;
|
||||
if (personDisplayDirectoryNames[^1] == "Z" && personKeyFormatted.StartsWith("140"))
|
||||
{
|
||||
string checkDirectory = Path.Combine(yearDirectory, $"Z]{DateTime.Now.Ticks}");
|
||||
if (Directory.Exists(checkDirectory))
|
||||
{
|
||||
files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
RenameUnknown(files);
|
||||
continue;
|
||||
}
|
||||
Directory.Move(personNameDirectory, checkDirectory);
|
||||
continue;
|
||||
}
|
||||
files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
if (isReservedDirectoryName && files.Any())
|
||||
throw new Exception($"Move personKey directories up one from {nameof(Shared.Models.Stateless.IMapLogic.Sorting)} and delete {nameof(Shared.Models.Stateless.IMapLogic.Sorting)} directory!");
|
||||
@ -258,19 +293,22 @@ internal abstract class MapLogic
|
||||
throw new Exception($"Move personKey directories up one from {manualCopyHumanized} and delete {manualCopyHumanized} directory!");
|
||||
if (personKeyFormatted == forceSingleImageHumanized && files.Any())
|
||||
throw new Exception($"Move personKey directories up one from {forceSingleImageHumanized} and delete {forceSingleImageHumanized} directory!");
|
||||
if (newestPersonKeyFormatted is null)
|
||||
isNotDefault = personDisplayDirectoryNames[^1].First() != 'Z' || !personKeyFormatted.StartsWith("140");
|
||||
if (isNotDefault)
|
||||
{
|
||||
if (!IPerson.IsDefaultName(configuration.MappingDefaultName, personDisplayDirectoryNames[^1]))
|
||||
if (personKeyFormattedToNewestPersonKeyFormatted.Count > 0 && newestPersonKeyFormatted is null)
|
||||
RenameUnknown(files);
|
||||
else if (newestPersonKeyFormatted is not null && personKeyFormatted != newestPersonKeyFormatted)
|
||||
{
|
||||
foreach (string file in files)
|
||||
File.Move(file, $"{file}.unk");
|
||||
if (!check)
|
||||
check = true;
|
||||
MovedToNewestPersonKeyFormatted(personKeyFormatted, newestPersonKeyFormatted, ticksDirectory, personKeyDirectory);
|
||||
continue;
|
||||
throw new NotImplementedException("Should this happen?");
|
||||
}
|
||||
}
|
||||
if (personKeyFormatted.Length != configuration.PersonBirthdayFormat.Length)
|
||||
continue;
|
||||
if (personDisplayDirectoryNames[^1].Length == 1 || IPerson.IsDefaultName(configuration.MappingDefaultName, personDisplayDirectoryNames[^1]) || !personKeyFormattedCollection.Contains(personKeyFormatted))
|
||||
if (personDisplayDirectoryNames[^1].Length == 1 || !isNotDefault || !personKeyFormattedCollection.Contains(personKeyFormatted))
|
||||
personFirstInitialDirectory = personNameDirectory;
|
||||
else
|
||||
{
|
||||
@ -347,7 +385,7 @@ internal abstract class MapLogic
|
||||
return results.ToArray();
|
||||
}
|
||||
|
||||
private static void SetKeyValuePairs(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection, Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer, List<(string, string[], int, int)> personKeyFormattedIdThenWholePercentagesCollection, Dictionary<long, PersonContainer> personKeyToPersonContainer, Dictionary<int, Dictionary<int, PersonContainer[]>> idThenWholePercentagesToPersonContainers, List<(string[], PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer)
|
||||
private static void SetKeyValuePairsAndAddToCollections(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection, Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer, List<PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection, Dictionary<long, PersonContainer> personKeyToPersonContainer, Dictionary<int, Dictionary<int, PersonContainer[]>> idThenWholePercentagesToPersonContainers, List<(PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer)
|
||||
{
|
||||
PersonBirthday? personBirthday;
|
||||
PersonContainer[] distinctPersonContainers;
|
||||
@ -357,32 +395,36 @@ internal abstract class MapLogic
|
||||
Dictionary<int, Dictionary<int, List<PersonContainer>>> idThenWholePercentagesToPersonContainerCollection = new();
|
||||
if (personKeyFormattedIdThenWholePercentagesCollection.Any())
|
||||
{
|
||||
string personDisplayDirectory;
|
||||
string group;
|
||||
char[] matches;
|
||||
char status, sex, first;
|
||||
PersonContainer personContainer;
|
||||
PersonDirectory personDirectory;
|
||||
string personDisplayDirectoryName;
|
||||
Dictionary<string, (string[], PersonContainer)> personDisplayDirectoryTo = new();
|
||||
foreach ((string personKeyFormatted, string[] personDisplayDirectoryNames, int id, int wholePercentages) in personKeyFormattedIdThenWholePercentagesCollection)
|
||||
foreach (PersonKeyFormattedIdThenWholePercentages personKeyFormattedIdThenWholePercentages in personKeyFormattedIdThenWholePercentagesCollection)
|
||||
{
|
||||
personBirthday = IPersonBirthday.GetPersonBirthday(configuration.PersonBirthdayFormat, personKeyFormatted);
|
||||
personBirthday = IPersonBirthday.GetPersonBirthday(configuration.PersonBirthdayFormat, personKeyFormattedIdThenWholePercentages.PersonKeyFormatted);
|
||||
if (personBirthday is null)
|
||||
continue;
|
||||
personDisplayDirectoryName = personDisplayDirectoryNames[^1];
|
||||
personDisplayDirectory = Path.Combine(personDisplayDirectoryNames);
|
||||
if (!personKeyFormattedToPersonContainer.ContainsKey(personKeyFormatted))
|
||||
if (!personKeyFormattedToPersonContainer.ContainsKey(personKeyFormattedIdThenWholePercentages.PersonKeyFormatted))
|
||||
{
|
||||
personContainer = new(configuration.MappingDefaultName, configuration.PersonCharacters.ToArray(), personBirthday, personDisplayDirectoryName);
|
||||
personKeyFormattedToPersonContainer.Add(personKeyFormatted, personContainer);
|
||||
personDisplayDirectoryName = personKeyFormattedIdThenWholePercentages.PersonDisplayDirectoryNames[^1];
|
||||
matches = configuration.PersonCharacters.Where(l => personDisplayDirectoryName.Contains(l)).ToArray();
|
||||
if (matches.Length == 0)
|
||||
throw new NotSupportedException();
|
||||
group = IPerson.GetHourGroup(personDisplayDirectoryName, personBirthday.Value.Hour);
|
||||
(status, sex, first) = IPerson.GetPersonHour(personDisplayDirectoryName, personBirthday.Value.Hour);
|
||||
personDirectory = new(matches.First(), group, status, sex, first);
|
||||
personContainer = new(configuration.MappingDefaultName, configuration.PersonCharacters.ToArray(), personBirthday, personDisplayDirectoryName, personDirectory);
|
||||
personKeyFormattedToPersonContainer.Add(personKeyFormattedIdThenWholePercentages.PersonKeyFormatted, personContainer);
|
||||
}
|
||||
if (personDisplayDirectoryName.Length != 1 && personDisplayDirectoryName != configuration.MappingDefaultName && !personDisplayDirectoryTo.ContainsKey(personDisplayDirectory))
|
||||
personDisplayDirectoryTo.Add(personDisplayDirectory, new(personDisplayDirectoryNames, personKeyFormattedToPersonContainer[personKeyFormatted]));
|
||||
if (!idThenWholePercentagesToPersonContainerCollection.ContainsKey(id))
|
||||
idThenWholePercentagesToPersonContainerCollection.Add(id, new());
|
||||
if (!idThenWholePercentagesToPersonContainerCollection[id].ContainsKey(wholePercentages))
|
||||
idThenWholePercentagesToPersonContainerCollection[id].Add(wholePercentages, new());
|
||||
idThenWholePercentagesToPersonContainerCollection[id][wholePercentages].Add(personKeyFormattedToPersonContainer[personKeyFormatted]);
|
||||
if (!idThenWholePercentagesToPersonContainerCollection.ContainsKey(personKeyFormattedIdThenWholePercentages.Id))
|
||||
idThenWholePercentagesToPersonContainerCollection.Add(personKeyFormattedIdThenWholePercentages.Id, new());
|
||||
if (!idThenWholePercentagesToPersonContainerCollection[personKeyFormattedIdThenWholePercentages.Id].ContainsKey(personKeyFormattedIdThenWholePercentages.WholePercentages))
|
||||
idThenWholePercentagesToPersonContainerCollection[personKeyFormattedIdThenWholePercentages.Id].Add(personKeyFormattedIdThenWholePercentages.WholePercentages, new());
|
||||
idThenWholePercentagesToPersonContainerCollection[personKeyFormattedIdThenWholePercentages.Id][personKeyFormattedIdThenWholePercentages.WholePercentages].Add(personKeyFormattedToPersonContainer[personKeyFormattedIdThenWholePercentages.PersonKeyFormatted]);
|
||||
possiblyNewPersonDisplayDirectoryNamesAndPersonContainer.Add(new(personKeyFormattedIdThenWholePercentages, personKeyFormattedToPersonContainer[personKeyFormattedIdThenWholePercentages.PersonKeyFormatted]));
|
||||
}
|
||||
foreach (KeyValuePair<string, (string[], PersonContainer)> keyValuePair in personDisplayDirectoryTo)
|
||||
possiblyNewPersonDisplayDirectoryNamesAndPersonContainer.Add(keyValuePair.Value);
|
||||
}
|
||||
foreach (KeyValuePair<int, Dictionary<int, List<PersonContainer>>> keyValuePair in idThenWholePercentagesToPersonContainerCollection)
|
||||
{
|
||||
@ -425,7 +467,7 @@ internal abstract class MapLogic
|
||||
return results;
|
||||
}
|
||||
|
||||
private static int SetCollectionsAndGetUnableToConvertCount(Configuration configuration, long ticks, List<(string, string[], int, int)> personKeyFormattedIdThenWholePercentagesCollection, List<Record> collection)
|
||||
private static int SetCollectionsAndGetUnableToConvertCount(Configuration configuration, long ticks, List<PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection, List<Record> collection)
|
||||
{
|
||||
int result = 0;
|
||||
int? id;
|
||||
@ -454,7 +496,7 @@ internal abstract class MapLogic
|
||||
personDisplayDirectoryName = personDisplayDirectoryNames[^1];
|
||||
if (string.IsNullOrEmpty(personDisplayDirectoryName))
|
||||
continue;
|
||||
personKeyFormattedIdThenWholePercentagesCollection.Add(new(personKeyFormatted, personDisplayDirectoryNames, id.Value, wholePercentages.Value));
|
||||
personKeyFormattedIdThenWholePercentagesCollection.Add(new(personKeyFormatted, personDisplayDirectoryNames, mappedFaceFile, id.Value, wholePercentages.Value));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -467,7 +509,7 @@ internal abstract class MapLogic
|
||||
List<long> personKeys = IPersonContainer.GetPersonKeys(personContainers);
|
||||
foreach (PersonContainer personContainer in personContainers)
|
||||
{
|
||||
if (personContainer.Person is null || personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
|
||||
if (personContainer.Person is null || personContainer.Key is null || personContainer.Birthdays is null || personContainer.Birthdays.Length == 0)
|
||||
continue;
|
||||
if (personKeys.Contains(personContainer.Key.Value))
|
||||
continue;
|
||||
@ -527,46 +569,56 @@ internal abstract class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
static void SavePossiblyNewPersonContainers(string personBirthdayFormat, string facesFileNameExtension, string? a2PeopleSingletonDirectory, List<(string[], PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer)
|
||||
static void PossiblyRebuildPersonContainers(Configuration configuration, string? a2PeopleSingletonDirectory, Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, List<(PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer)
|
||||
{
|
||||
string json;
|
||||
string[] files;
|
||||
bool[] matches;
|
||||
string fileName;
|
||||
string checkFile;
|
||||
const int zero = 0;
|
||||
string personKeyFormatted;
|
||||
string personDisplayDirectory;
|
||||
string[] deleteCollection;
|
||||
List<string> distinct = new();
|
||||
PersonBirthday personBirthday;
|
||||
string personDisplayDirectoryName;
|
||||
string checkPersonDisplayDirectory;
|
||||
string checkPersonKeyFormattedDirectory;
|
||||
JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true };
|
||||
foreach ((string[] personDisplayDirectoryNames, PersonContainer personContainer) in possiblyNewPersonDisplayDirectoryNamesAndPersonContainer)
|
||||
string personDisplayDirectory;
|
||||
string personKeyFormattedDirectory;
|
||||
foreach ((PersonKeyFormattedIdThenWholePercentages personKeyFormattedIdThenWholePercentages, PersonContainer personContainer) in possiblyNewPersonDisplayDirectoryNamesAndPersonContainer)
|
||||
{
|
||||
if (a2PeopleSingletonDirectory is null || personContainer.Key is null || personContainer.Birthdays is null || personContainer.PersonDirectory is null || !personContainer.Birthdays.Any())
|
||||
if (distinct.Contains(personKeyFormattedIdThenWholePercentages.PersonKeyFormatted))
|
||||
continue;
|
||||
if (a2PeopleSingletonDirectory is null || personContainer.Key is null || personContainer.Birthdays is null || personContainer.PersonDirectory is null || personContainer.Birthdays.Length == 0)
|
||||
continue;
|
||||
fileName = $"{Path.GetFileName(personKeyFormattedIdThenWholePercentages.MappedFaceFile)}{configuration.FacesHiddenFileNameExtension}";
|
||||
matches = (from l in personContainer.DisplayDirectoryAllFiles where l.EndsWith(fileName) select true).ToArray();
|
||||
if (matches.Length > 0)
|
||||
continue;
|
||||
matches = (from l in personContainer.DisplayDirectoryAllFiles where l.EndsWith(configuration.FacesHiddenFileNameExtension) select true).ToArray();
|
||||
if (matches.Length > 0)
|
||||
continue;
|
||||
personBirthday = personContainer.Birthdays[zero];
|
||||
personDisplayDirectoryName = personDisplayDirectoryNames[^1];
|
||||
personDisplayDirectory = Path.Combine(personDisplayDirectoryNames);
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(personBirthdayFormat, personBirthday);
|
||||
checkPersonDisplayDirectory = Path.Combine(a2PeopleSingletonDirectory, personContainer.PersonDirectory.Char.ToString(), personContainer.PersonDirectory.Group, personDisplayDirectoryName);
|
||||
checkPersonKeyFormattedDirectory = Path.Combine(checkPersonDisplayDirectory, personKeyFormatted);
|
||||
if (Directory.Exists(checkPersonKeyFormattedDirectory))
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, personBirthday);
|
||||
personDisplayDirectory = Path.Combine(a2PeopleSingletonDirectory, personContainer.PersonDirectory.Char.ToString(), personContainer.PersonDirectory.Group, personContainer.DisplayDirectoryName);
|
||||
personKeyFormattedDirectory = Path.GetFullPath(Path.Combine(personDisplayDirectory, personKeyFormatted));
|
||||
deleteCollection = (from l in personContainer.DisplayDirectoryAllFiles where l.StartsWith(personKeyFormattedDirectory) select l).ToArray();
|
||||
if (personKeyFormattedToNewestPersonKeyFormatted.Count > 0 && personContainer.DisplayDirectoryAllFiles.Length != 0 && deleteCollection.Length == 0)
|
||||
throw new NotSupportedException();
|
||||
if (!Directory.Exists(personKeyFormattedDirectory))
|
||||
_ = Directory.CreateDirectory(personKeyFormattedDirectory);
|
||||
if (!File.Exists(personKeyFormattedIdThenWholePercentages.MappedFaceFile))
|
||||
continue;
|
||||
_ = Directory.CreateDirectory(checkPersonKeyFormattedDirectory);
|
||||
checkFile = Path.Combine(checkPersonKeyFormattedDirectory, $"{personKeyFormatted}.json");
|
||||
json = JsonSerializer.Serialize(personContainer.Person, jsonSerializerOptions);
|
||||
_ = IPath.WriteAllText(checkFile, json, updateDateWhenMatches: false, compareBeforeWrite: true);
|
||||
if (!Directory.Exists(personDisplayDirectory))
|
||||
checkFile = Path.Combine(personKeyFormattedDirectory, $"{Path.GetFileName(personKeyFormattedIdThenWholePercentages.MappedFaceFile)}{configuration.FacesHiddenFileNameExtension}");
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
files = Directory.GetFiles(personDisplayDirectory, $"*{facesFileNameExtension}", SearchOption.TopDirectoryOnly);
|
||||
foreach (string file in files)
|
||||
File.Copy(personKeyFormattedIdThenWholePercentages.MappedFaceFile, checkFile);
|
||||
foreach (string delete in deleteCollection)
|
||||
{
|
||||
checkFile = Path.Combine(checkPersonDisplayDirectory, Path.GetFileName(file));
|
||||
if (File.Exists(checkFile))
|
||||
if (delete.EndsWith(".lnk"))
|
||||
continue;
|
||||
File.Copy(files[0], checkFile);
|
||||
break;
|
||||
if (!File.Exists(delete))
|
||||
continue;
|
||||
File.Delete(delete);
|
||||
}
|
||||
Directory.SetLastWriteTime(personDisplayDirectory, DateTime.Now);
|
||||
distinct.Add(personKeyFormattedIdThenWholePercentages.PersonKeyFormatted);
|
||||
}
|
||||
}
|
||||
|
||||
@ -713,92 +765,6 @@ 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;
|
||||
@ -866,7 +832,7 @@ internal abstract class MapLogic
|
||||
return results;
|
||||
}
|
||||
|
||||
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)
|
||||
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)
|
||||
{
|
||||
string message;
|
||||
int totalSeconds;
|
||||
@ -876,15 +842,15 @@ internal abstract class MapLogic
|
||||
Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer = new();
|
||||
Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection = new();
|
||||
string[] ticksDirectories = UpdateDateVerifyAndGetTicksDirectories(eDistanceContentDirectory);
|
||||
List<(string, string[], int, int)> personKeyFormattedIdThenWholePercentagesCollection = new();
|
||||
List<(string[], PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer = new();
|
||||
List<PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection = new();
|
||||
List<(PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer = new();
|
||||
SetPersonCollections(configuration, personContainers, a2PeopleSingletonDirectory, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection, skipCollection, skipNotSkipCollection);
|
||||
totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
||||
message = $") {ticksDirectories.Length:000} compile from and clean ticks Director(ies) - B - {totalSeconds} total second(s)";
|
||||
List<Record> records = DeleteEmptyDirectoriesAndGetCollection(configuration, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection, ticksDirectories, message);
|
||||
locationContainers.AddRange(GetLocationContainers(maxDegreeOfParallelism, configuration, ticks, personContainers, eDistanceContentDirectory, records));
|
||||
int unableToMatchCount = SetCollectionsAndGetUnableToConvertCount(configuration, ticks, personKeyFormattedIdThenWholePercentagesCollection, records);
|
||||
SetKeyValuePairs(configuration, personContainers, personKeyToPersonContainerCollection, personKeyFormattedToPersonContainer, personKeyFormattedIdThenWholePercentagesCollection, personKeyToPersonContainer, idThenWholePercentagesToPersonContainers, possiblyNewPersonDisplayDirectoryNamesAndPersonContainer);
|
||||
SetKeyValuePairsAndAddToCollections(configuration, personContainers, personKeyToPersonContainerCollection, personKeyFormattedToPersonContainer, personKeyFormattedIdThenWholePercentagesCollection, personKeyToPersonContainer, idThenWholePercentagesToPersonContainers, possiblyNewPersonDisplayDirectoryNamesAndPersonContainer);
|
||||
totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
||||
message = $") {records.Count:000} message from ticks Director(ies) - D - {unableToMatchCount} Unable To Match Count / {records.Count} Collection - {totalSeconds} total second(s)";
|
||||
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
|
||||
@ -898,12 +864,9 @@ internal abstract class MapLogic
|
||||
}
|
||||
}
|
||||
long[] personKeyCollection = (from l in nullablePersonKeyCollection where l is not null select l.Value).Distinct().ToArray();
|
||||
PossiblyRebuildPersonContainers(configuration, a2PeopleSingletonDirectory, personKeyFormattedToNewestPersonKeyFormatted, possiblyNewPersonDisplayDirectoryNamesAndPersonContainer);
|
||||
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);
|
||||
}
|
||||
|
||||
private static string GetMappingSegmentB(long ticks, PersonBirthday personBirthday, int? approximateYears, long dateTimeOriginalThenMinimumDateTimeTicks, bool? isWrongYear)
|
||||
|
Reference in New Issue
Block a user