diff --git a/Distance/Models/_E_Distance.cs b/Distance/Models/_E_Distance.cs index 0e9d90f..ce3fcbf 100644 --- a/Distance/Models/_E_Distance.cs +++ b/Distance/Models/_E_Distance.cs @@ -38,11 +38,11 @@ public partial class E_Distance _DistanceMoveUnableToMatch = distanceMoveUnableToMatch; } - private void MoveUnableToMatch(string eDistanceContentDirectory, string mappedFaceFile, string mappedFaceFileName) + private void MoveUnableToMatch(string eDistanceContentDirectory, string file, string fileName) { bool check; - string? directoryName = Path.GetDirectoryName(mappedFaceFile); - if (mappedFaceFileName is null || directoryName is null) + string? directoryName = Path.GetDirectoryName(file); + if (fileName is null || directoryName is null) check = false; else { @@ -66,7 +66,7 @@ public partial class E_Distance if (string.IsNullOrEmpty(checkDirectoryName) || !directoryNames.Any() || !long.TryParse(directoryNames[^1][1..^1], out long directoryTicks)) { check = false; - File.Delete(mappedFaceFile); + File.Delete(file); } else { @@ -75,13 +75,13 @@ public partial class E_Distance checkDirectoryName = Path.Combine(checkDirectoryName, directoryNames[i]); if (!Directory.Exists(checkDirectoryName)) _ = Directory.CreateDirectory(checkDirectoryName); - File.Move(mappedFaceFile, Path.Combine(checkDirectoryName, mappedFaceFileName)); + File.Move(file, Path.Combine(checkDirectoryName, fileName)); check = true; } } } if (check) - _Moved.Add(mappedFaceFile); + _Moved.Add(file); } private FaceDistanceContainer[] GetFaceDistanceContainers(MappingFromItem mappingFromItem, List filteredFaces) @@ -189,7 +189,7 @@ public partial class E_Distance return results; } - private static FileInfo? CheckFileThenGetFileInfo(string facesFileNameExtension, MappingFromItem mappingFromItem, string mappedFaceFile, List<(Face, double?)> checkFaces) + private static FileInfo? CheckFileThenGetFileInfo(string facesFileNameExtension, MappingFromItem mappingFromItem, string file, List<(Face, double?)> checkFaces) { FileInfo? result = null; string checkFile; @@ -201,27 +201,27 @@ public partial class E_Distance break; if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null) throw new NotSupportedException(); - mappedFaceDirectory = Path.GetDirectoryName(mappedFaceFile); + mappedFaceDirectory = Path.GetDirectoryName(file); if (mappedFaceDirectory is null) throw new NotSupportedException(); deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(mappingFromItem.Id, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution); checkFile = Path.Combine(mappedFaceDirectory, $"{deterministicHashCodeKey}{mappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}"); - if (checkFile == mappedFaceFile) + if (checkFile == file) continue; result = new FileInfo(checkFile); } return result; } - private void AppendMatchingDuplicates(string mappedFaceFile, string[] matches) + private void AppendMatchingDuplicates(string file, string[] matches) { string checkFile; - FileInfo fileInfo = new(mappedFaceFile); + FileInfo fileInfo = new(file); List<(long Length, string FullName)> collection = new(); if (fileInfo.Exists) collection.Add(new(fileInfo.Length, fileInfo.FullName)); lock (_DuplicateMappedFaceFiles) - _DuplicateMappedFaceFiles.Add(mappedFaceFile); + _DuplicateMappedFaceFiles.Add(file); foreach (string match in matches) { fileInfo = new(match); @@ -269,34 +269,38 @@ public partial class E_Distance return results; } - public void LookForMatchFacesAndPossiblyRename(string facesFileNameExtension, string eDistanceContentDirectory, MappingFromItem mappingFromItem, List faces, List<(string MappedFaceFile, int NormalizedRectangle, IReadOnlyList? Directories)> collection) + public void LookForMatchFacesAndPossiblyRename(string facesFileNameExtension, string eDistanceContentDirectory, MappingFromItem mappingFromItem, List faces, List<(bool c, string File, int NormalizedRectangle, IReadOnlyList? Directories)> collection) { string? json; + string fileName; string[] matches; FileInfo? fileInfo; - string mappedFaceFileName; List<(Face, double?)> checkFaces = new(); Shared.Models.FaceEncoding? modelsFaceEncoding; Face[] filteredFaces = (from l in faces where l.FaceEncoding is not null && l.Location is not null && l.OutputResolution is not null select l).ToArray(); if (filteredFaces.Length != faces.Count) checkFaces.Clear(); - foreach ((string mappedFaceFile, int normalizedRectangle, IReadOnlyList? directories) in collection) + foreach ((bool fromDistanceContent, string file, int normalizedRectangle, IReadOnlyList? directories) in collection) { if (!filteredFaces.Any()) break; - if (_Renamed.Contains(mappedFaceFile)) + if (_Renamed.Contains(file)) continue; - mappedFaceFileName = Path.GetFileName(mappedFaceFile); - if (_DuplicateMappedFaceFiles.Contains(mappedFaceFileName)) + fileName = Path.GetFileName(file); + if (fromDistanceContent && _DuplicateMappedFaceFiles.Contains(fileName)) continue; checkFaces.Clear(); if (directories is null) - throw new NullReferenceException(nameof(directories)); + { + if (fromDistanceContent) + throw new NullReferenceException(nameof(directories)); + continue; + } json = Metadata.Models.Stateless.IMetadata.GetFaceEncoding(directories); if (json is null) { if (_DistanceMoveUnableToMatch) - MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName); + MoveUnableToMatch(eDistanceContentDirectory, file, fileName); continue; } checkFaces.AddRange(GetMatchingFacesByFaceEncoding(filteredFaces, json)); @@ -313,38 +317,41 @@ public partial class E_Distance if (!checkFaces.Any()) { if (_DistanceMoveUnableToMatch) - MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName); + MoveUnableToMatch(eDistanceContentDirectory, file, fileName); continue; } if (checkFaces.Count != 1) { if (_DistanceMoveUnableToMatch) - MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName); + MoveUnableToMatch(eDistanceContentDirectory, file, fileName); continue; } - fileInfo = CheckFileThenGetFileInfo(facesFileNameExtension, mappingFromItem, mappedFaceFile, checkFaces); + fileInfo = CheckFileThenGetFileInfo(facesFileNameExtension, mappingFromItem, file, checkFaces); if (fileInfo is not null) { if (_DistanceRenameToMatch && fileInfo is not null) { if (fileInfo.Exists) - File.Delete(fileInfo.FullName); - File.Move(mappedFaceFile, fileInfo.FullName); - _Renamed.Add(mappedFaceFile); + File.Delete(file); + else + File.Move(file, fileInfo.FullName); + _Renamed.Add(file); } continue; } - if (_AllMappedFaceFileNames.Contains(mappedFaceFileName)) + if (_AllMappedFaceFileNames.Contains(fileName)) { lock (_AllMappedFaceFiles) - matches = (from l in _AllMappedFaceFiles where l != mappedFaceFile && Path.GetFileName(l) == mappedFaceFileName select l).ToArray(); - if (matches.Any()) - AppendMatchingDuplicates(mappedFaceFile, matches); + matches = (from l in _AllMappedFaceFiles where l != file && Path.GetFileName(l) == fileName select l).ToArray(); + if (fromDistanceContent && matches.Any()) + AppendMatchingDuplicates(file, matches); } + if (!fromDistanceContent) + continue; lock (_AllMappedFaceFiles) - _AllMappedFaceFiles.Add(mappedFaceFile); + _AllMappedFaceFiles.Add(file); lock (_AllMappedFaceFileNames) - _AllMappedFaceFileNames.Add(mappedFaceFileName); + _AllMappedFaceFileNames.Add(fileName); } } diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index 10acda8..d04691b 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -282,7 +282,7 @@ public partial class DlibDotNet return result; } - private void FullParallelForWork(A_Property propertyLogic, Dictionary?)>> idToMappedFaceFilesWithCollection, string outputResolution, string bResultsFullGroupDirectory, string cResultsFullGroupDirectory, string dResultsDateGroupDirectory, string dResultsFullGroupDirectory, string eDistanceContentDirectory, List> sourceDirectoryChanges, List propertyFileHolderCollection, List propertyCollection, List>> metadataCollections, List> resizeKeyValuePairs, List> imageFaceCollections, Container container, int index, Item item, DateTime[] containerDateTimes) + private void FullParallelForWork(A_Property propertyLogic, Dictionary?)>> idToMappedFaceFilesWithCollection, string outputResolution, string bResultsFullGroupDirectory, string cResultsFullGroupDirectory, string dResultsDateGroupDirectory, string dResultsFullGroupDirectory, string eDistanceContentDirectory, List> sourceDirectoryChanges, List propertyFileHolderCollection, List propertyCollection, List>> metadataCollections, List> resizeKeyValuePairs, List> imageFaceCollections, Container container, int index, Item item, DateTime[] containerDateTimes) { if (_Log is null) throw new NullReferenceException(nameof(_Log)); @@ -368,7 +368,7 @@ public partial class DlibDotNet int outputResolutionHeight = outputResolutionCollection[1]; int outputResolutionOrientation = outputResolutionCollection[2]; List? mappingFromPhotoPrismCollection; - List<(string, int, IReadOnlyList?)>? collection; + List<(bool, string, int, IReadOnlyList?)>? collection; if (!_FileNameToCollection.TryGetValue(mappingFromItem.RelativePath[1..], out mappingFromPhotoPrismCollection)) mappingFromPhotoPrismCollection = null; faces = _Faces.GetFaces(dResultsFullGroupDirectory, subFileTuples, parseExceptions, property, mappingFromItem, outputResolutionWidth, outputResolutionHeight, outputResolutionOrientation, mappingFromPhotoPrismCollection); @@ -404,7 +404,7 @@ public partial class DlibDotNet private int FullParallelWork(int maxDegreeOfParallelism, A_Property propertyLogic, - Dictionary?)>> idToMappedFaceFilesWithCollection, + Dictionary?)>> idToMappedFaceFilesWithCollection, string outputResolution, string bResultsFullGroupDirectory, string cResultsFullGroupDirectory, @@ -657,7 +657,7 @@ public partial class DlibDotNet int maxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism; List nullablePropertyCollection = new(); List>> metadataCollection = new(); - Dictionary?)>> idToMappedFaceFilesWithCollection = GetCollection(ticks, a2PeopleContentDirectory, eDistanceContentDirectory); + Dictionary?)>> idToMappedFaceFilesWithCollection = GetDictionary(ticks, a2PeopleContentDirectory, eDistanceContentDirectory); string dResultsDateGroupDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(D_Face)); foreach (string outputResolution in _Configuration.OutputResolutions) { @@ -1005,48 +1005,69 @@ public partial class DlibDotNet return results; } - private void ParallelForAdd(Dictionary?)>> results, (string PersonKeyFormatted, string[] PersonDisplayDirectoryNames, string MappedFaceFile) value) + private void ParallelFor(string eDistanceContentDirectory, List<(bool, string, int, int, IReadOnlyList?)> collection, string file) { - (int? id, int? normalizedRectangle) = Shared.Models.Stateless.Methods.IMapping.GetConverted(_Faces.FileNameExtension, value.MappedFaceFile); - if (id is null || normalizedRectangle is null || !results.TryGetValue(id.Value, out List<(string, int, IReadOnlyList?)>? collection)) + const string lnk = ".lnk"; + int? id, normalizedRectangle; + IReadOnlyList? directories; + bool fromDistanceContent = !file.EndsWith(lnk) && file.Contains(eDistanceContentDirectory); + if (!file.EndsWith(lnk)) + (id, normalizedRectangle) = Shared.Models.Stateless.Methods.IMapping.GetConverted(_MapConfiguration.FacesFileNameExtension, file); + else + (id, normalizedRectangle) = Shared.Models.Stateless.Methods.IMapping.GetConverted(_MapConfiguration.FacesFileNameExtension, file[..^4]); + if (id is null || normalizedRectangle is null) return; - IReadOnlyList directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(value.MappedFaceFile); + if (file.EndsWith(lnk) || (!_Configuration.DistanceMoveUnableToMatch && !_Configuration.DistanceRenameToMatch)) + directories = null; + else + directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(file); lock (collection) - collection.Add(new(value.MappedFaceFile, normalizedRectangle.Value, directories)); + collection.Add(new(fromDistanceContent, file, id.Value, normalizedRectangle.Value, directories)); } - private Dictionary?)>> GetCollection(long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) + private List<(bool, string, int, int, IReadOnlyList?)> GetCollection(long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) { - Dictionary?)>> results = new(); - int? id; - int? normalizedRectangle; - List<(string, string[], string)> collection = Map.Models.Stateless.Methods.IMapLogic.DeleteEmptyDirectoriesAndGetMappedFaceFiles(_MapConfiguration, _PersonContainers, ticks, a2PeopleContentDirectory, eDistanceContentDirectory); - foreach ((string personKeyFormatted, string[] personDisplayDirectoryNames, string mappedFaceFile) in collection) - { - (id, normalizedRectangle) = Shared.Models.Stateless.Methods.IMapping.GetConverted(_Faces.FileNameExtension, mappedFaceFile); - if (id is null || normalizedRectangle is null) - continue; - if (!results.ContainsKey(id.Value)) - results.Add(id.Value, new()); - if (!_Configuration.DistanceMoveUnableToMatch && !_Configuration.DistanceRenameToMatch) - results[id.Value].Add(new(mappedFaceFile, normalizedRectangle.Value, null)); - } - if (results.Any() && (_Configuration.DistanceMoveUnableToMatch || _Configuration.DistanceRenameToMatch)) + List files = new(); + List<(bool, string, int, int, IReadOnlyList?)> results = new(); + files.AddRange(Map.Models.Stateless.Methods.IMapLogic.GetDisplayDirectoryAllFiles(_PersonContainers)); + files.AddRange(Map.Models.Stateless.Methods.IMapLogic.DeleteEmptyDirectoriesAndGetMappedFaceFiles(_MapConfiguration, _PersonContainers, ticks, a2PeopleContentDirectory, eDistanceContentDirectory)); + // foreach (string file in files) + // { + // if (!file.EndsWith(".dup")) + // continue; + // if (!File.Exists(file)) + // continue; + // File.Move(file, file[..^4]); + // } + if (files.Any() && (_Configuration.DistanceMoveUnableToMatch || _Configuration.DistanceRenameToMatch)) { int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); string message = $") Building Mapped Face Files Collection - {totalSeconds} total second(s)"; ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; - using ProgressBar progressBar = new(collection.Count, message, options); - _ = Parallel.For(0, collection.Count, parallelOptions, (i, state) => + using ProgressBar progressBar = new(files.Count, message, options); + _ = Parallel.For(0, files.Count, parallelOptions, (i, state) => { - ParallelForAdd(results, collection[i]); progressBar.Tick(); + ParallelFor(eDistanceContentDirectory, results, files[i]); }); } return results; } + private Dictionary?)>> GetDictionary(long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) + { + Dictionary?)>> results = new(); + List<(bool, string, int, int, IReadOnlyList?)> collection = GetCollection(ticks, a2PeopleContentDirectory, eDistanceContentDirectory); + foreach ((bool fromDistanceContent, string file, int id, int normalizedRectangle, IReadOnlyList? directories) in collection) + { + if (!results.ContainsKey(id)) + results.Add(id, new()); + results[id].Add(new(fromDistanceContent, file, normalizedRectangle, directories)); + } + return results; + } + private void Search(long ticks, string argZero, string propertyRoot) { int j; diff --git a/Map/Models/Stateless/MapLogic.cs b/Map/Models/Stateless/MapLogic.cs index 5b00daa..ed13481 100644 --- a/Map/Models/Stateless/MapLogic.cs +++ b/Map/Models/Stateless/MapLogic.cs @@ -29,7 +29,7 @@ internal abstract class MapLogic continue; personBirthday = IPersonBirthday.GetPersonBirthday(personKey); person = IPerson.GetPerson(configuration.MappingDefaultName, personKey, personBirthday); - personContainer = new(approximateYears, person, new PersonBirthday[] { personBirthday }, personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey, partialKeyFormatted: null); + personContainer = new(approximateYears, person, new PersonBirthday[] { personBirthday }, personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey); results.Add(personContainer); } return results; @@ -82,12 +82,12 @@ internal abstract class MapLogic string[] files; const int zero = 0; string[] yearDirectories; + int? normalizedRectangle; string personKeyFormatted; string ticksDirectoryName; string? personFirstInitial; DirectoryInfo directoryInfo; string[] personKeyDirectories; - int? normalizedRectangle; string[] personNameDirectories; string[] personNameLinkDirectories; string? personFirstInitialDirectory; @@ -189,13 +189,29 @@ internal abstract class MapLogic return results; } - internal static List<(string, string[], string)> DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) + private static List GetPersonKeyFormattedCollection(Configuration configuration, PersonContainer[] personContainers, List<(long? PersonKey, string Line)> lines) { - List<(string, string[], string)> results; + List results = new(); string personKeyFormatted; - List personKeyFormattedCollection = new(); + foreach (PersonContainer personContainer in personContainers) + { + lines.AddRange(IPersonContainer.GetDisplay(configuration.PersonBirthdayFormat, personContainer)); + if (personContainer.Person is null || personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any()) + continue; + foreach (PersonBirthday personBirthday in personContainer.Birthdays) + { + personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, personBirthday); + results.Add(personKeyFormatted); + } + } + return results; + } + + internal static List DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) + { + List results = new(); List<(long? PersonKey, string Line)> lines = new(); - _ = GetDistinctCollection(configuration, personContainers.ToList(), new()); + _ = GetDistinctCollection(configuration, personContainers, new()); int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); string[] ticksDirectories; if (string.IsNullOrEmpty(eDistanceContentDirectory)) @@ -213,20 +229,12 @@ internal abstract class MapLogic ticksDirectories = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly); } string message = $") {ticksDirectories.Length:000} collect from and clean ticks Director(ies) - A - {totalSeconds} total second(s)"; - foreach (PersonContainer personContainer in personContainers) - { - lines.AddRange(IPersonContainer.GetDisplay(configuration.PersonBirthdayFormat, personContainer)); - if (personContainer.Person is null || personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any()) - continue; - foreach (PersonBirthday personBirthday in personContainer.Birthdays) - { - personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, personBirthday); - personKeyFormattedCollection.Add(personKeyFormatted); - } - } + List personKeyFormattedCollection = GetPersonKeyFormattedCollection(configuration, personContainers, lines); if (!string.IsNullOrEmpty(a2PeopleContentDirectory)) File.WriteAllLines(Path.Combine(a2PeopleContentDirectory, "People - C.tsv"), from l in lines select l.Line); - results = DeleteEmptyDirectoriesAndGetCollection(configuration, personKeyFormattedCollection, ticksDirectories, message); + List<(string, string[], string)> collection = DeleteEmptyDirectoriesAndGetCollection(configuration, personKeyFormattedCollection, ticksDirectories, message); + foreach ((string personKeyFormatted, string[] personDisplayDirectoryNames, string mappedFaceFile) in collection) + results.Add(mappedFaceFile); return results; } @@ -322,7 +330,7 @@ internal abstract class MapLogic } } - private static List<(long, PersonContainer)> GetDistinctCollection(Configuration configuration, List personContainers, Dictionary personKeyFormattedToPersonContainer) + private static List<(long, PersonContainer)> GetDistinctCollection(Configuration configuration, IEnumerable personContainers, Dictionary personKeyFormattedToPersonContainer) { List<(long, PersonContainer)> results = new(); const int zero = 0; @@ -722,4 +730,19 @@ internal abstract class MapLogic } } + internal static List GetDisplayDirectoryAllFiles(PersonContainer[] personContainers) + { + List results = new(); + foreach (PersonContainer personContainer in personContainers) + { + foreach (string displayDirectoryAllFile in personContainer.DisplayDirectoryAllFiles) + { + if (displayDirectoryAllFile.EndsWith(".json")) + continue; + results.Add(displayDirectoryAllFile); + } + } + return results; + } + } \ No newline at end of file diff --git a/Map/Models/Stateless/Methods/IMapLogic.cs b/Map/Models/Stateless/Methods/IMapLogic.cs index 28cab28..87ce209 100644 --- a/Map/Models/Stateless/Methods/IMapLogic.cs +++ b/Map/Models/Stateless/Methods/IMapLogic.cs @@ -3,9 +3,14 @@ namespace View_by_Distance.Map.Models.Stateless.Methods; public interface IMapLogic { // ... - List<(string, string[], string)> TestStatic_DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, Shared.Models.PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) => + List TestStatic_GetDisplayDirectoryAllFiles(Shared.Models.PersonContainer[] personContainers) => + GetDisplayDirectoryAllFiles(personContainers); + static List GetDisplayDirectoryAllFiles(Shared.Models.PersonContainer[] personContainers) => + MapLogic.GetDisplayDirectoryAllFiles(personContainers); + + List TestStatic_DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, Shared.Models.PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) => DeleteEmptyDirectoriesAndGetMappedFaceFiles(configuration, personContainers, ticks, a2PeopleContentDirectory, eDistanceContentDirectory); - static List<(string, string[], string)> DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, Shared.Models.PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) => + static List DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, Shared.Models.PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) => MapLogic.DeleteEmptyDirectoriesAndGetMappedFaceFiles(configuration, personContainers, ticks, a2PeopleContentDirectory, eDistanceContentDirectory); } \ No newline at end of file diff --git a/Shared/Models/PersonContainer.cs b/Shared/Models/PersonContainer.cs index ca7d673..5df83fb 100644 --- a/Shared/Models/PersonContainer.cs +++ b/Shared/Models/PersonContainer.cs @@ -12,10 +12,9 @@ public class PersonContainer : Properties.IPersonContainer public string[] DisplayDirectoryAllFiles { init; get; } public string DisplayDirectoryName { init; get; } public long? Key { init; get; } - public string? PartialKeyFormatted { init; get; } [JsonConstructor] - public PersonContainer(int? approximateYears, Person? person, PersonBirthday[]? birthdays, string[] displayDirectoryAllFiles, string displayDirectoryName, long? key, string? partialKeyFormatted) + public PersonContainer(int? approximateYears, Person? person, PersonBirthday[]? birthdays, string[] displayDirectoryAllFiles, string displayDirectoryName, long? key) { ApproximateYears = approximateYears; Person = person; @@ -23,19 +22,18 @@ public class PersonContainer : Properties.IPersonContainer DisplayDirectoryAllFiles = displayDirectoryAllFiles; DisplayDirectoryName = displayDirectoryName; Key = key; - PartialKeyFormatted = partialKeyFormatted; } public PersonContainer(int? approximateYears, string[] displayDirectoryAllFiles, string displayDirectoryName) : - this(approximateYears, null, null, displayDirectoryAllFiles, displayDirectoryName, null, null) + this(approximateYears, null, null, displayDirectoryAllFiles, displayDirectoryName, null) { } public PersonContainer(int? approximateYears, PersonBirthday birthdays, string displayDirectoryName, long key) : - this(approximateYears, null, new PersonBirthday[] { birthdays }, Array.Empty(), displayDirectoryName, key, null) + this(approximateYears, null, new PersonBirthday[] { birthdays }, Array.Empty(), displayDirectoryName, key) { } public PersonContainer(PersonBirthday birthday, string displayDirectoryName) : - this(Stateless.Methods.IAge.GetApproximateYears(displayDirectoryName), Stateless.Methods.IPerson.GetPerson(displayDirectoryName, birthday.Value.Ticks, birthday), new PersonBirthday[] { birthday }, Array.Empty(), displayDirectoryName, birthday.Value.Ticks, null) + this(Stateless.Methods.IAge.GetApproximateYears(displayDirectoryName), Stateless.Methods.IPerson.GetPerson(displayDirectoryName, birthday.Value.Ticks, birthday), new PersonBirthday[] { birthday }, Array.Empty(), displayDirectoryName, birthday.Value.Ticks) { } public override string ToString() diff --git a/Shared/Models/Properties/IPersonContainer.cs b/Shared/Models/Properties/IPersonContainer.cs index 7f27f5d..fed6c4e 100644 --- a/Shared/Models/Properties/IPersonContainer.cs +++ b/Shared/Models/Properties/IPersonContainer.cs @@ -9,6 +9,5 @@ public interface IPersonContainer public string[] DisplayDirectoryAllFiles { init; get; } public string DisplayDirectoryName { init; get; } public long? Key { init; get; } - public string? PartialKeyFormatted { init; get; } } \ No newline at end of file diff --git a/Shared/Models/Stateless/Methods/PersonContainer.cs b/Shared/Models/Stateless/Methods/PersonContainer.cs index fc736c1..b705e71 100644 --- a/Shared/Models/Stateless/Methods/PersonContainer.cs +++ b/Shared/Models/Stateless/Methods/PersonContainer.cs @@ -40,10 +40,8 @@ internal abstract class PersonContainer string[] segments; const int zero = 0; Models.Person person; - string? partialPersonKeyFormatted; Models.PersonContainer personContainer; Models.PersonBirthday[] orderedPersonBirthdays; - IEnumerable partialPersonKeyFormattedCollection; string[] personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory); foreach ((string personKeyFormatted, Models.PersonBirthday personBirthday) in collection) { @@ -58,9 +56,7 @@ internal abstract class PersonContainer personKey = orderedPersonBirthdays[zero].Value.Ticks; } person = IPerson.GetPerson(personKey, segments); - partialPersonKeyFormattedCollection = (from l in collection where l.PersonKeyFormatted.Contains(numberSign) select l.PersonKeyFormatted); - partialPersonKeyFormatted = partialPersonKeyFormattedCollection.FirstOrDefault(); - personContainer = new(approximateYears, person, orderedPersonBirthdays, personDisplayDirectoryAllFiles, personDisplayDirectoryName, personKey, partialPersonKeyFormatted); + personContainer = new(approximateYears, person, orderedPersonBirthdays, personDisplayDirectoryAllFiles, personDisplayDirectoryName, personKey); results.Add(new(personKey, personContainer)); } return results;