More Individually and bug fix
This commit is contained in:
@ -28,7 +28,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
private readonly string _EDistanceContentTicksDirectory;
|
||||
private readonly Shared.Models.Properties.IPropertyConfiguration _PropertyConfiguration;
|
||||
|
||||
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, bool saveIndividually, Configuration? configuration, PersonContainer[] personContainers, long ticks, string a2PeopleSingletonDirectory, string eDistanceContentDirectory)
|
||||
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, PersonContainer[] personContainers, long ticks, string a2PeopleSingletonDirectory, string eDistanceContentDirectory)
|
||||
{
|
||||
_Ticks = ticks;
|
||||
_Configuration = configuration;
|
||||
@ -51,12 +51,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory);
|
||||
string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, $"({ticks})");
|
||||
Dictionary<int, Dictionary<int, PersonContainer[]>> idThenNormalizedRectangleToPersonContainers = new();
|
||||
if (!saveIndividually)
|
||||
{
|
||||
for (int i = 1; i < 5; i++)
|
||||
_ = IPath.DeleteEmptyDirectories(eDistanceContentDirectory);
|
||||
_ = IPath.DeleteEmptyDirectories(eDistanceContentDirectory);
|
||||
}
|
||||
if (string.IsNullOrEmpty(rootDirectoryParent))
|
||||
throw new NullReferenceException(nameof(rootDirectoryParent));
|
||||
if (!Directory.Exists(eDistanceContentDirectory))
|
||||
@ -200,12 +194,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
return result;
|
||||
}
|
||||
|
||||
public void SaveContainers(int totalNotMapped, int? updated, List<SaveContainer> saveContainers)
|
||||
public void SaveContainers(bool saveIndividually, int totalNotMapped, int? updated, List<SaveContainer> saveContainers)
|
||||
{
|
||||
if (_Configuration is null)
|
||||
throw new NullReferenceException(nameof(_Configuration));
|
||||
string checkFile;
|
||||
string sourceFile;
|
||||
List<string> distinct = new();
|
||||
WindowsShortcut windowsShortcut;
|
||||
string[] directories = (from l in saveContainers select l.Directory).Distinct().ToArray();
|
||||
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - _Ticks).TotalSeconds);
|
||||
@ -245,6 +240,12 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
}
|
||||
else
|
||||
continue;
|
||||
if (saveIndividually)
|
||||
{
|
||||
if (distinct.Contains(checkFile))
|
||||
continue;
|
||||
distinct.Add(checkFile);
|
||||
}
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Copy(sourceFile, checkFile);
|
||||
@ -414,7 +415,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
{
|
||||
if (sortingContainersAny)
|
||||
continue;
|
||||
mapping.UpdateMappingFromUnknownPerson(new(mapping, new(mapping, mapping.MappingFromLocation)));
|
||||
mapping.UpdateMappingFromUnknownPerson(saveIndividually, new(mapping, new(mapping, mapping.MappingFromLocation)));
|
||||
if (mapping.SortingContainer is null)
|
||||
continue;
|
||||
}
|
||||
@ -519,7 +520,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
results.Add(saveContainer);
|
||||
}
|
||||
if (!saveIndividually)
|
||||
saveContainer = Stateless.MapLogic.GetDebugSaveContainer(directory, mapping.SortingContainer, keyMapping);
|
||||
saveContainer = Stateless.MapLogic.GetDebugSaveContainer(directory, mapping.MappingFromPerson, mapping.SortingContainer, keyMapping);
|
||||
else
|
||||
{
|
||||
(saveContainer, SaveContainer? extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, dFacesContentDirectory, d2FacePartsContentCollectionDirectory, directory, mapping.SortingContainer, keyMapping);
|
||||
@ -550,9 +551,10 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
int? updated = null;
|
||||
bool saveMapped = true;
|
||||
int? useFiltersCounter = null;
|
||||
bool saveIndividually = false;
|
||||
string mappingDirectory = Path.Combine(_EDistanceContentTicksDirectory, nameof(Shared.Models.Stateless.IMapLogic.Mapping));
|
||||
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, d2FacePartsContentCollectionDirectory, mappingCollection, idToNormalizedRectangleToMapping, personKeyToIds, useFiltersCounter, saveMapped, sortingContainersAny: true, saveIndividually: false);
|
||||
SaveContainers(totalNotMapped, updated, saveContainers);
|
||||
SaveContainers(saveIndividually, totalNotMapped, updated, saveContainers);
|
||||
if (!string.IsNullOrEmpty(_EDistanceContentTicksDirectory) && Directory.Exists(mappingDirectory))
|
||||
Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory);
|
||||
}
|
||||
@ -662,7 +664,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
continue;
|
||||
if (normalizedRectangleCollectionForA.Contains(sortingContainer.Mapping.MappingFromLocation.NormalizedRectangle))
|
||||
continue;
|
||||
sortingContainer.Mapping.UpdateMappingFromUnknownPerson(sortingContainer);
|
||||
sortingContainer.Mapping.UpdateMappingFromUnknownPerson(saveIndividually, sortingContainer);
|
||||
normalizedRectangleCollectionForA.Add(sortingContainer.Mapping.MappingFromLocation.NormalizedRectangle);
|
||||
result += 1;
|
||||
}
|
||||
@ -1017,6 +1019,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
if (_Configuration is null)
|
||||
throw new NullReferenceException(nameof(_Configuration));
|
||||
SaveContainer? saveContainer;
|
||||
bool saveIndividually = false;
|
||||
List<SaveContainer> saveContainers = new();
|
||||
Stateless.MapLogic.BeforeSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory);
|
||||
(int, FileHolder, int, string, string, string, string)[] collection = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory, personContainers, mappingCollection, personKeyToIds);
|
||||
@ -1027,7 +1030,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
saveContainer = new(imageFileHolder, checkFile, directory);
|
||||
saveContainers.Add(saveContainer);
|
||||
}
|
||||
SaveContainers(totalNotMapped, null, saveContainers);
|
||||
SaveContainers(saveIndividually, totalNotMapped, null, saveContainers);
|
||||
}
|
||||
|
||||
private List<SaveShortcutsForOutputResolutions> GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, Dictionary<long, List<int>> personKeyToIds, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers, Mapping[] mappingCollection)
|
||||
|
@ -87,7 +87,7 @@ internal abstract class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
private static void MoveTo(string actionDirectory, string ticksDirectory, string directory, string personKeyFormatted, string yearDirectoryName, string alphaDirectoryName, string[] files, string[] matchFaceFile)
|
||||
private static void MoveTo(string actionDirectory, string ticksDirectory, string directory, string personKeyFormatted, string yearDirectoryName, string alphaDirectoryName, string[] files, string[] facesFileNames)
|
||||
{
|
||||
string checkFile;
|
||||
string actionDirectoryName = Path.GetFileName(actionDirectory);
|
||||
@ -96,7 +96,7 @@ internal abstract class MapLogic
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (matchFaceFile.Contains(file))
|
||||
if (facesFileNames.Contains(file))
|
||||
{
|
||||
checkFile = Path.Combine(checkDirectory, Path.GetFileName(file));
|
||||
if (File.Exists(checkFile))
|
||||
@ -112,7 +112,7 @@ internal abstract class MapLogic
|
||||
{
|
||||
string[] files;
|
||||
FileInfo[] collection;
|
||||
string[] matchFaceFile;
|
||||
string[] facesFileNames;
|
||||
string yearDirectoryName;
|
||||
string[] yearDirectories;
|
||||
string alphaDirectoryName;
|
||||
@ -132,12 +132,20 @@ internal abstract class MapLogic
|
||||
personKeyFormatted = Path.GetFileName(personKeyDirectory);
|
||||
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string yearDirectory in yearDirectories)
|
||||
{
|
||||
yearDirectoryName = Path.GetFileName(yearDirectory);
|
||||
if (yearDirectoryName.StartsWith('='))
|
||||
Directory.Move(yearDirectory, yearDirectory.Replace('=', '~'));
|
||||
}
|
||||
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string yearDirectory in yearDirectories)
|
||||
{
|
||||
yearDirectoryName = Path.GetFileName(yearDirectory);
|
||||
matchDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
alphaDirectories = matchDirectories.Where(l => !long.TryParse(Path.GetFileName(l), out long a)).ToArray();
|
||||
if (!alphaDirectories.Any())
|
||||
continue;
|
||||
alphaDirectoryName = Path.GetFileName(alphaDirectories[0]);
|
||||
foreach (string matchDirectory in matchDirectories)
|
||||
{
|
||||
matchDirectoryName = Path.GetFileName(matchDirectory);
|
||||
@ -145,15 +153,15 @@ internal abstract class MapLogic
|
||||
if (files.Length != 4)
|
||||
continue;
|
||||
collection = files.Select(l => new FileInfo(l)).ToArray();
|
||||
matchFaceFile = (from l in collection where l.Extension == configuration.FacesFileNameExtension && l.Name.Contains(matchDirectoryName) select l.FullName).ToArray();
|
||||
if (!matchFaceFile.Any())
|
||||
if (IPerson.IsDefaultName(configuration.MappingDefaultName, alphaDirectoryName))
|
||||
facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension select l.FullName).ToArray();
|
||||
else
|
||||
facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension && l.Name.Contains(matchDirectoryName) select l.FullName).ToArray();
|
||||
if (!facesFileNames.Any())
|
||||
continue;
|
||||
alphaDirectoryName = Path.GetFileName(alphaDirectories[0]);
|
||||
personDisplayDirectory = Path.Combine(matchDirectory, alphaDirectoryName);
|
||||
if (!Directory.Exists(personDisplayDirectory) || !Directory.Exists(matchDirectory))
|
||||
continue;
|
||||
if (matchDirectory.Contains('='))
|
||||
continue;
|
||||
_ = System.Diagnostics.Process.Start("explorer", matchDirectory);
|
||||
for (int i = 0; i < int.MaxValue; i++)
|
||||
{
|
||||
@ -161,7 +169,7 @@ internal abstract class MapLogic
|
||||
actionDirectories = Directory.GetDirectories(matchDirectory, "*", SearchOption.TopDirectoryOnly).Where(l => l != personDisplayDirectory && !l.EndsWith("Maybe")).ToArray();
|
||||
if (actionDirectories.Any())
|
||||
{
|
||||
MoveTo(actionDirectories[0], ticksDirectory, directory, personKeyFormatted, yearDirectoryName, alphaDirectoryName, files, matchFaceFile);
|
||||
MoveTo(actionDirectories[0], ticksDirectory, directory, personKeyFormatted, yearDirectoryName, alphaDirectoryName, files, facesFileNames);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -202,12 +210,12 @@ internal abstract class MapLogic
|
||||
foreach (string personKeyDirectory in personKeyDirectories)
|
||||
{
|
||||
personKeyFormatted = Path.GetFileName(personKeyDirectory);
|
||||
if (personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Individually)))
|
||||
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));
|
||||
if (!isReservedDirectoryName && personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Individually)))
|
||||
{
|
||||
Individually(configuration, ticksDirectory, personKeyDirectory);
|
||||
break;
|
||||
throw new Exception($"B) Move personKey directories up one from {nameof(Shared.Models.Stateless.IMapLogic.Sorting)} and delete {nameof(Shared.Models.Stateless.IMapLogic.Sorting)} directory!");
|
||||
}
|
||||
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));
|
||||
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string yearDirectory in yearDirectories)
|
||||
{
|
||||
@ -455,11 +463,16 @@ internal abstract class MapLogic
|
||||
progressBar.Tick();
|
||||
if (!personKeyFormattedToNewestPersonKeyFormatted.TryGetValue(personKeyFormatted, out newestPersonKeyFormatted))
|
||||
{
|
||||
checkFile = $"{mappedFaceFile}.abd";
|
||||
if (File.Exists(checkFile))
|
||||
if (!personDisplayDirectoryNames.Any() || IPerson.IsDefaultName(configuration.MappingDefaultName, personDisplayDirectoryNames[^1]))
|
||||
newestPersonKeyFormatted = personKeyFormatted;
|
||||
else
|
||||
{
|
||||
checkFile = $"{mappedFaceFile}.abd";
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(mappedFaceFile, checkFile);
|
||||
continue;
|
||||
File.Move(mappedFaceFile, checkFile);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
(id, normalizedRectangle) = IMapping.GetConverted(configuration.FacesFileNameExtension, mappedFaceFile);
|
||||
if (id is null || normalizedRectangle is null)
|
||||
@ -749,13 +762,17 @@ internal abstract class MapLogic
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static SaveContainer GetDebugSaveContainer(string directory, SortingContainer sortingContainer, Mapping mapping)
|
||||
internal static SaveContainer GetDebugSaveContainer(string directory, MappingFromPerson? mappingFromPerson, SortingContainer sortingContainer, Mapping mapping)
|
||||
{
|
||||
SaveContainer result;
|
||||
if (sortingContainer.Mapping.MappingFromLocation is null)
|
||||
throw new NullReferenceException(nameof(sortingContainer.Mapping.MappingFromLocation));
|
||||
FileHolder faceFileHolder = new($"C:/{sortingContainer.Sorting.Id}.{sortingContainer.Sorting.NormalizedRectangle}");
|
||||
string shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.debug.lnk");
|
||||
string shortcutFile;
|
||||
if (mappingFromPerson is null)
|
||||
shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.{sortingContainer.Sorting.DistancePermyriad}.lnk");
|
||||
else
|
||||
shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.{sortingContainer.Sorting.DistancePermyriad}.lnk");
|
||||
result = new(directory, faceFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
|
||||
return result;
|
||||
}
|
||||
|
Reference in New Issue
Block a user