SaveMappedForOutputResolutions

This commit is contained in:
2023-09-03 17:30:39 -07:00
parent a9d0f67227
commit 600f6e7e2b
15 changed files with 437 additions and 163 deletions

View File

@ -1,4 +1,4 @@
using Humanizer;
using Humanizer;
using ShellProgressBar;
using System.Collections.ObjectModel;
using System.Globalization;
@ -226,7 +226,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
private readonly ReadOnlyDictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> _IdToLocationContainers;
private readonly ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> _IdThenWholePercentagesToPersonContainers;
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, Shared.Models.Methods.IDistance<MetadataExtractor.Directory> distance, ReadOnlyCollection<PersonContainer> personContainers, long ticks, string a2PeopleSingletonDirectory, string eDistanceContentDirectory)
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, Shared.Models.Methods.IDistance<MetadataExtractor.Directory> distance, ReadOnlyCollection<PersonContainer> personContainers, long ticks, string? a2PeopleContentDirectory, string a2PeopleSingletonDirectory, string eDistanceContentDirectory)
{
_Ticks = ticks;
_Configuration = configuration;
@ -240,7 +240,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
Dictionary<int, List<(string, int)>> skipNotSkipCollection = new();
List<LocationContainer<MetadataExtractor.Directory>> locationContainers = new();
string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory);
string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, $"({ticks})");
string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, ticks.ToString());
ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> idThenWholePercentagesToPersonContainers;
if (string.IsNullOrEmpty(rootDirectoryParent))
throw new NullReferenceException(nameof(rootDirectoryParent));
@ -270,13 +270,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
}
List<Stateless.MapLogic.Record> records = Stateless.MapLogic.DeleteEmptyDirectoriesAndGetCollection(configuration, ticks, eDistanceContentDirectory, readOnlyPersonKeyFormattedToNewestPersonKeyFormatted, readOnlyPersonKeyFormattedCollection);
ReadOnlyCollection<(Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages, PersonContainer)> readOnlyPossiblyNewPersonDisplayDirectoryNamesAndPersonContainer;
locationContainers.AddRange(Stateless.MapLogic.GetLocationContainers(distance, maxDegreeOfParallelism, configuration, ticks, personContainers, eDistanceContentDirectory, skipCollection, records));
int lossCount = records.Count - locationContainers.Count;
ReadOnlyCollection<Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection = Stateless.MapLogic.GetPersonKeyFormattedIdThenWholePercentages(configuration, ticks, records);
int unableToMatchCount = records.Count - personKeyFormattedIdThenWholePercentagesCollection.Count;
if (lossCount != 0 || unableToMatchCount != 0)
if (lossCount != 0 || unableToMatchCount != 0)
{ }
//
{
Dictionary<long, int> personKeyToCount = new();
@ -314,6 +308,20 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
ticks,
personContainers,
readOnlyPersonKeyToCount));
locationContainers.AddRange(Stateless.MapLogic.GetLocationContainers(distance,
maxDegreeOfParallelism,
configuration,
ticks,
personContainers,
skipCollection,
records));
int lossCount = records.Count - locationContainers.Count;
int unableToMatchCount = records.Count - personKeyFormattedIdThenWholePercentagesCollection.Count;
if (lossCount != 0 || unableToMatchCount != 0)
if (lossCount != 0 || unableToMatchCount != 0)
{ }
if (!string.IsNullOrEmpty(a2PeopleContentDirectory) && configuration.SaveMappedRelations)
Stateless.MapLogic.SaveMappedRelations(configuration, distance, a2PeopleContentDirectory, eDistanceContentDirectory, ticks, locationContainers, readOnlyPersonKeyFormattedToPersonContainer, readOnlyPersonKeyToPersonContainerCollection);
}
_PersonKeyToCount = readOnlyPersonKeyToCount;
_EDistanceContentTicksDirectory = eDistanceContentTicksDirectory;
@ -548,11 +556,11 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
(ticks, directory) = GetDirectory(_Configuration, saveIndividually, padLeft, mapping.SegmentC, by, mapping.MappingFromItem);
if (ticks is null || string.IsNullOrEmpty(directory))
continue;
personDirectory = Path.Combine(directory, $"X]{ticks}");
personDirectory = Path.Combine(directory, $"X+{ticks}");
if (saveIndividually)
{
directory = Path.Combine(directory, mapping.MappingFromItem.Id.ToString());
results.Add(new(Path.Combine(directory, $"X]{ticks}")));
results.Add(new(Path.Combine(directory, $"X+{ticks}")));
}
distinct.Add(mapping.MappingFromItem.Id);
distinct.Add(mapping.SortingContainer.Sorting.Id);
@ -686,6 +694,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
FaceDistance faceDistanceLength;
List<int>? wholePercentagesCollection;
bool skipNotSkipCollectionAny = _SkipNotSkipCollection.Count > 0;
float distanceTolerance = _Configuration.RangeDistanceTolerance[1];
for (int j = 0; j < faceDistanceLengths.Count; j++)
{
if (faceDistanceEncoding.WholePercentages is null)
@ -705,7 +714,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
throw new NotSupportedException();
if (faceDistanceLength.Length == 0)
continue;
sorting = ISorting.Get(_Configuration.FaceDistancePermyriad, _Configuration.RangeDistanceTolerance, faceDistanceEncoding, faceDistanceLength);
sorting = ISorting.Get(_Configuration.FaceDistancePermyriad, distanceTolerance, faceDistanceEncoding, faceDistanceLength);
if (sorting.DistancePermyriad == 0)
continue;
if (sorting.Id == faceDistanceEncoding.Id)