Save Possibly New Person Containers
This commit is contained in:
@ -9,8 +9,8 @@ namespace View_by_Distance.Map.Models;
|
||||
public class MapLogic
|
||||
{
|
||||
|
||||
protected readonly List<long> _NotMappedPersonKeys;
|
||||
protected readonly Dictionary<int, List<int>> _SkipCollection;
|
||||
protected readonly List<PersonContainer> _NotMappedPersonContainers;
|
||||
protected readonly Dictionary<long, PersonContainer> _PersonKeyToPersonContainer;
|
||||
protected readonly Dictionary<long, (long LCL, long Minimum, long Maximum, long UCL)> _PersonKeyToRanges;
|
||||
protected readonly Dictionary<int, Dictionary<int, PersonContainer[]>> _IdThenNormalizedPixelPercentageToPersonContainers;
|
||||
@ -30,7 +30,7 @@ public class MapLogic
|
||||
private readonly string _FacesHiddenFilenameExtension;
|
||||
private readonly string _EDistanceContentTicksDirectory;
|
||||
|
||||
public MapLogic(int maxDegreeOfParallelism, Property.Models.Configuration propertyConfiguration, Configuration? configuration, string resizeFilenameExtension, string facesFilenameExtension, string facesHiddenFilenameExtension, string facePartsFilenameExtension, long ticks, List<PersonContainer> personContainers, string eResultsFullGroupDirectory, List<Face> distinctFilteredFaces, Shared.Models.Methods.IFaceDistance? distance)
|
||||
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, string resizeFilenameExtension, string facesFilenameExtension, string facesHiddenFilenameExtension, string facePartsFilenameExtension, long ticks, List<PersonContainer> personContainers, string eResultsFullGroupDirectory, List<Face> distinctFilteredFaces, Shared.Models.Methods.IFaceDistance? faceDistance)
|
||||
{
|
||||
_Ticks = ticks;
|
||||
_Configuration = configuration;
|
||||
@ -47,9 +47,9 @@ public class MapLogic
|
||||
{ }
|
||||
string json;
|
||||
string fullPath;
|
||||
List<long> notMappedPersonKeys = new();
|
||||
List<KeyValuePair<int, int[]>>? collection;
|
||||
Dictionary<int, List<int>> skipCollection = new();
|
||||
List<PersonContainer> notMappedPersonContainers = new();
|
||||
Dictionary<long, PersonContainer> personKeyToPersonContainer = new();
|
||||
string eDistanceContentDirectory = Path.Combine(eResultsFullGroupDirectory, "()");
|
||||
string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory);
|
||||
@ -65,8 +65,8 @@ public class MapLogic
|
||||
_ = Directory.CreateDirectory(eDistanceContentDirectory);
|
||||
if (!Directory.Exists(eDistanceContentTicksDirectory))
|
||||
_ = Directory.CreateDirectory(eDistanceContentTicksDirectory);
|
||||
if (configuration is not null)
|
||||
Stateless.MapLogic.Set(propertyConfiguration, configuration, resizeFilenameExtension, ticks, personContainers, eDistanceContentDirectory, distinctFilteredFaces, distance, personKeyToPersonContainer, personKeyToRanges, notMappedPersonKeys, skipCollection, idThenNormalizedPixelPercentageToPersonContainers);
|
||||
if (configuration is not null && faceDistance is not null)
|
||||
Stateless.MapLogic.Set(propertyConfiguration, configuration, resizeFilenameExtension, ticks, personContainers, eDistanceContentDirectory, distinctFilteredFaces, faceDistance, personKeyToPersonContainer, personKeyToRanges, notMappedPersonContainers, skipCollection, idThenNormalizedPixelPercentageToPersonContainers);
|
||||
foreach (string propertyContentCollectionFile in propertyConfiguration.PropertyContentCollectionFiles)
|
||||
{
|
||||
fullPath = Path.GetFullPath(string.Concat(rootDirectoryParent, propertyContentCollectionFile));
|
||||
@ -81,13 +81,13 @@ public class MapLogic
|
||||
}
|
||||
_SkipCollection = skipCollection;
|
||||
_PersonKeyToRanges = personKeyToRanges;
|
||||
_NotMappedPersonKeys = notMappedPersonKeys;
|
||||
_NotMappedPersonContainers = notMappedPersonContainers;
|
||||
_PersonKeyToPersonContainer = personKeyToPersonContainer;
|
||||
_EDistanceContentTicksDirectory = eDistanceContentTicksDirectory;
|
||||
_IdThenNormalizedPixelPercentageToPersonContainers = idThenNormalizedPixelPercentageToPersonContainers;
|
||||
}
|
||||
|
||||
public MapLogic(int maxDegreeOfParallelism, Property.Models.Configuration propertyConfiguration, Configuration? configuration, string outputExtension, long ticks, List<PersonContainer> personContainers, string eResultsFullGroupDirectory) :
|
||||
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, string outputExtension, long ticks, List<PersonContainer> personContainers, string eResultsFullGroupDirectory) :
|
||||
this(maxDegreeOfParallelism, propertyConfiguration, configuration, outputExtension, outputExtension, outputExtension, outputExtension, ticks, personContainers, eResultsFullGroupDirectory, new(), null)
|
||||
{ }
|
||||
|
||||
@ -255,7 +255,6 @@ public class MapLogic
|
||||
int by = _Mapping;
|
||||
const int zero = 0;
|
||||
string mappingSegmentB;
|
||||
string personKeyFormatted;
|
||||
PersonBirthday personBirthday;
|
||||
List<PersonContainer> personContainers = new();
|
||||
Dictionary<int, PersonContainer[]> keyValuePairs;
|
||||
@ -279,7 +278,6 @@ public class MapLogic
|
||||
if (personContainer.PersonKey is null || personContainer.PersonBirthdays is null || !personContainer.PersonBirthdays.Any())
|
||||
continue;
|
||||
personBirthday = personContainer.PersonBirthdays[zero];
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
|
||||
mappingSegmentB = GetMappingSegmentB(_Ticks, personBirthday, personContainer.ApproximateYears, face.Mapping.MappingFromItem);
|
||||
face.Mapping.UpdateMappingFromPerson(personContainer.ApproximateYears, by, personContainer.PersonDisplayDirectoryName, personBirthday, mappingSegmentB);
|
||||
}
|
||||
@ -343,21 +341,24 @@ public class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveNotMappedTicks(Property.Models.Configuration propertyConfiguration)
|
||||
public void SaveNotMappedTicks(Configuration configuration)
|
||||
{
|
||||
if (_Configuration is null)
|
||||
throw new NullReferenceException(nameof(_Configuration));
|
||||
string directory;
|
||||
const int zero = 0;
|
||||
string personKeyFormatted;
|
||||
SaveContainer saveContainer;
|
||||
PersonBirthday personBirthday;
|
||||
List<SaveContainer> saveContainers = new();
|
||||
const string facePopulatedKey = nameof(_Sorting);
|
||||
foreach (long personKey in _NotMappedPersonKeys)
|
||||
foreach (PersonContainer personContainer in _NotMappedPersonContainers)
|
||||
{
|
||||
personBirthday = IPersonBirthday.GetPersonBirthday(personKey);
|
||||
if (personContainer.PersonKey is null || personContainer.PersonBirthdays is null || !personContainer.PersonBirthdays.Any())
|
||||
continue;
|
||||
personBirthday = personContainer.PersonBirthdays[zero];
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
|
||||
directory = Path.Combine(_EDistanceContentTicksDirectory, $"{facePopulatedKey}NotMapped", personKeyFormatted, propertyConfiguration.ResultAllInOne);
|
||||
directory = Path.Combine(_EDistanceContentTicksDirectory, $"{facePopulatedKey}NotMapped", personKeyFormatted, configuration.MappingDefaultName);
|
||||
saveContainer = new(directory);
|
||||
saveContainers.Add(saveContainer);
|
||||
}
|
||||
@ -403,7 +404,7 @@ public class MapLogic
|
||||
{
|
||||
keyValuePairs = _IdThenNormalizedPixelPercentageToPersonContainers[face.Mapping.MappingFromItem.Id];
|
||||
if (!keyValuePairs.ContainsKey(face.Mapping.MappingFromLocation.NormalizedPixelPercentage))
|
||||
throw new NotSupportedException();
|
||||
continue;
|
||||
personKey = null;
|
||||
isWrongYearFlag = IItem.GetWrongYearFlag(face.Mapping.MappingFromItem.IsWrongYear);
|
||||
subDirectoryName = $"{isWrongYearFlag}{face.Mapping.MappingFromItem.MinimumDateTime:yyyy}";
|
||||
@ -510,16 +511,14 @@ public class MapLogic
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void ForceSingleImage(Property.Models.Configuration propertyConfiguration, IEnumerable<Face> distinctFilteredFaces)
|
||||
internal void ForceSingleImage(Configuration configuration, IEnumerable<Face> distinctFilteredFaces)
|
||||
{
|
||||
long? personKey;
|
||||
const int zero = 0;
|
||||
string mappingSegmentB;
|
||||
int by = _ForceSingleImage;
|
||||
int? approximateYears = null;
|
||||
PersonBirthday personBirthday;
|
||||
List<int> normalizedPixelPercentages;
|
||||
string displayDirectoryName = propertyConfiguration.ResultAllInOne;
|
||||
string displayDirectoryName = configuration.MappingDefaultName;
|
||||
Face[] orderedDistinctFilteredFaces = (from l in distinctFilteredFaces orderby l.Mapping is not null, l.Mapping?.MappingFromLocation.Confidence descending select l).ToArray();
|
||||
foreach (Face face in orderedDistinctFilteredFaces)
|
||||
{
|
||||
@ -533,10 +532,15 @@ public class MapLogic
|
||||
if (normalizedPixelPercentages.Contains(face.Mapping.MappingFromLocation.NormalizedPixelPercentage))
|
||||
continue;
|
||||
}
|
||||
personKey = _NotMappedPersonKeys[zero];
|
||||
personBirthday = IPersonBirthday.GetPersonBirthday(personKey.Value);
|
||||
mappingSegmentB = GetMappingSegmentB(_Ticks, personBirthday, approximateYears, face.Mapping.MappingFromItem);
|
||||
face.Mapping.UpdateMappingFromPerson(approximateYears, by, displayDirectoryName, personBirthday, mappingSegmentB);
|
||||
foreach (PersonContainer personContainer in _NotMappedPersonContainers)
|
||||
{
|
||||
if (personContainer.PersonKey is null || personContainer.PersonBirthdays is null || !personContainer.PersonBirthdays.Any())
|
||||
continue;
|
||||
personBirthday = personContainer.PersonBirthdays[zero];
|
||||
mappingSegmentB = GetMappingSegmentB(_Ticks, personBirthday, personContainer.ApproximateYears, face.Mapping.MappingFromItem);
|
||||
face.Mapping.UpdateMappingFromPerson(personContainer.ApproximateYears, by, personContainer.PersonDisplayDirectoryName, personBirthday, mappingSegmentB);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -611,11 +615,11 @@ public class MapLogic
|
||||
shortcutFile = Path.Combine(personDirectory, $"{face.Mapping.MappingFromLocation.DeterministicHashCodeKey}{face.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.lnk");
|
||||
saveContainer = new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, string.Empty, facePartsFileHolder, face.Mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
|
||||
results.Add(saveContainer);
|
||||
if (!string.IsNullOrEmpty(checkFile) && _Configuration.MappingSaveFaceEncoding)
|
||||
if (_Configuration.MappingSaveFaceEncoding)
|
||||
{
|
||||
checkFile = Path.Combine(directory, $"{face.Mapping.MappingFromLocation.DeterministicHashCodeKey}{face.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.json");
|
||||
checkFile = Path.Combine(personDirectory, $"{face.Mapping.MappingFromLocation.DeterministicHashCodeKey}{face.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.json");
|
||||
json = JsonSerializer.Serialize(face.FaceEncoding);
|
||||
saveContainer = new(checkFile, directory, json);
|
||||
saveContainer = new(checkFile, personDirectory, json);
|
||||
results.Add(saveContainer);
|
||||
}
|
||||
results.Add(saveContainer);
|
||||
@ -623,19 +627,19 @@ public class MapLogic
|
||||
return results;
|
||||
}
|
||||
|
||||
public void ForceSingleImageThenSaveMapping(int maxDegreeOfParallelism, Property.Models.Configuration propertyConfiguration, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, List<Face> distinctFilteredFaces, SortingContainer[] sortingContainers, int totalNotMapped)
|
||||
public void ForceSingleImageThenSaveMapping(Configuration configuration, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, List<Face> distinctFilteredFaces, SortingContainer[] sortingContainers, int totalNotMapped)
|
||||
{
|
||||
List<SaveContainer> saveContainers;
|
||||
if (!sortingContainers.Any())
|
||||
{
|
||||
ForceSingleImage(propertyConfiguration, distinctFilteredFaces);
|
||||
ForceSingleImage(configuration, distinctFilteredFaces);
|
||||
saveContainers = GetMappingSaveContainers(dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, distinctFilteredFaces);
|
||||
}
|
||||
else
|
||||
{
|
||||
int updated = UpdateFromSortingContainers(sortingContainers);
|
||||
if (totalNotMapped - updated > 0)
|
||||
ForceSingleImage(propertyConfiguration, distinctFilteredFaces);
|
||||
ForceSingleImage(configuration, distinctFilteredFaces);
|
||||
saveContainers = GetMappingSaveContainers(dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, distinctFilteredFaces);
|
||||
}
|
||||
SaveContainers(saveContainers);
|
||||
|
Reference in New Issue
Block a user