From 665fb8ec0665c1b982c43a0aeaf218ff6d366b9f Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Mon, 27 May 2024 09:14:59 -0700 Subject: [PATCH] GetOneOnly --- Instance/DlibDotNet.cs | 30 ++++++++++++++++++++---------- Map/Models/MapLogic.cs | 39 ++++++++++++++++++++++++++++++++++----- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index a1302d0..4107f81 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -873,16 +873,26 @@ public partial class DlibDotNet : IDlibDotNet, IDisposable throw new NotSupportedException($"Switch {nameof(_Configuration.SaveSortingWithoutPerson)}!"); List preFiltered = E_Distance.GetPreFilterLocationContainer(_AppSettings.MaxDegreeOfParallelism, _MapConfiguration, _Configuration.FocusDirectory, _Configuration.FocusModel, _Configuration.SkipPersonWithMoreThen, ticks, mapLogic, jLinkResolvedPersonKeys, mapped, available); if (preFiltered.Count == 0) - throw new NotSupportedException("Done?"); - DistanceLimits distanceLimits = new(_Configuration.FaceAreaPermyriad, _Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeDistanceTolerance, _Configuration.RangeFaceAreaPermyriadTolerance, _Configuration.RangeFaceConfidence, _Configuration.SortingMaximumPerFaceShouldBeHigh); - List postFiltered = E_Distance.GetPostFilterLocationContainer(mapLogic, preFiltered, distanceLimits); - if (postFiltered.Count == 0) - throw new NotSupportedException("Done?"); - string message = $") Building Matrix - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)"; - _ProgressBar = new(postFiltered.Count, message, options); - ReadOnlyCollection matrix = E_Distance.GetMatrixLocationContainers(this, _MapConfiguration, ticks, mapLogic, mappedWithEncoding, preFiltered, distanceLimits, postFiltered); - _ProgressBar.Dispose(); - results = mapLogic.GetSaveContainers(cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, distanceLimits, matrix); + results = []; + else + { + DistanceLimits distanceLimits = new(_Configuration.FaceAreaPermyriad, _Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeDistanceTolerance, _Configuration.RangeFaceAreaPermyriadTolerance, _Configuration.RangeFaceConfidence, _Configuration.SortingMaximumPerFaceShouldBeHigh); + List postFiltered = E_Distance.GetPostFilterLocationContainer(mapLogic, preFiltered, distanceLimits); + if (postFiltered.Count == 0) + results = []; + else + { + string message = $") Building Matrix - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)"; + _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) + results = []; + else + results = mapLogic.GetSaveContainers(cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, distanceLimits, oneOnly); + } + } return results; } diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs index 277521e..54331db 100644 --- a/Map/Models/MapLogic.cs +++ b/Map/Models/MapLogic.cs @@ -838,7 +838,34 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic return result; } - public List GetSaveContainers(string cResultsFullGroupDirectory, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, Shared.Models.Methods.IDistanceLimits distanceLimits, ReadOnlyCollection matrix) + 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) { if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); @@ -862,17 +889,19 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic string resizeContentDirectory; FileHolder? facePartsFileHolder; FileHolder? hiddenFaceFileHolder; - bool sortingContainersAny = matrix.Count > 0; + LocationContainer locationContainer; + bool sortingContainersAny = oneOnly.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 (LocationContainer locationContainer in matrix) + foreach (KeyValuePair keyValuePair in oneOnly) { if (_Configuration.SaveIndividually) break; + locationContainer = keyValuePair.Value; if (locationContainer.LengthPermyriad is null || locationContainer.LengthSource is null) continue; - if (added.Contains(locationContainer.LengthSource.Name)) + if (added.Contains(keyValuePair.Key)) continue; segmentB = locationContainer.LengthPermyriad.Value.ToString().PadLeft(2, '0')[..2]; isCounterPersonYear = locationContainer.PersonKey is not null && IPersonBirthday.IsCounterPersonYear(locationContainer.PersonKey.Value); @@ -903,7 +932,7 @@ 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(locationContainer.LengthSource.Name); + added.Add(keyValuePair.Key); } return results; }