... but by oldest person and distinct

This commit is contained in:
2022-10-02 16:20:10 -07:00
parent 331d42685a
commit a6168f5976
13 changed files with 102 additions and 176 deletions

View File

@ -704,17 +704,73 @@ public class MapLogic
SaveContainers(totalNotMapped, updated, saveContainers);
}
private (FileHolder, string, string, string, string)[] GetCollection(Mapping[] mappingCollection)
private List<(string, PersonContainer)> GetPersonContainers(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
(FileHolder, string, string, string, string)[] results;
List<(string, PersonContainer)> results = new();
string[] files;
long personKey;
const int zero = 0;
string[] directories;
string checkDirectory;
string personKeyFormatted;
string displayDirectoryName;
PersonContainer[] collection;
PersonBirthday? personBirthday;
WindowsShortcut windowsShortcut;
foreach (string directoryName in jLinks)
{
checkDirectory = Path.Combine(a2PeopleSingletonDirectory, directoryName);
if (!Directory.Exists(checkDirectory))
continue;
files = Directory.GetFiles(checkDirectory, "*.lnk", SearchOption.TopDirectoryOnly);
foreach (string file in files)
{
windowsShortcut = WindowsShortcut.Load(file);
if (windowsShortcut.Path is null || !Directory.Exists(windowsShortcut.Path))
continue;
directories = Directory.GetDirectories(windowsShortcut.Path, "*", SearchOption.TopDirectoryOnly);
foreach (string directory in directories)
{
personKeyFormatted = Path.GetFileName(directory);
personBirthday = IPersonBirthday.GetPersonBirthday(_Configuration.PersonBirthdayFormat, personKeyFormatted);
if (personBirthday is null)
continue;
personKey = personBirthday.Value.Ticks;
collection = (from l in personContainers where l.Key == personKey && l.ApproximateYears.HasValue select l).ToArray();
if (!collection.Any())
continue;
displayDirectoryName = Path.Combine(checkDirectory, personKeyFormatted, Path.GetFileNameWithoutExtension(file));
if (!Directory.Exists(displayDirectoryName))
_ = Directory.CreateDirectory(displayDirectoryName);
results.Add(new(personKeyFormatted, collection[zero]));
}
}
}
return results;
}
private string[] GetPersonKeyFormattedCollection(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers)
{
string[] results;
List<(string PersonKeyFormatted, PersonContainer PersonContainer)> collection = GetPersonContainers(jLinks, a2PeopleSingletonDirectory, personContainers);
results = (from l in collection orderby l.PersonKeyFormatted select l.PersonKeyFormatted).ToArray();
return results;
}
private (int, FileHolder, int, string, string, string, string)[] GetCollection(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers, Mapping[] mappingCollection)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
(int, FileHolder, int, string, string, string, string)[] results;
string checkFile;
string directory;
string? directoryName;
string personDirectory;
string personKeyFormatted;
List<(FileHolder ResizedFileHolder, string PersonKeyFormatted, string CheckFile, string Directory, string PersonDirectory)> collection = new();
string[] personKeyFormattedCollection = GetPersonKeyFormattedCollection(jLinks, a2PeopleSingletonDirectory, personContainers);
List<(int Id, FileHolder ResizedFileHolder, int ApproximateYears, string PersonKeyFormatted, string CheckFile, string Directory, string PersonDirectory)> collection = new();
foreach (Mapping mapping in mappingCollection)
{
directoryName = Path.GetDirectoryName(mapping.MappingFromItem.RelativePath);
@ -722,35 +778,39 @@ public class MapLogic
throw new NotSupportedException();
if (mapping.By is null or IMapLogic.Sorting)
continue;
if (mapping.MappingFromPerson is null)
if (mapping.MappingFromPerson?.ApproximateYears is null)
continue;
if (string.IsNullOrEmpty(mapping.MappingFromPerson.SegmentB))
throw new NotSupportedException();
if (string.IsNullOrEmpty(mapping.MappingFromPerson.DisplayDirectoryName))
throw new NotSupportedException();
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
if (personKeyFormatted == "1501-04-10_00")
continue;
if (!personKeyFormattedCollection.Contains(personKeyFormatted))
continue;
directory = Path.Combine(_EDistanceContentTicksDirectory, "Images", personKeyFormatted);
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName);
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder, personKeyFormatted, checkFile, directory, personDirectory));
collection.Add(new(mapping.MappingFromItem.Id, mapping.MappingFromItem.ResizedFileHolder, mapping.MappingFromPerson.ApproximateYears.Value, personKeyFormatted, directory, personDirectory, checkFile));
}
results = (from l in collection orderby l.PersonKeyFormatted descending select l).ToArray();
results = (from l in collection orderby l.ApproximateYears descending, l.PersonKeyFormatted descending select l).ToArray();
return results;
}
public void SaveResizedImagesByPersonKeyFormatted(string[] juliePhares, Mapping[] mappingCollection, int totalNotMapped)
public void SaveResizedImagesByPersonKeyFormatted(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers, Mapping[] mappingCollection, int totalNotMapped)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
List<SaveContainer> saveContainers = new();
SaveContainer? saveContainer;
(FileHolder, string, string, string, string)[] collection = GetCollection(mappingCollection);
foreach ((FileHolder resizedFileHolder, string personKeyFormatted, string checkFile, string directory, string personDirectory) in collection)
List<int> distinctCollection = new();
List<SaveContainer> saveContainers = new();
(int, FileHolder, int, string, string, string, string)[] collection = GetCollection(jLinks, a2PeopleSingletonDirectory, personContainers, mappingCollection);
foreach ((int id, FileHolder resizedFileHolder, int approximateYears, string personKeyFormatted, string directory, string personDirectory, string checkFile) in collection)
{
if (personKeyFormatted == "1501-04-10_00")
continue;
if (!juliePhares.Contains(personKeyFormatted))
if (distinctCollection.Contains(id))
continue;
distinctCollection.Add(id);
saveContainer = new(personDirectory);
saveContainers.Add(saveContainer);
saveContainer = new(resizedFileHolder, checkFile, directory);