From 4d0739dee67b2eb7e3a2a7d8fbd4fa7cfa74fb4d Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Mon, 10 Apr 2023 14:51:43 -0700 Subject: [PATCH] More Individually and bug fix --- Instance/DlibDotNet.cs | 14 +++-- Instance/appsettings.Development.json | 3 +- Map/Models/MapLogic.cs | 29 +++++----- Map/Models/Stateless/MapLogic.cs | 53 ++++++++++++------- Shared/Models/Mapping.cs | 4 +- .../Stateless/Methods/PersonContainer.cs | 21 ++++---- 6 files changed, 75 insertions(+), 49 deletions(-) diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index 3875c54..0705373 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -767,7 +767,7 @@ public partial class DlibDotNet { int updated = mapLogic.UpdateFromSortingContainers(_Configuration.SaveIndividually, distanceLimits, sortingContainers); List saveContainers = mapLogic.GetSaveContainers(_Configuration.SaveIndividually, dFacesContentDirectory, d2FacePartsContentDirectory, d2FacePartsContentCollectionDirectory, mappingCollection, idToNormalizedRectangleToMapping, useFiltersCounter, sortingContainers.Any()); - mapLogic.SaveContainers(filteredFaceDistanceContainers.Length, updated, saveContainers); + mapLogic.SaveContainers(_Configuration.SaveIndividually, filteredFaceDistanceContainers.Length, updated, saveContainers); } } } @@ -788,9 +788,12 @@ public partial class DlibDotNet string dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()"); string d2FacePartsContentDirectory = Path.Combine(d2ResultsFullGroupDirectory, "()"); string d2FacePartsContentCollectionDirectory = Path.Combine(d2ResultsFullGroupDirectory, "[()]"); - Shared.Models.Stateless.Methods.IPath.ChangeDateForEmptyDirectories(d2FacePartsContentDirectory, ticks); - Shared.Models.Stateless.Methods.IPath.MakeHiddenIfAllItemsAreHidden(d2FacePartsContentCollectionDirectory); string dFacesCollectionDirectory = Path.Combine(dResultsFullGroupDirectory, "[]", _Configuration.PropertyConfiguration.ResultAllInOne); + if (mappingCollection.Any()) + { + Shared.Models.Stateless.Methods.IPath.ChangeDateForEmptyDirectories(d2FacePartsContentDirectory, ticks); + Shared.Models.Stateless.Methods.IPath.MakeHiddenIfAllItemsAreHidden(d2FacePartsContentCollectionDirectory); + } Dictionary> idToNormalizedRectangleToMapping = Map.Models.Stateless.Methods.IMapLogic.GetIdToNormalizedRectangleToFace(mappingCollection); if (Directory.Exists(fPhotoPrismContentDirectory)) F_PhotoPrism.WriteMatches(fPhotoPrismContentDirectory, _Configuration.PersonBirthdayFormat, ticks, distinctFilteredFaces, mapLogic); @@ -1057,7 +1060,7 @@ public partial class DlibDotNet fPhotoPrismContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(F_PhotoPrism), "()"); fPhotoPrismSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(F_PhotoPrism), "{}"); propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FileNameExtension, _Configuration.Reverse, aResultsFullGroupDirectory); - MapLogic mapLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Configuration.SaveIndividually, _MapConfiguration, _PersonContainers, ticks, a2PeopleSingletonDirectory, eDistanceContentDirectory); + MapLogic mapLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, _PersonContainers, ticks, a2PeopleSingletonDirectory, eDistanceContentDirectory); int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); string message = $") Building Container(s) - {totalSeconds} total second(s)"; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; @@ -1105,6 +1108,9 @@ public partial class DlibDotNet int totalNotMapped = mapLogic.UpdateMappingFromPerson(mappingCollection); string json = System.Text.Json.JsonSerializer.Serialize(mappingCollection); File.WriteAllText(Path.Combine(eDistanceContentDirectory, $"{ticks}.json"), json); + for (int i = 1; i < 5; i++) + _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(eDistanceContentDirectory); + _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(eDistanceContentDirectory); foreach (string outputResolution in _Configuration.OutputResolutions) { if (_PropertyRootExistedBefore) diff --git a/Instance/appsettings.Development.json b/Instance/appsettings.Development.json index 26c090e..9574ad7 100644 --- a/Instance/appsettings.Development.json +++ b/Instance/appsettings.Development.json @@ -29,7 +29,8 @@ "xxxRootDirectory": "D:/2) Images B/Not-Copy-Copy-9b89679", "RootDirectory": "D:/1) Images A/Images-9b89679", "xxxxxRootDirectory": "D:/1) Images A/Images-9b89679/Facebook/2023.2 Facebook", - "SaveIndividually": true, + "SaveIndividually": false, + "xSaveIndividually": true, "SaveSortingWithoutPerson": true, "SkipOlderThanDays": null, "xSkipOlderThanDays": 2200, diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs index 743b6b2..9db48d6 100644 --- a/Map/Models/MapLogic.cs +++ b/Map/Models/MapLogic.cs @@ -28,7 +28,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic private readonly string _EDistanceContentTicksDirectory; private readonly Shared.Models.Properties.IPropertyConfiguration _PropertyConfiguration; - public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, bool saveIndividually, Configuration? configuration, PersonContainer[] personContainers, long ticks, string a2PeopleSingletonDirectory, string eDistanceContentDirectory) + public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, PersonContainer[] personContainers, long ticks, string a2PeopleSingletonDirectory, string eDistanceContentDirectory) { _Ticks = ticks; _Configuration = configuration; @@ -51,12 +51,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory); string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, $"({ticks})"); Dictionary> idThenNormalizedRectangleToPersonContainers = new(); - if (!saveIndividually) - { - for (int i = 1; i < 5; i++) - _ = IPath.DeleteEmptyDirectories(eDistanceContentDirectory); - _ = IPath.DeleteEmptyDirectories(eDistanceContentDirectory); - } if (string.IsNullOrEmpty(rootDirectoryParent)) throw new NullReferenceException(nameof(rootDirectoryParent)); if (!Directory.Exists(eDistanceContentDirectory)) @@ -200,12 +194,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic return result; } - public void SaveContainers(int totalNotMapped, int? updated, List saveContainers) + public void SaveContainers(bool saveIndividually, int totalNotMapped, int? updated, List saveContainers) { if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); string checkFile; string sourceFile; + List distinct = new(); WindowsShortcut windowsShortcut; string[] directories = (from l in saveContainers select l.Directory).Distinct().ToArray(); int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - _Ticks).TotalSeconds); @@ -245,6 +240,12 @@ public class MapLogic : Shared.Models.Methods.IMapLogic } else continue; + if (saveIndividually) + { + if (distinct.Contains(checkFile)) + continue; + distinct.Add(checkFile); + } if (File.Exists(checkFile)) continue; File.Copy(sourceFile, checkFile); @@ -414,7 +415,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic { if (sortingContainersAny) continue; - mapping.UpdateMappingFromUnknownPerson(new(mapping, new(mapping, mapping.MappingFromLocation))); + mapping.UpdateMappingFromUnknownPerson(saveIndividually, new(mapping, new(mapping, mapping.MappingFromLocation))); if (mapping.SortingContainer is null) continue; } @@ -519,7 +520,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic results.Add(saveContainer); } if (!saveIndividually) - saveContainer = Stateless.MapLogic.GetDebugSaveContainer(directory, mapping.SortingContainer, keyMapping); + saveContainer = Stateless.MapLogic.GetDebugSaveContainer(directory, mapping.MappingFromPerson, mapping.SortingContainer, keyMapping); else { (saveContainer, SaveContainer? extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, dFacesContentDirectory, d2FacePartsContentCollectionDirectory, directory, mapping.SortingContainer, keyMapping); @@ -550,9 +551,10 @@ public class MapLogic : Shared.Models.Methods.IMapLogic int? updated = null; bool saveMapped = true; int? useFiltersCounter = null; + bool saveIndividually = false; string mappingDirectory = Path.Combine(_EDistanceContentTicksDirectory, nameof(Shared.Models.Stateless.IMapLogic.Mapping)); List saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, d2FacePartsContentCollectionDirectory, mappingCollection, idToNormalizedRectangleToMapping, personKeyToIds, useFiltersCounter, saveMapped, sortingContainersAny: true, saveIndividually: false); - SaveContainers(totalNotMapped, updated, saveContainers); + SaveContainers(saveIndividually, totalNotMapped, updated, saveContainers); if (!string.IsNullOrEmpty(_EDistanceContentTicksDirectory) && Directory.Exists(mappingDirectory)) Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory); } @@ -662,7 +664,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic continue; if (normalizedRectangleCollectionForA.Contains(sortingContainer.Mapping.MappingFromLocation.NormalizedRectangle)) continue; - sortingContainer.Mapping.UpdateMappingFromUnknownPerson(sortingContainer); + sortingContainer.Mapping.UpdateMappingFromUnknownPerson(saveIndividually, sortingContainer); normalizedRectangleCollectionForA.Add(sortingContainer.Mapping.MappingFromLocation.NormalizedRectangle); result += 1; } @@ -1017,6 +1019,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); SaveContainer? saveContainer; + bool saveIndividually = false; List saveContainers = new(); Stateless.MapLogic.BeforeSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory); (int, FileHolder, int, string, string, string, string)[] collection = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory, personContainers, mappingCollection, personKeyToIds); @@ -1027,7 +1030,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic saveContainer = new(imageFileHolder, checkFile, directory); saveContainers.Add(saveContainer); } - SaveContainers(totalNotMapped, null, saveContainers); + SaveContainers(saveIndividually, totalNotMapped, null, saveContainers); } private List GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, Dictionary> personKeyToIds, Dictionary>> idToLocationContainers, Mapping[] mappingCollection) diff --git a/Map/Models/Stateless/MapLogic.cs b/Map/Models/Stateless/MapLogic.cs index eedef17..1a91454 100644 --- a/Map/Models/Stateless/MapLogic.cs +++ b/Map/Models/Stateless/MapLogic.cs @@ -87,7 +87,7 @@ internal abstract class MapLogic } } - private static void MoveTo(string actionDirectory, string ticksDirectory, string directory, string personKeyFormatted, string yearDirectoryName, string alphaDirectoryName, string[] files, string[] matchFaceFile) + private static void MoveTo(string actionDirectory, string ticksDirectory, string directory, string personKeyFormatted, string yearDirectoryName, string alphaDirectoryName, string[] files, string[] facesFileNames) { string checkFile; string actionDirectoryName = Path.GetFileName(actionDirectory); @@ -96,7 +96,7 @@ internal abstract class MapLogic _ = Directory.CreateDirectory(checkDirectory); foreach (string file in files) { - if (matchFaceFile.Contains(file)) + if (facesFileNames.Contains(file)) { checkFile = Path.Combine(checkDirectory, Path.GetFileName(file)); if (File.Exists(checkFile)) @@ -112,7 +112,7 @@ internal abstract class MapLogic { string[] files; FileInfo[] collection; - string[] matchFaceFile; + string[] facesFileNames; string yearDirectoryName; string[] yearDirectories; string alphaDirectoryName; @@ -132,12 +132,20 @@ internal abstract class MapLogic personKeyFormatted = Path.GetFileName(personKeyDirectory); yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly); foreach (string yearDirectory in yearDirectories) + { + yearDirectoryName = Path.GetFileName(yearDirectory); + if (yearDirectoryName.StartsWith('=')) + Directory.Move(yearDirectory, yearDirectory.Replace('=', '~')); + } + yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly); + foreach (string yearDirectory in yearDirectories) { yearDirectoryName = Path.GetFileName(yearDirectory); matchDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly); alphaDirectories = matchDirectories.Where(l => !long.TryParse(Path.GetFileName(l), out long a)).ToArray(); if (!alphaDirectories.Any()) continue; + alphaDirectoryName = Path.GetFileName(alphaDirectories[0]); foreach (string matchDirectory in matchDirectories) { matchDirectoryName = Path.GetFileName(matchDirectory); @@ -145,15 +153,15 @@ internal abstract class MapLogic if (files.Length != 4) continue; collection = files.Select(l => new FileInfo(l)).ToArray(); - matchFaceFile = (from l in collection where l.Extension == configuration.FacesFileNameExtension && l.Name.Contains(matchDirectoryName) select l.FullName).ToArray(); - if (!matchFaceFile.Any()) + if (IPerson.IsDefaultName(configuration.MappingDefaultName, alphaDirectoryName)) + facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension select l.FullName).ToArray(); + else + facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension && l.Name.Contains(matchDirectoryName) select l.FullName).ToArray(); + if (!facesFileNames.Any()) continue; - alphaDirectoryName = Path.GetFileName(alphaDirectories[0]); personDisplayDirectory = Path.Combine(matchDirectory, alphaDirectoryName); if (!Directory.Exists(personDisplayDirectory) || !Directory.Exists(matchDirectory)) continue; - if (matchDirectory.Contains('=')) - continue; _ = System.Diagnostics.Process.Start("explorer", matchDirectory); for (int i = 0; i < int.MaxValue; i++) { @@ -161,7 +169,7 @@ internal abstract class MapLogic actionDirectories = Directory.GetDirectories(matchDirectory, "*", SearchOption.TopDirectoryOnly).Where(l => l != personDisplayDirectory && !l.EndsWith("Maybe")).ToArray(); if (actionDirectories.Any()) { - MoveTo(actionDirectories[0], ticksDirectory, directory, personKeyFormatted, yearDirectoryName, alphaDirectoryName, files, matchFaceFile); + MoveTo(actionDirectories[0], ticksDirectory, directory, personKeyFormatted, yearDirectoryName, alphaDirectoryName, files, facesFileNames); break; } } @@ -202,12 +210,12 @@ internal abstract class MapLogic foreach (string personKeyDirectory in personKeyDirectories) { personKeyFormatted = Path.GetFileName(personKeyDirectory); - if (personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Individually))) + isReservedDirectoryName = personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Sorting)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Mapping)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.ManualCopy)); + if (!isReservedDirectoryName && personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Individually))) { Individually(configuration, ticksDirectory, personKeyDirectory); - break; + 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!"); } - isReservedDirectoryName = personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Sorting)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Mapping)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.ManualCopy)); yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly); foreach (string yearDirectory in yearDirectories) { @@ -455,11 +463,16 @@ internal abstract class MapLogic progressBar.Tick(); if (!personKeyFormattedToNewestPersonKeyFormatted.TryGetValue(personKeyFormatted, out newestPersonKeyFormatted)) { - checkFile = $"{mappedFaceFile}.abd"; - if (File.Exists(checkFile)) + if (!personDisplayDirectoryNames.Any() || IPerson.IsDefaultName(configuration.MappingDefaultName, personDisplayDirectoryNames[^1])) + newestPersonKeyFormatted = personKeyFormatted; + else + { + checkFile = $"{mappedFaceFile}.abd"; + if (File.Exists(checkFile)) + continue; + File.Move(mappedFaceFile, checkFile); continue; - File.Move(mappedFaceFile, checkFile); - continue; + } } (id, normalizedRectangle) = IMapping.GetConverted(configuration.FacesFileNameExtension, mappedFaceFile); if (id is null || normalizedRectangle is null) @@ -749,13 +762,17 @@ internal abstract class MapLogic return result; } - internal static SaveContainer GetDebugSaveContainer(string directory, SortingContainer sortingContainer, Mapping mapping) + internal static SaveContainer GetDebugSaveContainer(string directory, MappingFromPerson? mappingFromPerson, SortingContainer sortingContainer, Mapping mapping) { SaveContainer result; if (sortingContainer.Mapping.MappingFromLocation is null) throw new NullReferenceException(nameof(sortingContainer.Mapping.MappingFromLocation)); FileHolder faceFileHolder = new($"C:/{sortingContainer.Sorting.Id}.{sortingContainer.Sorting.NormalizedRectangle}"); - string shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.debug.lnk"); + string shortcutFile; + if (mappingFromPerson is null) + shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.{sortingContainer.Sorting.DistancePermyriad}.lnk"); + else + shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.{sortingContainer.Sorting.DistancePermyriad}.lnk"); result = new(directory, faceFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile); return result; } diff --git a/Shared/Models/Mapping.cs b/Shared/Models/Mapping.cs index 5aa986c..c17ed6d 100644 --- a/Shared/Models/Mapping.cs +++ b/Shared/Models/Mapping.cs @@ -178,11 +178,11 @@ public class Mapping : Properties.IMapping return result; } - public void UpdateMappingFromUnknownPerson(SortingContainer sortingContainer) + public void UpdateMappingFromUnknownPerson(bool saveIndividually, SortingContainer sortingContainer) { _By = Stateless.IMapLogic.Sorting; _SortingContainer = sortingContainer; - _SegmentC = sortingContainer.Sorting.DistancePermyriad.ToString(); + _SegmentC = !saveIndividually ? null : sortingContainer.Sorting.DistancePermyriad.ToString(); } public void UpdateMappingFromPerson(int? approximateYears, string displayDirectoryName, PersonBirthday personBirthday, string segmentB) diff --git a/Shared/Models/Stateless/Methods/PersonContainer.cs b/Shared/Models/Stateless/Methods/PersonContainer.cs index ae7ad7c..f26b718 100644 --- a/Shared/Models/Stateless/Methods/PersonContainer.cs +++ b/Shared/Models/Stateless/Methods/PersonContainer.cs @@ -3,7 +3,7 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods; internal abstract class PersonContainer { - private static string[] GetFiles(string personDisplayDirectory, bool includeRoot) + private static string[] GetFiles(string personDisplayDirectory, bool isDefaultName) { List results = new(); string[] files; @@ -14,8 +14,6 @@ internal abstract class PersonContainer string fileNameWithoutExtension; string personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory); string[] directories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly); - if (includeRoot) - results.AddRange(Directory.GetFiles(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly)); foreach (string directory in directories) { directoryName = Path.GetFileName(directory); @@ -37,7 +35,7 @@ internal abstract class PersonContainer throw new NotSupportedException($"Move / Delete <{file}>"); distinct.Add(file); } - else if (fileNameWithoutExtension != directoryName) + else if (fileNameWithoutExtension != directoryName && !isDefaultName) { checkFile = Path.Combine(directory, $"{fileNameWithoutExtension}{extension}"); if (!File.Exists(checkFile)) @@ -60,7 +58,7 @@ internal abstract class PersonContainer return results.ToArray(); } - private static string[] GetFiles(string facesFileNameExtension, string personDisplayDirectory, bool includeRoot) + private static string[] GetFiles(string facesFileNameExtension, string personDisplayDirectory, bool isDefaultName) { string[] results; int? id; @@ -87,18 +85,17 @@ internal abstract class PersonContainer else File.Move(file, checkFile); } - results = GetFiles(personDisplayDirectory, includeRoot); + results = GetFiles(personDisplayDirectory, isDefaultName); return results; } - private static List GetPersonContainersCollections(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary> individuals, char @char, char numberSign, string personDisplayDirectory, string personDisplayDirectoryName, int? approximateYears, List<(string PersonKeyFormatted, Models.PersonBirthday PersonBirthday)> collection) + private static List GetPersonContainersCollections(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary> individuals, char @char, char numberSign, string personDisplayDirectory, string personDisplayDirectoryName, bool isDefaultName, int? approximateYears, List<(string PersonKeyFormatted, Models.PersonBirthday PersonBirthday)> collection) { List results = new(); long personKey; string[] matches; string? directory; const int zero = 0; - bool isDefaultName; bool verify = true; Models.Person person; List? individualsLines = null; @@ -106,7 +103,7 @@ internal abstract class PersonContainer Models.PersonBirthday[] orderedPersonBirthdays; Models.GenealogicalDataCommunication? genealogicalDataCommunication; GenealogicalDataCommunicationLines? genealogicalDataCommunicationLines; - string[] personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, includeRoot: false); + string[] personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, isDefaultName); foreach ((string personKeyFormatted, Models.PersonBirthday personBirthday) in collection) { orderedPersonBirthdays = (from l in collection where !l.PersonKeyFormatted.Contains(numberSign) orderby l.PersonBirthday.Value.Ticks descending select l.PersonBirthday).ToArray(); @@ -173,6 +170,7 @@ internal abstract class PersonContainer { List results = new(); string? minusOne; + bool isDefaultName; int? approximateYears; char numberSign = '#'; List changes = new(); @@ -186,6 +184,7 @@ internal abstract class PersonContainer personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory); if (string.IsNullOrEmpty(personDisplayDirectoryName)) continue; + isDefaultName = IPerson.IsDefaultName(mappingDefaultName, personDisplayDirectoryName); approximateYears = Age.GetApproximateYears(personCharacters, personDisplayDirectoryName); personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly); collection = PersonBirthday.GetPersonBirthdays(personBirthdayFormat, personKeyDirectories, personDisplayDirectory, personDisplayDirectoryName); @@ -199,10 +198,10 @@ internal abstract class PersonContainer if (changes.Any(l => l is not null)) continue; if (collection.Any()) - results.AddRange(GetPersonContainersCollections(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, @char, numberSign, personDisplayDirectory, personDisplayDirectoryName, approximateYears, collection)); + results.AddRange(GetPersonContainersCollections(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, @char, numberSign, personDisplayDirectory, personDisplayDirectoryName, isDefaultName, approximateYears, collection)); else { - personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, includeRoot: true); + personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, isDefaultName); personContainer = new(approximateYears, @char, personDisplayDirectoryAllFiles, personDisplayDirectoryName); results.Add(personContainer); }