diff --git a/.vscode/launch.json b/.vscode/launch.json index a40dbc0..5407333 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,7 +5,7 @@ "name": "Rename", "type": "coreclr", "request": "launch", - "preLaunchTask": "build-Rename", + "preLaunchTask": "Build-Rename", "program": "${workspaceFolder}/Rename/bin/Debug/net9.0/win-x64/AA.Rename.dll", "args": [ "s" @@ -22,7 +22,7 @@ "name": "Compare", "type": "coreclr", "request": "launch", - "preLaunchTask": "build-Compare", + "preLaunchTask": "Build-Compare", "program": "${workspaceFolder}/Compare/bin/Debug/net9.0/win-x64/AA.Compare.dll", "args": [ "s" diff --git a/Distance/Models/Stateless/MappedLogicA.cs b/Distance/Models/Stateless/MappedLogicA.cs index eb4a9a3..6857aec 100644 --- a/Distance/Models/Stateless/MappedLogicA.cs +++ b/Distance/Models/Stateless/MappedLogicA.cs @@ -17,6 +17,7 @@ internal static class MappedLogicA private static List GetDisplayDirectoryAllFiles(PeopleSettings peopleSettings, ICompareSettings compareSettings, ReadOnlyCollections readOnlyCollections) { List results = []; + FilePath filePath; MappedFile mappedFile; string personKeyFormatted; List distinct = []; @@ -27,14 +28,15 @@ internal static class MappedLogicA continue; for (int i = personContainer.DisplayDirectoryAllFilePaths.Count - 1; i > -1; i--) { - if (personContainer.DisplayDirectoryAllFilePaths[i].ExtensionLowered != compareSettings.FacesFileNameExtension) + filePath = personContainer.DisplayDirectoryAllFilePaths[i]; + if (filePath.ExtensionLowered != compareSettings.FacesFileNameExtension) continue; - if (distinct.Contains(personContainer.DisplayDirectoryAllFilePaths[i].Name)) + if (distinct.Contains(filePath.Name)) continue; - distinct.Add(personContainer.DisplayDirectoryAllFilePaths[i].Name); + distinct.Add(filePath.Name); personKeyFormatted = IPersonBirthday.GetFormatted(peopleSettings.PersonBirthdayFormat, personContainer.Key.Value); - personKeyFormattedAndKeyTicksAndDisplayDirectoryName = new(personKeyFormatted, personContainer.Key.Value, personContainer.DisplayDirectoryAllFilePaths[i].Name); - mappedFile = new(personKeyFormattedAndKeyTicksAndDisplayDirectoryName, personContainer.DisplayDirectoryName, personContainer.DisplayDirectoryAllFilePaths[i]); + personKeyFormattedAndKeyTicksAndDisplayDirectoryName = new(personKeyFormatted, personContainer.Key.Value, filePath.Name); + mappedFile = new(personKeyFormattedAndKeyTicksAndDisplayDirectoryName, personContainer.DisplayDirectoryName, filePath); results.Add(mappedFile); } } @@ -51,8 +53,11 @@ internal static class MappedLogicA MappedFile mappedFile; List distinct = []; PersonBirthday? personBirthday; - PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName personKeyFormattedAndKeyTicksAndDisplayDirectoryName; + PersonContainer? personContainer; + string? personDisplayDirectoryName; results.AddRange(GetDisplayDirectoryAllFiles(peopleSettings, compareSettings, readOnlyCollections)); + ReadOnlyDictionary keyValuePairs = PersonContainer.Extract(readOnlyCollections.PersonContainers); + PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName personKeyFormattedAndKeyTicksAndDisplayDirectoryName; foreach (MappedLogicB.Record record in records) { personBirthday = IPersonBirthday.GetPersonBirthday(peopleSettings.PersonBirthdayFormat, record.PersonKeyFormatted); @@ -62,8 +67,12 @@ internal static class MappedLogicA continue; distinct.Add(record.MappedFaceFilePath.Name); personKey = personBirthday.Value.Ticks; - personKeyFormattedAndKeyTicksAndDisplayDirectoryName = new(record.PersonKeyFormatted, personKey, record.PersonDisplayDirectoryName); - mappedFile = new(personKeyFormattedAndKeyTicksAndDisplayDirectoryName, record.PersonDisplayDirectoryName, record.MappedFaceFilePath); + if (!keyValuePairs.TryGetValue(personKey, out personContainer)) + personDisplayDirectoryName = record.PersonDisplayDirectoryName; + else + personDisplayDirectoryName = personContainer.DisplayDirectoryName; + personKeyFormattedAndKeyTicksAndDisplayDirectoryName = new(record.PersonKeyFormatted, personKey, personDisplayDirectoryName); + mappedFile = new(personKeyFormattedAndKeyTicksAndDisplayDirectoryName, personDisplayDirectoryName, record.MappedFaceFilePath); results.Add(mappedFile); } for (int i = results.Count - 1; i > -1; i--) diff --git a/Shared/Models/PersonContainer.cs b/Shared/Models/PersonContainer.cs index a8f1300..514dae0 100644 --- a/Shared/Models/PersonContainer.cs +++ b/Shared/Models/PersonContainer.cs @@ -40,6 +40,18 @@ public record PersonContainer(int? ApproximateYears, public static bool? IsKeyIsMaxBirthday(PersonContainer personContainer) => personContainer.Birthdays is null || personContainer.Key is null ? null : personContainer.Key.Value == personContainer.Birthdays.First().Value.Ticks; + public static ReadOnlyDictionary Extract(ReadOnlyCollection personContainers) + { + Dictionary results = []; + foreach (PersonContainer personContainer in personContainers) + { + if (personContainer.Key is null || results.ContainsKey(personContainer.Key.Value)) + continue; + results.Add(personContainer.Key.Value, personContainer); + } + return results.AsReadOnly(); + } + } [JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)] diff --git a/Shared/Models/PersonKeyFormattedAndPersonKeyTicks.cs b/Shared/Models/PersonKeyFormattedAndPersonKeyTicks.cs index 32ad454..340b393 100644 --- a/Shared/Models/PersonKeyFormattedAndPersonKeyTicks.cs +++ b/Shared/Models/PersonKeyFormattedAndPersonKeyTicks.cs @@ -3,7 +3,9 @@ using System.Text.Json.Serialization; namespace View_by_Distance.Shared.Models; -public record PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName(string KeyFormatted, long KeyTicks, string? DisplayDirectoryName) +public record PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName(string KeyFormatted, + long KeyTicks, + string? DisplayDirectoryName) { public override string ToString()