Copy Manual Files

This commit is contained in:
2022-09-19 17:08:17 -07:00
parent 5fb99aac45
commit 179dc1253b
11 changed files with 170 additions and 98 deletions

View File

@ -30,7 +30,7 @@ public class MapLogic
private readonly string _FacesHiddenFilenameExtension;
private readonly string _EDistanceContentTicksDirectory;
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)
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, string resizeFilenameExtension, string facesFilenameExtension, string facesHiddenFilenameExtension, string facePartsFilenameExtension, long ticks, PersonContainer[] personContainers, string eResultsFullGroupDirectory, List<Face> distinctFilteredFaces, Shared.Models.Methods.IFaceDistance? faceDistance)
{
_Ticks = ticks;
_Configuration = configuration;
@ -66,7 +66,12 @@ public class MapLogic
if (!Directory.Exists(eDistanceContentTicksDirectory))
_ = Directory.CreateDirectory(eDistanceContentTicksDirectory);
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);
{
List<PersonContainer> personContainerCollection = new(personContainers);
Stateless.MapLogic.Set(propertyConfiguration, configuration, resizeFilenameExtension, ticks, personContainerCollection, eDistanceContentDirectory, distinctFilteredFaces, faceDistance, personKeyToPersonContainer, personKeyToRanges, notMappedPersonContainers, skipCollection, idThenNormalizedPixelPercentageToPersonContainers);
if (personContainerCollection.Count == personContainers.Length)
throw new NotSupportedException();
}
foreach (string propertyContentCollectionFile in propertyConfiguration.PropertyContentCollectionFiles)
{
fullPath = Path.GetFullPath(string.Concat(rootDirectoryParent, propertyContentCollectionFile));
@ -87,7 +92,7 @@ public class MapLogic
_IdThenNormalizedPixelPercentageToPersonContainers = idThenNormalizedPixelPercentageToPersonContainers;
}
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration 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, PersonContainer[] personContainers, string eResultsFullGroupDirectory) :
this(maxDegreeOfParallelism, propertyConfiguration, configuration, outputExtension, outputExtension, outputExtension, outputExtension, ticks, personContainers, eResultsFullGroupDirectory, new(), null)
{ }
@ -102,11 +107,11 @@ public class MapLogic
List<(long, long, long, long)> results = new();
foreach (PersonContainer personContainer in personContainers)
{
if (personContainer.PersonKey is null)
if (personContainer.Key is null)
continue;
if (!_PersonKeyToRanges.ContainsKey(personContainer.PersonKey.Value))
if (!_PersonKeyToRanges.ContainsKey(personContainer.Key.Value))
continue;
results.Add(_PersonKeyToRanges[personContainer.PersonKey.Value]);
results.Add(_PersonKeyToRanges[personContainer.Key.Value]);
}
return results;
}
@ -193,7 +198,7 @@ public class MapLogic
if (personKey is not null && _PersonKeyToPersonContainer.ContainsKey(personKey.Value))
{
personContainer = _PersonKeyToPersonContainer[personKey.Value];
fullName = string.Concat(personContainer.PersonDisplayDirectoryName, ".txt");
fullName = string.Concat(personContainer.DisplayDirectoryName, ".txt");
File.WriteAllText(Path.Combine(directory, fullName), string.Empty);
}
}
@ -275,11 +280,11 @@ public class MapLogic
}
foreach (PersonContainer personContainer in personContainers)
{
if (personContainer.PersonKey is null || personContainer.PersonBirthdays is null || !personContainer.PersonBirthdays.Any())
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
continue;
personBirthday = personContainer.PersonBirthdays[zero];
personBirthday = personContainer.Birthdays[zero];
mappingSegmentB = GetMappingSegmentB(_Ticks, personBirthday, personContainer.ApproximateYears, face.Mapping.MappingFromItem);
face.Mapping.UpdateMappingFromPerson(personContainer.ApproximateYears, by, personContainer.PersonDisplayDirectoryName, personBirthday, mappingSegmentB);
face.Mapping.UpdateMappingFromPerson(personContainer.ApproximateYears, by, personContainer.DisplayDirectoryName, personBirthday, mappingSegmentB);
}
}
return result;
@ -341,7 +346,7 @@ public class MapLogic
}
}
public void SaveNotMappedTicks(Configuration configuration)
public void SaveNotMappedTicks()
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
@ -354,11 +359,11 @@ public class MapLogic
const string facePopulatedKey = nameof(_Sorting);
foreach (PersonContainer personContainer in _NotMappedPersonContainers)
{
if (personContainer.PersonKey is null || personContainer.PersonBirthdays is null || !personContainer.PersonBirthdays.Any())
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
continue;
personBirthday = personContainer.PersonBirthdays[zero];
personBirthday = personContainer.Birthdays[zero];
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
directory = Path.Combine(_EDistanceContentTicksDirectory, $"{facePopulatedKey}NotMapped", personKeyFormatted, configuration.MappingDefaultName);
directory = Path.Combine(_EDistanceContentTicksDirectory, $"{facePopulatedKey}NotMapped", personKeyFormatted, _Configuration.MappingDefaultName);
saveContainer = new(directory);
saveContainers.Add(saveContainer);
}
@ -414,10 +419,10 @@ public class MapLogic
{
if (personContainers.Length != 1)
break;
if (personContainer.PersonKey is null || personContainer.PersonBirthdays is null || !personContainer.PersonBirthdays.Any())
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
continue;
personKey = personContainer.PersonKey.Value;
personBirthday = personContainer.PersonBirthdays[zero];
personKey = personContainer.Key.Value;
personBirthday = personContainer.Birthdays[zero];
timeSpan = IPersonBirthday.GetTimeSpan(face.Mapping.MappingFromItem.MinimumDateTime, face.Mapping.MappingFromItem.IsWrongYear, personBirthday);
if (timeSpan.HasValue)
{
@ -490,9 +495,9 @@ public class MapLogic
continue;
foreach (PersonContainer personContainer in personContainers)
{
if (personContainer.PersonKey is null || personContainer.PersonBirthdays is null || !personContainer.PersonBirthdays.Any())
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
continue;
personBirthday = personContainer.PersonBirthdays[zero];
personBirthday = personContainer.Birthdays[zero];
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
mappingSegmentB = GetMappingSegmentB(_Ticks, personBirthday, personContainer.ApproximateYears, sortingContainer.Face.Mapping.MappingFromItem);
key = string.Concat(personKeyFormatted, '\t', mappingSegmentB);
@ -502,7 +507,7 @@ public class MapLogic
if (checkCollection.Count > _Configuration.SortingMaximumPerKey)
continue;
_ = hashSet.Add(sortingContainer.Sorting.NormalizedPixelPercentage);
sortingContainer.Face.Mapping.UpdateMappingFromPerson(personContainer.ApproximateYears, by, personContainer.PersonDisplayDirectoryName, personBirthday, mappingSegmentB);
sortingContainer.Face.Mapping.UpdateMappingFromPerson(personContainer.ApproximateYears, by, personContainer.DisplayDirectoryName, personBirthday, mappingSegmentB);
checkCollection.Add(sortingContainer.Face.Mapping);
result += 1;
break;
@ -511,14 +516,16 @@ public class MapLogic
return result;
}
internal void ForceSingleImage(Configuration configuration, IEnumerable<Face> distinctFilteredFaces)
internal void ForceSingleImage(IEnumerable<Face> distinctFilteredFaces)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
const int zero = 0;
string mappingSegmentB;
int by = _ForceSingleImage;
PersonBirthday personBirthday;
List<int> normalizedPixelPercentages;
string displayDirectoryName = configuration.MappingDefaultName;
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)
{
@ -534,11 +541,11 @@ public class MapLogic
}
foreach (PersonContainer personContainer in _NotMappedPersonContainers)
{
if (personContainer.PersonKey is null || personContainer.PersonBirthdays is null || !personContainer.PersonBirthdays.Any())
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
continue;
personBirthday = personContainer.PersonBirthdays[zero];
personBirthday = personContainer.Birthdays[zero];
mappingSegmentB = GetMappingSegmentB(_Ticks, personBirthday, personContainer.ApproximateYears, face.Mapping.MappingFromItem);
face.Mapping.UpdateMappingFromPerson(personContainer.ApproximateYears, by, personContainer.PersonDisplayDirectoryName, personBirthday, mappingSegmentB);
face.Mapping.UpdateMappingFromPerson(personContainer.ApproximateYears, by, personContainer.DisplayDirectoryName, personBirthday, mappingSegmentB);
break;
}
break;
@ -627,22 +634,71 @@ public class MapLogic
return results;
}
public void ForceSingleImageThenSaveMapping(Configuration configuration, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, List<Face> distinctFilteredFaces, SortingContainer[] sortingContainers, int totalNotMapped)
public void ForceSingleImageThenSaveMapping(string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, List<Face> distinctFilteredFaces, SortingContainer[] sortingContainers, int totalNotMapped)
{
List<SaveContainer> saveContainers;
if (!sortingContainers.Any())
{
ForceSingleImage(configuration, distinctFilteredFaces);
ForceSingleImage(distinctFilteredFaces);
saveContainers = GetMappingSaveContainers(dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, distinctFilteredFaces);
}
else
{
int updated = UpdateFromSortingContainers(sortingContainers);
if (totalNotMapped - updated > 0)
ForceSingleImage(configuration, distinctFilteredFaces);
ForceSingleImage(distinctFilteredFaces);
saveContainers = GetMappingSaveContainers(dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, distinctFilteredFaces);
}
SaveContainers(saveContainers);
}
public void CopyManualFiles(string resizeFilenameExtension)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
int? id;
string checkFile;
string directory;
FileInfo fileInfo;
const int zero = 0;
string mappingSegmentB;
string personDirectory;
string personKeyFormatted;
string by = nameof(_Sorting);
PersonBirthday personBirthday;
int? normalizedPixelPercentage;
Dictionary<int, PersonContainer[]> keyValuePairs;
foreach (KeyValuePair<long, PersonContainer> keyValuePair in _PersonKeyToPersonContainer)
{
if (keyValuePair.Value.Key is null || keyValuePair.Value.Birthdays is null || !keyValuePair.Value.Birthdays.Any())
continue;
personBirthday = keyValuePair.Value.Birthdays[zero];
foreach (string personDisplayDirectoryAllFile in keyValuePair.Value.DisplayDirectoryAllFiles)
{
fileInfo = new(personDisplayDirectoryAllFile);
if (!fileInfo.Exists || !personDisplayDirectoryAllFile.EndsWith(resizeFilenameExtension))
continue;
(id, normalizedPixelPercentage, _) = IMapping.GetReversedDeterministicHashCodeKey(_Configuration.LocationDigits, personDisplayDirectoryAllFile);
if (id is null || normalizedPixelPercentage is null)
continue;
if (_IdThenNormalizedPixelPercentageToPersonContainers.ContainsKey(id.Value))
{
keyValuePairs = _IdThenNormalizedPixelPercentageToPersonContainers[id.Value];
if (keyValuePairs.ContainsKey(normalizedPixelPercentage.Value))
continue;
}
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
mappingSegmentB = GetMappingSegmentB(_Ticks, personBirthday, keyValuePair.Value.ApproximateYears, fileInfo.CreationTime, isWrongYear: null);
directory = Path.Combine(_EDistanceContentTicksDirectory, by[1..], personKeyFormatted, mappingSegmentB);
personDirectory = Path.Combine(directory, keyValuePair.Value.DisplayDirectoryName, "lnk");
if (!Directory.Exists(personDirectory))
_ = Directory.CreateDirectory(personDirectory);
checkFile = Path.Combine(directory, fileInfo.Name);
if (File.Exists(checkFile))
continue;
File.Copy(personDisplayDirectoryAllFile, checkFile);
}
}
}
}