From 86b13dc00f761e3a84a0e347505bce319bbbaf95 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Mon, 27 May 2024 10:05:37 -0700 Subject: [PATCH] Fix the errors --- Instance/DlibDotNet.cs | 37 +++++++++++++++++-- Instance/Models/Binder/Configuration.cs | 3 ++ Instance/Models/Configuration.cs | 1 + Map/Models/MapLogic.cs | 49 +++++++------------------ 4 files changed, 51 insertions(+), 39 deletions(-) diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index 4107f81..6965d8a 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -855,6 +855,34 @@ public partial class DlibDotNet : IDlibDotNet, IDisposable return new(results); } + public ReadOnlyDictionary GetOnlyOne(IDistanceLimits distanceLimits, ReadOnlyCollection matrix) + { + Dictionary results = []; + List added = []; + LocationContainer? tryGetValue; + foreach (LocationContainer locationContainer in matrix) + { + if (_Configuration.SaveIndividually) + break; + if (locationContainer.LengthSource is null) + continue; + if (_Configuration.UseExtraPersonKeyCheck) + { + if (results.TryGetValue(locationContainer.LengthSource.Name, out tryGetValue)) + { + if (locationContainer.PersonKey is not null && tryGetValue.PersonKey is not null && locationContainer.PersonKey.Value != tryGetValue.PersonKey) + _ = results.Remove(locationContainer.LengthSource.Name); + continue; + } + } + if (added.Contains(locationContainer.LengthSource.Name)) + continue; + added.Add(locationContainer.LengthSource.Name); + results.Add(locationContainer.LengthSource.Name, locationContainer); + } + return new(results); + } + private List GetSaveContainers(long ticks, ReadOnlyCollection personContainers, string a2PeopleSingletonDirectory, string eDistanceContentDirectory, ProgressBarOptions options, MapLogic mapLogic, string outputResolution) { List results; @@ -886,11 +914,14 @@ public partial class DlibDotNet : IDlibDotNet, IDisposable _ProgressBar = new(postFiltered.Count, message, options); ReadOnlyCollection matrix = E_Distance.GetMatrixLocationContainers(this, _MapConfiguration, ticks, mapLogic, mappedWithEncoding, preFiltered, distanceLimits, postFiltered); _ProgressBar.Dispose(); - ReadOnlyDictionary oneOnly = mapLogic.GetOneOnly(distanceLimits, matrix); - if (oneOnly.Count == 0) + ReadOnlyDictionary onlyOne = GetOnlyOne(distanceLimits, matrix); + if (onlyOne.Count == 0) results = []; else - results = mapLogic.GetSaveContainers(cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, distanceLimits, oneOnly); + { + ReadOnlyDictionary personKeyToPersonContainer = mapLogic.GetPersonKeyToPersonContainer(); + results = mapLogic.GetSaveContainers(cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, distanceLimits, onlyOne, personKeyToPersonContainer); + } } } return results; diff --git a/Instance/Models/Binder/Configuration.cs b/Instance/Models/Binder/Configuration.cs index 24bdf44..aaaeb65 100644 --- a/Instance/Models/Binder/Configuration.cs +++ b/Instance/Models/Binder/Configuration.cs @@ -94,6 +94,7 @@ public class Configuration public int? SortingMaximumPerKey { get; set; } public int? SortingMinimumToUseSigma { get; set; } public bool? TestDistanceResults { get; set; } + public bool? UseExtraPersonKeyCheck { get; set; } public int? UseFilterTries { get; set; } public string[]? ValidKeyWordsToIgnoreInRandom { get; set; } public string[]? ValidResolutions { get; set; } @@ -213,6 +214,7 @@ public class Configuration if (configuration?.SortingMaximumPerKey is null) throw new NullReferenceException(nameof(configuration.SortingMaximumPerKey)); if (configuration?.SortingMinimumToUseSigma is null) throw new NullReferenceException(nameof(configuration.SortingMinimumToUseSigma)); if (configuration?.TestDistanceResults is null) throw new NullReferenceException(nameof(configuration.TestDistanceResults)); + if (configuration?.UseExtraPersonKeyCheck is null) throw new NullReferenceException(nameof(configuration.UseExtraPersonKeyCheck)); if (configuration?.UseFilterTries is null) throw new NullReferenceException(nameof(configuration.UseFilterTries)); // if (configuration?.ValidKeyWordsToIgnoreInRandom is null) throw new NullReferenceException(nameof(configuration.ValidKeyWordsToIgnoreInRandom)); // if (configuration?.ValidResolutions is null) throw new NullReferenceException(nameof(configuration.ValidResolutions)); @@ -304,6 +306,7 @@ public class Configuration configuration.SortingMaximumPerKey.Value, configuration.SortingMinimumToUseSigma.Value, configuration.TestDistanceResults.Value, + configuration.UseExtraPersonKeyCheck.Value, configuration.UseFilterTries.Value, configuration.ValidKeyWordsToIgnoreInRandom ?? [], configuration.ValidResolutions ?? []); diff --git a/Instance/Models/Configuration.cs b/Instance/Models/Configuration.cs index 6ada4af..642e9bc 100644 --- a/Instance/Models/Configuration.cs +++ b/Instance/Models/Configuration.cs @@ -88,6 +88,7 @@ public record Configuration(Property.Models.Configuration PropertyConfiguration, int SortingMaximumPerKey, int SortingMinimumToUseSigma, bool TestDistanceResults, + bool UseExtraPersonKeyCheck, int UseFilterTries, string[] ValidKeyWordsToIgnoreInRandom, string[] ValidResolutions); \ No newline at end of file diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs index 54331db..649d778 100644 --- a/Map/Models/MapLogic.cs +++ b/Map/Models/MapLogic.cs @@ -359,6 +359,13 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic return new(results); } + public ReadOnlyDictionary GetPersonKeyToPersonContainer() + { + Dictionary results = []; + (); + return new(results); + } + public ReadOnlyDictionary> GetPersonKeyToIds() { Dictionary> results = []; @@ -820,9 +827,10 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic return result; } - private string? GetDisplayDirectoryName(string? displayDirectoryName, LocationContainer locationContainer) + private string? GetDisplayDirectoryName(string? displayDirectoryName, LocationContainer locationContainer, ReadOnlyDictionary personKeyToPersonContainer) { string? result = displayDirectoryName; + personKeyToPersonContainer(); ReadOnlyDictionary>? wholePercentagesToPersonContainers = GetWholePercentagesToPersonContainers(locationContainer.Id); if (wholePercentagesToPersonContainers is not null) { @@ -838,34 +846,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic return result; } - public ReadOnlyDictionary GetOneOnly(Shared.Models.Methods.IDistanceLimits distanceLimits, ReadOnlyCollection matrix) - { - if (_Configuration is null) - throw new NullReferenceException(nameof(_Configuration)); - Dictionary results = []; - List added = []; - LocationContainer? tryGetValue; - foreach (LocationContainer locationContainer in matrix) - { - if (_Configuration.SaveIndividually) - break; - if (locationContainer.LengthSource is null) - continue; - if (results.TryGetValue(locationContainer.LengthSource.Name, out tryGetValue)) - { - if (locationContainer.PersonKey is not null && tryGetValue.PersonKey is not null && locationContainer.PersonKey.Value != tryGetValue.PersonKey) - _ = results.Remove(locationContainer.LengthSource.Name); - continue; - } - if (added.Contains(locationContainer.LengthSource.Name)) - continue; - added.Add(locationContainer.LengthSource.Name); - results.Add(locationContainer.LengthSource.Name, locationContainer); - } - return new(results); - } - - public List GetSaveContainers(string cResultsFullGroupDirectory, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, Shared.Models.Methods.IDistanceLimits distanceLimits, ReadOnlyDictionary oneOnly) + public List GetSaveContainers(string cResultsFullGroupDirectory, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, Shared.Models.Methods.IDistanceLimits distanceLimits, ReadOnlyDictionary onlyOne, ReadOnlyDictionary personKeyToPersonContainer) { if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); @@ -878,7 +859,6 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic string? directory; string shortcutFile; string facesDirectory; - List added = []; bool isCounterPersonYear; string facePartsDirectory; FileHolder? faceFileHolder; @@ -890,22 +870,20 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic FileHolder? facePartsFileHolder; FileHolder? hiddenFaceFileHolder; LocationContainer locationContainer; - bool sortingContainersAny = oneOnly.Count > 0; + bool sortingContainersAny = onlyOne.Count > 0; string cContentDirectory = Path.Combine(cResultsFullGroupDirectory, _Configuration.PropertyConfiguration.ResultContent); string forceSingleImageHumanized = nameof(Shared.Models.Stateless.IMapLogic.ForceSingleImage).Humanize(LetterCasing.Title); string d2FacePartsContentDirectory = Path.Combine(d2ResultsFullGroupDirectory, _Configuration.PropertyConfiguration.ResultContent); - foreach (KeyValuePair keyValuePair in oneOnly) + foreach (KeyValuePair keyValuePair in onlyOne) { if (_Configuration.SaveIndividually) break; locationContainer = keyValuePair.Value; if (locationContainer.LengthPermyriad is null || locationContainer.LengthSource is null) continue; - if (added.Contains(keyValuePair.Key)) - continue; segmentB = locationContainer.LengthPermyriad.Value.ToString().PadLeft(2, '0')[..2]; + displayDirectoryName = GetDisplayDirectoryName(locationContainer.DisplayDirectoryName, locationContainer, personKeyToPersonContainer); isCounterPersonYear = locationContainer.PersonKey is not null && IPersonBirthday.IsCounterPersonYear(locationContainer.PersonKey.Value); - displayDirectoryName = isCounterPersonYear ? locationContainer.DisplayDirectoryName : GetDisplayDirectoryName(locationContainer.DisplayDirectoryName, locationContainer); (by, _, isBySorting) = Stateless.MapLogic.Get(useFiltersCounter, _Configuration.SaveIndividually, sortingContainersAny, forceSingleImageHumanized, locationContainer.LengthPermyriad, locationContainer.PersonKey, displayDirectoryName); record = Get(_Configuration, by, locationContainer.PersonKey, displayDirectoryName, segmentB); if (string.IsNullOrEmpty(record.Directory) || string.IsNullOrEmpty(record.PersonDirectory)) @@ -932,7 +910,6 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic resizedFileHolder = IFileHolder.Get(Path.Combine(resizeContentDirectory, $"{locationContainer.LengthSource.FileNameFirstSegment}{Path.GetExtension(locationContainer.LengthSource.NameWithoutExtension)}")); saveContainer = new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, resizedFileHolder, shortcutFile); results.Add(saveContainer); - added.Add(keyValuePair.Key); } return results; }