Individually First Pass
This commit is contained in:
@ -98,7 +98,6 @@ internal abstract class MapLogic
|
||||
string personKeyFormatted;
|
||||
string ticksDirectoryName;
|
||||
string? personFirstInitial;
|
||||
DirectoryInfo directoryInfo;
|
||||
bool isReservedDirectoryName;
|
||||
string[] personKeyDirectories;
|
||||
string[] personNameDirectories;
|
||||
@ -115,21 +114,11 @@ internal abstract class MapLogic
|
||||
ticksDirectoryName = Path.GetFileName(ticksDirectory);
|
||||
if (ticksDirectoryName.Length < 3 || ticksDirectoryName[zero] != '(' || ticksDirectoryName[^1] != ')')
|
||||
continue;
|
||||
if (!long.TryParse(ticksDirectoryName[1..^1], out long directoryTicks))
|
||||
{
|
||||
if (!long.TryParse(ticksDirectoryName[1..^4], out directoryTicks))
|
||||
continue;
|
||||
}
|
||||
directoryInfo = new(ticksDirectory);
|
||||
if (directoryInfo.CreationTime.Ticks != directoryTicks)
|
||||
Directory.SetCreationTime(ticksDirectory, new DateTime(directoryTicks));
|
||||
if (directoryInfo.LastWriteTime.Ticks != directoryTicks)
|
||||
Directory.SetLastWriteTime(ticksDirectory, new DateTime(directoryTicks));
|
||||
personKeyDirectories = Directory.GetDirectories(ticksDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string personKeyDirectory in personKeyDirectories)
|
||||
{
|
||||
personKeyFormatted = Path.GetFileName(personKeyDirectory);
|
||||
isReservedDirectoryName = personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Sorting)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Mapping)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.ManualCopy));
|
||||
isReservedDirectoryName = personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Sorting)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Mapping)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.ManualCopy)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Individually));
|
||||
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string yearDirectory in yearDirectories)
|
||||
{
|
||||
@ -525,6 +514,40 @@ internal abstract class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
private static string[] UpdateDateVerifyAndGetTicksDirectories(string eDistanceContentDirectory)
|
||||
{
|
||||
const int zero = 0;
|
||||
string ticksDirectoryName;
|
||||
DirectoryInfo directoryInfo;
|
||||
long? lastDirectoryTicks = null;
|
||||
DateTime dateTime = DateTime.Now;
|
||||
List<(string Directory, TimeSpan TimeSpan)> collection = new();
|
||||
string[] results = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string ticksDirectory in results)
|
||||
{
|
||||
ticksDirectoryName = Path.GetFileName(ticksDirectory);
|
||||
if (ticksDirectoryName.Length < 3 || ticksDirectoryName[zero] != '(' || ticksDirectoryName[^1] != ')')
|
||||
continue;
|
||||
if (!long.TryParse(ticksDirectoryName[1..^1], out long directoryTicks))
|
||||
{
|
||||
if (!long.TryParse(ticksDirectoryName[1..^4], out directoryTicks))
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
directoryInfo = new(ticksDirectory);
|
||||
if (directoryInfo.CreationTime.Ticks != directoryTicks)
|
||||
Directory.SetCreationTime(ticksDirectory, new DateTime(directoryTicks));
|
||||
if (directoryInfo.LastWriteTime.Ticks != directoryTicks)
|
||||
Directory.SetLastWriteTime(ticksDirectory, new DateTime(directoryTicks));
|
||||
if (lastDirectoryTicks is not null && new TimeSpan(dateTime.Ticks - directoryTicks).TotalDays > 1)
|
||||
collection.Add((ticksDirectory, new TimeSpan(directoryTicks - lastDirectoryTicks.Value)));
|
||||
lastDirectoryTicks = directoryTicks;
|
||||
}
|
||||
string[] compare = (from l in collection where l.TimeSpan.TotalDays < 4 select l.Directory).ToArray();
|
||||
if (compare.Any())
|
||||
throw new Exception($"Please Consolidate <{string.Join(Environment.NewLine, compare)}>");
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static void Set(Configuration? configuration, long ticks, List<PersonContainer> personContainers, string? a2PeopleSingletonDirectory, string eDistanceContentDirectory, Dictionary<long, PersonContainer> personKeyToPersonContainer, List<PersonContainer> notMappedPersonContainers, Dictionary<int, List<int>> skipCollection, Dictionary<int, List<int>> skipNotSkipCollection, Dictionary<int, Dictionary<int, PersonContainer[]>> idThenNormalizedRectangleToPersonContainers)
|
||||
{
|
||||
if (configuration is null)
|
||||
@ -537,12 +560,12 @@ internal abstract class MapLogic
|
||||
Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted = new();
|
||||
Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer = new();
|
||||
Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection = new();
|
||||
string[] ticksDirectories = UpdateDateVerifyAndGetTicksDirectories(eDistanceContentDirectory);
|
||||
List<(string, string[], int, int)> personKeyFormattedIdThenNormalizedRectangleCollection = new();
|
||||
List<(string[], PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer = new();
|
||||
SetPersonCollections(configuration, personContainers, a2PeopleSingletonDirectory, personKeys, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection, skipCollection, skipNotSkipCollection);
|
||||
personContainers.AddRange(GetNonSpecificPeopleCollection(configuration, ticks, personKeys));
|
||||
totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
||||
string[] ticksDirectories = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
message = $") {ticksDirectories.Length:000} compile from and clean ticks Director(ies) - B - {totalSeconds} total second(s)";
|
||||
List<(string, string[], string)> collection = DeleteEmptyDirectoriesAndGetCollection(configuration, personKeyFormattedCollection, ticksDirectories, message);
|
||||
(int unableToMatchCount, int duplicateCount) = SetCollectionsAndGetUnableToConvertCount(configuration, ticks, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedIdThenNormalizedRectangleCollection, collection);
|
||||
@ -604,6 +627,39 @@ internal abstract class MapLogic
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static string? GetFacePartsContentCollectionFile(string extension, string d2FacePartsContentCollectionDirectory, MappingFromItem mappingFromItem)
|
||||
{
|
||||
string? result;
|
||||
string? directoryName = Path.GetDirectoryName(mappingFromItem.RelativePath);
|
||||
if (directoryName is null)
|
||||
result = null;
|
||||
else
|
||||
result = Path.Combine($"{d2FacePartsContentCollectionDirectory}{directoryName}", $"{mappingFromItem.ImageFileHolder.Name}{extension}");
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static string? GetFacesDirectory(string dFacesContentDirectory, MappingFromItem mappingFromItem)
|
||||
{
|
||||
string? result;
|
||||
string? directoryName = Path.GetDirectoryName(mappingFromItem.RelativePath);
|
||||
if (directoryName is null)
|
||||
result = null;
|
||||
else
|
||||
result = Path.Combine($"{dFacesContentDirectory}{directoryName}", mappingFromItem.ImageFileHolder.NameWithoutExtension);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static string? GetFacePartsDirectory(string d2FacePartsContentDirectory, MappingFromItem mappingFromItem)
|
||||
{
|
||||
string? result;
|
||||
string? directoryName = Path.GetDirectoryName(mappingFromItem.RelativePath);
|
||||
if (directoryName is null)
|
||||
result = null;
|
||||
else
|
||||
result = Path.Combine($"{d2FacePartsContentDirectory}{directoryName}", mappingFromItem.ImageFileHolder.NameWithoutExtension);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static SaveContainer GetDebugSaveContainer(string directory, SortingContainer sortingContainer, Mapping mapping)
|
||||
{
|
||||
SaveContainer result;
|
||||
@ -615,6 +671,54 @@ internal abstract class MapLogic
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static (SaveContainer?, SaveContainer?) GetContainers(string facesFileNameExtension, string facePartsFileNameExtension, string dFacesContentDirectory, string d2FacePartsContentCollectionDirectory, string directory, SortingContainer sortingContainer, Mapping mapping)
|
||||
{
|
||||
SaveContainer? result;
|
||||
SaveContainer? saveContainer;
|
||||
if (sortingContainer.Mapping.MappingFromLocation is null)
|
||||
throw new NullReferenceException(nameof(sortingContainer.Mapping.MappingFromLocation));
|
||||
if (mapping.MappingFromLocation is null)
|
||||
(result, saveContainer) = (null, null);
|
||||
else
|
||||
{
|
||||
string? facePartsContentCollectionFile = GetFacePartsContentCollectionFile(facePartsFileNameExtension, d2FacePartsContentCollectionDirectory, mapping.MappingFromItem);
|
||||
if (facePartsContentCollectionFile is null || !File.Exists(facePartsContentCollectionFile))
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
string checkFile = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}{facePartsFileNameExtension}");
|
||||
result = new(checkFile, directory, new(facePartsContentCollectionFile));
|
||||
}
|
||||
string? facesDirectory = GetFacesDirectory(dFacesContentDirectory, mapping.MappingFromItem);
|
||||
if (facesDirectory is null)
|
||||
saveContainer = null;
|
||||
else
|
||||
{
|
||||
FileHolder faceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}"));
|
||||
if (!faceFileHolder.Exists)
|
||||
saveContainer = null;
|
||||
else
|
||||
{
|
||||
string checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}");
|
||||
saveContainer = new(checkFile, directory, faceFileHolder);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (result, saveContainer);
|
||||
}
|
||||
|
||||
internal static (SaveContainer, SaveContainer) GetContainers(string facesFileNameExtension, string facePartsFileNameExtension, string directory, FileHolder faceFileHolder, string facePartsContentCollectionFile, Mapping mapping)
|
||||
{
|
||||
string checkFile;
|
||||
SaveContainer result;
|
||||
if (mapping.MappingFromLocation is null)
|
||||
throw new NullReferenceException(nameof(mapping.MappingFromLocation));
|
||||
checkFile = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}{facePartsFileNameExtension}");
|
||||
result = new(checkFile, directory, new(facePartsContentCollectionFile));
|
||||
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}");
|
||||
return (result, new(checkFile, directory, faceFileHolder));
|
||||
}
|
||||
|
||||
private static IEnumerable<(string, string)> GetCollection(string[] yearDirectories)
|
||||
{
|
||||
foreach (string l in yearDirectories)
|
||||
|
Reference in New Issue
Block a user