New directory structure for Face and FaceParts
This commit is contained in:
parent
d1c194197d
commit
34a02fd8bd
@ -80,62 +80,64 @@ public class CopyDistinct
|
|||||||
return (directories, results);
|
return (directories, results);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<(FileHolder, string)> GetToDoCollection(ProgressBar progressBar, List<string> files)
|
private List<(FileHolder, string, string)> GetToDoCollection(ProgressBar progressBar, FileHolder[] fileHolders)
|
||||||
{
|
{
|
||||||
List<(FileHolder, string)> results = new();
|
List<(FileHolder, string, string)> results = new();
|
||||||
string checkFile;
|
string checkFile;
|
||||||
string directory;
|
string directory;
|
||||||
FileInfo fileInfo;
|
FileInfo fileInfo;
|
||||||
int directoryIndex;
|
int directoryIndex;
|
||||||
FileHolder fileHolder;
|
string directoryName;
|
||||||
|
bool wrapped = false;
|
||||||
List<string> distinct = new();
|
List<string> distinct = new();
|
||||||
bool nameWithoutExtensionIsIdFormat;
|
foreach (FileHolder fileHolder in fileHolders)
|
||||||
foreach (string file in files)
|
|
||||||
{
|
{
|
||||||
progressBar.Tick();
|
progressBar.Tick();
|
||||||
fileHolder = new(file);
|
|
||||||
if (fileHolder.ExtensionLowered == ".id" || fileHolder.ExtensionLowered == ".lsv" || fileHolder.DirectoryName is null)
|
if (fileHolder.ExtensionLowered == ".id" || fileHolder.ExtensionLowered == ".lsv" || fileHolder.DirectoryName is null)
|
||||||
continue;
|
continue;
|
||||||
if (files.Contains($"{fileHolder.FullName}.id"))
|
|
||||||
continue;
|
|
||||||
nameWithoutExtensionIsIdFormat = Shared.Models.Stateless.Methods.IProperty.NameWithoutExtensionIsIdFormat(fileHolder);
|
|
||||||
if (!nameWithoutExtensionIsIdFormat)
|
|
||||||
{
|
|
||||||
nameWithoutExtensionIsIdFormat = Shared.Models.Stateless.Methods.IProperty.NameWithoutExtensionIsIdFormat(_PropertyConfiguration.ValidImageFormatExtensions, fileHolder);
|
|
||||||
if (!nameWithoutExtensionIsIdFormat)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
(_, directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, fileHolder.NameWithoutExtension);
|
(_, directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, fileHolder.NameWithoutExtension);
|
||||||
|
directoryName = Path.GetFileName(fileHolder.DirectoryName);
|
||||||
|
if (!fileHolder.Name.StartsWith(directoryName))
|
||||||
|
{
|
||||||
|
if (wrapped)
|
||||||
|
continue;
|
||||||
directory = _FileGroups[_PropertyConfiguration.ResultContent][directoryIndex];
|
directory = _FileGroups[_PropertyConfiguration.ResultContent][directoryIndex];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!wrapped)
|
||||||
|
wrapped = true;
|
||||||
|
directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], directoryName);
|
||||||
|
}
|
||||||
checkFile = Path.Combine(directory, $"{fileHolder.NameWithoutExtension}{fileHolder.ExtensionLowered}");
|
checkFile = Path.Combine(directory, $"{fileHolder.NameWithoutExtension}{fileHolder.ExtensionLowered}");
|
||||||
if (distinct.Contains(checkFile))
|
if (distinct.Contains(checkFile))
|
||||||
{
|
{
|
||||||
for (int i = 1; i < int.MaxValue; i++)
|
for (int i = 1; i < int.MaxValue; i++)
|
||||||
{
|
{
|
||||||
fileInfo = new(checkFile);
|
fileInfo = new(checkFile);
|
||||||
if (fileHolder.Length != fileInfo.Length || fileHolder.LastWriteTime != fileInfo.LastWriteTime)
|
if (!fileInfo.Exists || fileHolder.Length == fileInfo.Length && fileHolder.LastWriteTime == fileInfo.LastWriteTime)
|
||||||
checkFile = Path.Combine(directory, $"{fileHolder.NameWithoutExtension}.{i}why{fileHolder.ExtensionLowered}");
|
|
||||||
else
|
|
||||||
checkFile = Path.Combine(directory, $"{fileHolder.NameWithoutExtension}.{i}dup{fileHolder.ExtensionLowered}");
|
checkFile = Path.Combine(directory, $"{fileHolder.NameWithoutExtension}.{i}dup{fileHolder.ExtensionLowered}");
|
||||||
|
else
|
||||||
|
checkFile = Path.Combine(directory, $"{fileHolder.NameWithoutExtension}.{i}why{fileHolder.ExtensionLowered}");
|
||||||
if (distinct.Contains(checkFile))
|
if (distinct.Contains(checkFile))
|
||||||
continue;
|
continue;
|
||||||
distinct.Add(checkFile);
|
distinct.Add(checkFile);
|
||||||
results.Add(new(fileHolder, checkFile));
|
results.Add(new(fileHolder, directory, checkFile));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
distinct.Add(checkFile);
|
distinct.Add(checkFile);
|
||||||
results.Add(new(fileHolder, checkFile));
|
results.Add(new(fileHolder, directory, checkFile));
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<string> Copy(ProgressBar progressBar, List<(FileHolder, string)> toDoCollection)
|
private static List<string> Copy(ProgressBar progressBar, List<(FileHolder, string, string)> toDoCollection)
|
||||||
{
|
{
|
||||||
List<string> results = new();
|
List<string> results = new();
|
||||||
FileInfo fileInfo;
|
FileInfo fileInfo;
|
||||||
foreach ((FileHolder fileHolder, string to) in toDoCollection)
|
foreach ((FileHolder fileHolder, string _, string to) in toDoCollection)
|
||||||
{
|
{
|
||||||
progressBar.Tick();
|
progressBar.Tick();
|
||||||
fileInfo = new(to);
|
fileInfo = new(to);
|
||||||
@ -161,12 +163,25 @@ public class CopyDistinct
|
|||||||
const string fileSearchFilter = "*";
|
const string fileSearchFilter = "*";
|
||||||
string message = nameof(CopyDistinct);
|
string message = nameof(CopyDistinct);
|
||||||
const string directorySearchFilter = "*";
|
const string directorySearchFilter = "*";
|
||||||
|
List<string> distinctDirectories = new();
|
||||||
List<string[]> filesCollection = Shared.Models.Stateless.Methods.IDirectory.GetFilesCollection(_PropertyConfiguration.RootDirectory, directorySearchFilter, fileSearchFilter);
|
List<string[]> filesCollection = Shared.Models.Stateless.Methods.IDirectory.GetFilesCollection(_PropertyConfiguration.RootDirectory, directorySearchFilter, fileSearchFilter);
|
||||||
(_, List<string> allFiles) = Get(filesCollection);
|
(_, List<string> allFiles) = Get(filesCollection);
|
||||||
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
|
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
|
||||||
progressBar = new(allFiles.Count, message, options);
|
progressBar = new(allFiles.Count, message, options);
|
||||||
List<(FileHolder, string)> toDoCollection = GetToDoCollection(progressBar, allFiles);
|
FileHolder[] fileHolders = (from l in allFiles select new FileHolder(l)).OrderBy(l => l.LastWriteTime).ToArray();
|
||||||
|
List<(FileHolder, string, string)> toDoCollection = GetToDoCollection(progressBar, fileHolders);
|
||||||
progressBar.Dispose();
|
progressBar.Dispose();
|
||||||
|
foreach ((FileHolder fileHolder, string directory, string to) in toDoCollection)
|
||||||
|
{
|
||||||
|
if (distinctDirectories.Contains(directory))
|
||||||
|
continue;
|
||||||
|
distinctDirectories.Add(directory);
|
||||||
|
}
|
||||||
|
foreach (string distinctDirectory in distinctDirectories)
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(distinctDirectory))
|
||||||
|
_ = Directory.CreateDirectory(distinctDirectory);
|
||||||
|
}
|
||||||
log.Information($"Ready to Copy {toDoCollection.Count} file(s)?");
|
log.Information($"Ready to Copy {toDoCollection.Count} file(s)?");
|
||||||
for (int y = 0; y < int.MaxValue; y++)
|
for (int y = 0; y < int.MaxValue; y++)
|
||||||
{
|
{
|
||||||
|
@ -22,8 +22,6 @@ namespace View_by_Distance.Face.Models;
|
|||||||
public class D_Face
|
public class D_Face
|
||||||
{
|
{
|
||||||
|
|
||||||
public List<string> AngleBracketCollection { get; }
|
|
||||||
|
|
||||||
protected readonly string _FileNameExtension;
|
protected readonly string _FileNameExtension;
|
||||||
public string FileNameExtension => _FileNameExtension;
|
public string FileNameExtension => _FileNameExtension;
|
||||||
|
|
||||||
@ -77,7 +75,6 @@ public class D_Face
|
|||||||
_EncoderParameters = encoderParameters;
|
_EncoderParameters = encoderParameters;
|
||||||
_FileNameExtension = filenameExtension;
|
_FileNameExtension = filenameExtension;
|
||||||
_Log = Serilog.Log.ForContext<D_Face>();
|
_Log = Serilog.Log.ForContext<D_Face>();
|
||||||
AngleBracketCollection = new List<string>();
|
|
||||||
_HiddenImageCodecInfo = hiddenImageCodecInfo;
|
_HiddenImageCodecInfo = hiddenImageCodecInfo;
|
||||||
_OverrideForFaceImages = overrideForFaceImages;
|
_OverrideForFaceImages = overrideForFaceImages;
|
||||||
_PropertyConfiguration = propertyConfiguration;
|
_PropertyConfiguration = propertyConfiguration;
|
||||||
@ -107,7 +104,7 @@ public class D_Face
|
|||||||
public void Update(string dResultsFullGroupDirectory)
|
public void Update(string dResultsFullGroupDirectory)
|
||||||
{
|
{
|
||||||
_FileGroups.Clear();
|
_FileGroups.Clear();
|
||||||
Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultCollection });
|
Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultCollection, _PropertyConfiguration.ResultContent });
|
||||||
foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs)
|
foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs)
|
||||||
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value);
|
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value);
|
||||||
}
|
}
|
||||||
@ -279,34 +276,6 @@ public class D_Face
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetAngleBracketCollection(string dResultsFullGroupDirectory, string sourceDirectory)
|
|
||||||
{
|
|
||||||
AngleBracketCollection.Clear();
|
|
||||||
AngleBracketCollection.AddRange(IResult.GetDirectoryInfoCollection(_PropertyConfiguration,
|
|
||||||
sourceDirectory,
|
|
||||||
dResultsFullGroupDirectory,
|
|
||||||
contentDescription: "n png file(s) for each face found",
|
|
||||||
singletonDescription: string.Empty,
|
|
||||||
collectionDescription: "For each image a json file with all faces found",
|
|
||||||
converted: true));
|
|
||||||
}
|
|
||||||
|
|
||||||
public string GetFacesDirectory(string dResultsFullGroupDirectory, Item item)
|
|
||||||
{
|
|
||||||
string result;
|
|
||||||
bool angleBracketCollectionAny = AngleBracketCollection.Any();
|
|
||||||
if (!angleBracketCollectionAny)
|
|
||||||
{
|
|
||||||
if (item.ImageFileHolder.DirectoryName is null)
|
|
||||||
throw new NullReferenceException(nameof(item.ImageFileHolder.DirectoryName));
|
|
||||||
SetAngleBracketCollection(dResultsFullGroupDirectory, item.ImageFileHolder.DirectoryName);
|
|
||||||
}
|
|
||||||
result = Path.Combine(AngleBracketCollection[0].Replace("<>", _PropertyConfiguration.ResultContent), item.ImageFileHolder.NameWithoutExtension);
|
|
||||||
if (!angleBracketCollectionAny)
|
|
||||||
AngleBracketCollection.Clear();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma warning restore CA1416
|
#pragma warning restore CA1416
|
||||||
|
|
||||||
private static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(string outputResolution, List<LocationContainer<MetadataExtractor.Directory>> locationContainers, Dictionary<string, int[]> outputResolutionToResize, List<Shared.Models.Face> faces)
|
private static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(string outputResolution, List<LocationContainer<MetadataExtractor.Directory>> locationContainers, Dictionary<string, int[]> outputResolutionToResize, List<Shared.Models.Face> faces)
|
||||||
@ -433,7 +402,7 @@ public class D_Face
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<(Shared.Models.Face, FileInfo?, string, bool)> SaveFaces(string f, string dResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, List<string> parseExceptions, MappingFromItem mappingFromItem, string facesDirectory, List<Shared.Models.Face> faces)
|
public List<(Shared.Models.Face, FileInfo?, string, bool)> SaveFaces(string f, string dResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, List<string> parseExceptions, MappingFromItem mappingFromItem, List<Shared.Models.Face> faces)
|
||||||
{
|
{
|
||||||
List<(Shared.Models.Face, FileInfo?, string, bool Save)> results = new();
|
List<(Shared.Models.Face, FileInfo?, string, bool Save)> results = new();
|
||||||
bool save;
|
bool save;
|
||||||
@ -441,8 +410,9 @@ public class D_Face
|
|||||||
string deterministicHashCodeKey;
|
string deterministicHashCodeKey;
|
||||||
string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize) };
|
string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize) };
|
||||||
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList();
|
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList();
|
||||||
if (!Directory.Exists(facesDirectory))
|
(_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.Name);
|
||||||
_ = Directory.CreateDirectory(facesDirectory);
|
string directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], mappingFromItem.ImageFileHolder.NameWithoutExtension);
|
||||||
|
bool directoryExists = Directory.Exists(directory);
|
||||||
foreach (Shared.Models.Face face in faces)
|
foreach (Shared.Models.Face face in faces)
|
||||||
{
|
{
|
||||||
save = false;
|
save = false;
|
||||||
@ -452,17 +422,23 @@ public class D_Face
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(mappingFromItem.Id, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
|
deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(mappingFromItem.Id, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
|
||||||
fileInfo = new FileInfo(Path.Combine(facesDirectory, $"{deterministicHashCodeKey}{mappingFromItem.ImageFileHolder.ExtensionLowered}{_FileNameExtension}"));
|
fileInfo = new FileInfo(Path.Combine(directory, $"{deterministicHashCodeKey}{mappingFromItem.ImageFileHolder.ExtensionLowered}{_FileNameExtension}"));
|
||||||
if (_OverrideForFaceImages)
|
if (!directoryExists)
|
||||||
|
save = true;
|
||||||
|
else if (_OverrideForFaceImages)
|
||||||
save = true;
|
save = true;
|
||||||
else if (!fileInfo.Exists)
|
else if (!fileInfo.Exists)
|
||||||
save = true;
|
save = true;
|
||||||
else if (_CheckDFaceAndUpWriteDates && dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime)
|
else if (_CheckDFaceAndUpWriteDates && dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime)
|
||||||
save = true;
|
save = true;
|
||||||
results.Add(new(face, fileInfo, Path.Combine(facesDirectory, $"{deterministicHashCodeKey}{mappingFromItem.ImageFileHolder.ExtensionLowered}{_HiddenFileNameExtension}"), save));
|
results.Add(new(face, fileInfo, Path.Combine(directory, $"{deterministicHashCodeKey}{mappingFromItem.ImageFileHolder.ExtensionLowered}{_HiddenFileNameExtension}"), save));
|
||||||
}
|
}
|
||||||
if (results.Any(l => l.Save))
|
if (results.Any(l => l.Save))
|
||||||
|
{
|
||||||
|
if (!directoryExists)
|
||||||
|
_ = Directory.CreateDirectory(directory);
|
||||||
SaveFaces(mappingFromItem.ResizedFileHolder, results);
|
SaveFaces(mappingFromItem.ResizedFileHolder, results);
|
||||||
|
}
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,14 +28,18 @@ public class D2_FaceParts
|
|||||||
private readonly bool _OverrideForFaceLandmarkImages;
|
private readonly bool _OverrideForFaceLandmarkImages;
|
||||||
private readonly EncoderParameters _EncoderParameters;
|
private readonly EncoderParameters _EncoderParameters;
|
||||||
private readonly List<string> _AngleBracketCollection;
|
private readonly List<string> _AngleBracketCollection;
|
||||||
|
private readonly Dictionary<string, string[]> _FileGroups;
|
||||||
|
private readonly IPropertyConfiguration _PropertyConfiguration;
|
||||||
|
|
||||||
public D2_FaceParts(ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension, bool checkDFaceAndUpWriteDates, bool overrideForFaceLandmarkImages)
|
public D2_FaceParts(IPropertyConfiguration propertyConfiguration, ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension, bool checkDFaceAndUpWriteDates, bool overrideForFaceLandmarkImages)
|
||||||
{
|
{
|
||||||
|
_FileGroups = new();
|
||||||
_ImageCodecInfo = imageCodecInfo;
|
_ImageCodecInfo = imageCodecInfo;
|
||||||
_EncoderParameters = encoderParameters;
|
_EncoderParameters = encoderParameters;
|
||||||
_FileNameExtension = filenameExtension;
|
_FileNameExtension = filenameExtension;
|
||||||
_AngleBracketCollection = new List<string>();
|
_AngleBracketCollection = new List<string>();
|
||||||
_Log = Serilog.Log.ForContext<D2_FaceParts>();
|
_Log = Serilog.Log.ForContext<D2_FaceParts>();
|
||||||
|
_PropertyConfiguration = propertyConfiguration;
|
||||||
_CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates;
|
_CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates;
|
||||||
_OverrideForFaceLandmarkImages = overrideForFaceLandmarkImages;
|
_OverrideForFaceLandmarkImages = overrideForFaceLandmarkImages;
|
||||||
}
|
}
|
||||||
@ -46,6 +50,14 @@ public class D2_FaceParts
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Update(string dResultsFullGroupDirectory)
|
||||||
|
{
|
||||||
|
_FileGroups.Clear();
|
||||||
|
Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultContent });
|
||||||
|
foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs)
|
||||||
|
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value);
|
||||||
|
}
|
||||||
|
|
||||||
public void SetAngleBracketCollection(Configuration configuration, string d2ResultsFullGroupDirectory, string sourceDirectory)
|
public void SetAngleBracketCollection(Configuration configuration, string d2ResultsFullGroupDirectory, string sourceDirectory)
|
||||||
{
|
{
|
||||||
_AngleBracketCollection.Clear();
|
_AngleBracketCollection.Clear();
|
||||||
@ -69,10 +81,10 @@ public class D2_FaceParts
|
|||||||
SetAngleBracketCollection(configuration, dResultsFullGroupDirectory, item.ImageFileHolder.DirectoryName);
|
SetAngleBracketCollection(configuration, dResultsFullGroupDirectory, item.ImageFileHolder.DirectoryName);
|
||||||
}
|
}
|
||||||
if (includeNameWithoutExtension)
|
if (includeNameWithoutExtension)
|
||||||
result = Path.Combine(_AngleBracketCollection[0].Replace("<>", "()"), item.ImageFileHolder.NameWithoutExtension);
|
result = Path.Combine(_AngleBracketCollection[0].Replace("<>", _PropertyConfiguration.ResultContent), item.ImageFileHolder.NameWithoutExtension);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result = _AngleBracketCollection[0].Replace("<>", "[()]");
|
result = _AngleBracketCollection[0].Replace("<>", $"[{_PropertyConfiguration.ResultContent}]");
|
||||||
if (!Directory.Exists(result))
|
if (!Directory.Exists(result))
|
||||||
_ = Directory.CreateDirectory(result);
|
_ = Directory.CreateDirectory(result);
|
||||||
}
|
}
|
||||||
@ -234,7 +246,7 @@ public class D2_FaceParts
|
|||||||
|
|
||||||
#pragma warning restore CA1416
|
#pragma warning restore CA1416
|
||||||
|
|
||||||
public void SaveFaceLandmarkImages(Configuration configuration, string facePartsDirectory, List<Tuple<string, DateTime>> subFileTuples, List<string> parseExceptions, MappingFromItem mappingFromItem, List<Shared.Models.Face> faces, bool saveRotated)
|
public void SaveFaceLandmarkImages(Configuration configuration, List<Tuple<string, DateTime>> subFileTuples, List<string> parseExceptions, MappingFromItem mappingFromItem, List<Shared.Models.Face> faces, bool saveRotated)
|
||||||
{
|
{
|
||||||
FileInfo fileInfo;
|
FileInfo fileInfo;
|
||||||
bool check = false;
|
bool check = false;
|
||||||
@ -247,8 +259,9 @@ public class D2_FaceParts
|
|||||||
List<(Shared.Models.Face, string, string)> collection = new();
|
List<(Shared.Models.Face, string, string)> collection = new();
|
||||||
string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize), nameof(D_Face) };
|
string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize), nameof(D_Face) };
|
||||||
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList();
|
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList();
|
||||||
if (!Directory.Exists(facePartsDirectory))
|
(_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.Name);
|
||||||
_ = Directory.CreateDirectory(facePartsDirectory);
|
string directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], mappingFromItem.ImageFileHolder.NameWithoutExtension);
|
||||||
|
bool directoryExists = Directory.Exists(directory);
|
||||||
foreach (Shared.Models.Face face in faces)
|
foreach (Shared.Models.Face face in faces)
|
||||||
{
|
{
|
||||||
if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null)
|
if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null)
|
||||||
@ -257,13 +270,15 @@ public class D2_FaceParts
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(mappingFromItem.Id, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
|
deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(mappingFromItem.Id, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
|
||||||
fileInfo = new FileInfo(Path.Combine(facePartsDirectory, $"{deterministicHashCodeKey}{mappingFromItem.ImageFileHolder.ExtensionLowered}{_FileNameExtension}"));
|
fileInfo = new FileInfo(Path.Combine(directory, $"{deterministicHashCodeKey}{mappingFromItem.ImageFileHolder.ExtensionLowered}{_FileNameExtension}"));
|
||||||
if (string.IsNullOrEmpty(fileInfo.DirectoryName))
|
if (string.IsNullOrEmpty(fileInfo.DirectoryName))
|
||||||
continue;
|
continue;
|
||||||
rotatedFileInfo = new FileInfo(Path.Combine(fileInfo.DirectoryName, $"{deterministicHashCodeKey} - R{mappingFromItem.ImageFileHolder.ExtensionLowered}{_FileNameExtension}"));
|
rotatedFileInfo = new FileInfo(Path.Combine(fileInfo.DirectoryName, $"{deterministicHashCodeKey} - R{mappingFromItem.ImageFileHolder.ExtensionLowered}{_FileNameExtension}"));
|
||||||
collection.Add(new(face, fileInfo.FullName, rotatedFileInfo.FullName));
|
collection.Add(new(face, fileInfo.FullName, rotatedFileInfo.FullName));
|
||||||
if (check)
|
if (check)
|
||||||
continue;
|
continue;
|
||||||
|
else if (!directoryExists)
|
||||||
|
check = true;
|
||||||
else if (_OverrideForFaceLandmarkImages)
|
else if (_OverrideForFaceLandmarkImages)
|
||||||
check = true;
|
check = true;
|
||||||
else if (!fileInfo.Exists)
|
else if (!fileInfo.Exists)
|
||||||
@ -279,8 +294,12 @@ public class D2_FaceParts
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (check)
|
if (check)
|
||||||
|
{
|
||||||
|
if (!directoryExists)
|
||||||
|
_ = Directory.CreateDirectory(directory);
|
||||||
SaveFaceParts(pointSize, mappingFromItem.ResizedFileHolder, saveRotated, collection);
|
SaveFaceParts(pointSize, mappingFromItem.ResizedFileHolder, saveRotated, collection);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma warning disable CA1416
|
#pragma warning disable CA1416
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ public partial class DlibDotNet
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
(ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetGifLowQuality();
|
(ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetGifLowQuality();
|
||||||
_FaceParts = new D2_FaceParts(imageCodecInfo, encoderParameters, filenameExtension, configuration.CheckDFaceAndUpWriteDates, configuration.OverrideForFaceLandmarkImages);
|
_FaceParts = new D2_FaceParts(_Configuration.PropertyConfiguration, imageCodecInfo, encoderParameters, filenameExtension, configuration.CheckDFaceAndUpWriteDates, configuration.OverrideForFaceLandmarkImages);
|
||||||
}
|
}
|
||||||
_MapConfiguration = Get(configuration, _Faces.FileNameExtension, _Faces.HiddenFileNameExtension, _FaceParts.FileNameExtension);
|
_MapConfiguration = Get(configuration, _Faces.FileNameExtension, _Faces.HiddenFileNameExtension, _FaceParts.FileNameExtension);
|
||||||
_Distance = new(configuration.DistanceMoveUnableToMatch, configuration.DistanceRenameToMatch, _Configuration.FaceConfidencePercent, configuration.RangeDistanceTolerance, configuration.RangeFaceConfidence, configuration.RectangleIntersectMinimums);
|
_Distance = new(configuration.DistanceMoveUnableToMatch, configuration.DistanceRenameToMatch, _Configuration.FaceConfidencePercent, configuration.RangeDistanceTolerance, configuration.RangeFaceConfidence, configuration.RectangleIntersectMinimums);
|
||||||
@ -450,8 +450,6 @@ public partial class DlibDotNet
|
|||||||
if (property is null || item.Property is null)
|
if (property is null || item.Property is null)
|
||||||
throw new NullReferenceException(nameof(property));
|
throw new NullReferenceException(nameof(property));
|
||||||
item.SetResizedFileHolder(_Resize.FileNameExtension, resizedFileHolder);
|
item.SetResizedFileHolder(_Resize.FileNameExtension, resizedFileHolder);
|
||||||
string? facesDirectory = !_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Contains(outputResolution) ? null : _Faces.GetFacesDirectory(dResultsFullGroupDirectory, item);
|
|
||||||
string? facePartsDirectory = !_Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution) ? null : _FaceParts.GetFacePartsDirectory(_Configuration.PropertyConfiguration, dResultsFullGroupDirectory, item, includeNameWithoutExtension: true);
|
|
||||||
MappingFromItem mappingFromItem = Shared.Models.Stateless.Methods.IMappingFromItem.GetMappingFromItem(containerDateTimes, item, resizedFileHolder);
|
MappingFromItem mappingFromItem = Shared.Models.Stateless.Methods.IMappingFromItem.GetMappingFromItem(containerDateTimes, item, resizedFileHolder);
|
||||||
(int metadataGroups, metadataCollection) = metadata.GetMetadataCollection(subFileTuples, parseExceptions, mappingFromItem);
|
(int metadataGroups, metadataCollection) = metadata.GetMetadataCollection(subFileTuples, parseExceptions, mappingFromItem);
|
||||||
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
||||||
@ -465,7 +463,7 @@ public partial class DlibDotNet
|
|||||||
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
||||||
ticks = LogDelta(ticks, nameof(C_Resize.SaveResizedSubfile));
|
ticks = LogDelta(ticks, nameof(C_Resize.SaveResizedSubfile));
|
||||||
}
|
}
|
||||||
if (facesDirectory is null)
|
if (!_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Contains(outputResolution))
|
||||||
faces = new();
|
faces = new();
|
||||||
else if (!mappingFromItem.ResizedFileHolder.Exists && !File.Exists(mappingFromItem.ResizedFileHolder.FullName))
|
else if (!mappingFromItem.ResizedFileHolder.Exists && !File.Exists(mappingFromItem.ResizedFileHolder.FullName))
|
||||||
faces = new();
|
faces = new();
|
||||||
@ -483,7 +481,7 @@ public partial class DlibDotNet
|
|||||||
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
||||||
ticks = LogDelta(ticks, nameof(D_Face.GetFaces));
|
ticks = LogDelta(ticks, nameof(D_Face.GetFaces));
|
||||||
SetMapping(mapLogic, item, isFocusRelativePath, isIgnoreRelativePath, mappingFromItem, mappingFromPhotoPrismCollection, faces);
|
SetMapping(mapLogic, item, isFocusRelativePath, isIgnoreRelativePath, mappingFromItem, mappingFromPhotoPrismCollection, faces);
|
||||||
List<(Shared.Models.Face, FileInfo?, string, bool Saved)> faceCollection = _Faces.SaveFaces(_FaceParts.FileNameExtension, dResultsFullGroupDirectory, subFileTuples, parseExceptions, mappingFromItem, facesDirectory, faces);
|
List<(Shared.Models.Face, FileInfo?, string, bool Saved)> faceCollection = _Faces.SaveFaces(_FaceParts.FileNameExtension, dResultsFullGroupDirectory, subFileTuples, parseExceptions, mappingFromItem, faces);
|
||||||
if (_Configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions.Contains(outputResolution))
|
if (_Configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions.Contains(outputResolution))
|
||||||
_FaceParts.CopyFacesAndSaveFaceLandmarkImage(facePartsCollectionDirectory, mappingFromItem, faceCollection);
|
_FaceParts.CopyFacesAndSaveFaceLandmarkImage(facePartsCollectionDirectory, mappingFromItem, faceCollection);
|
||||||
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
||||||
@ -496,11 +494,8 @@ public partial class DlibDotNet
|
|||||||
if (review || _Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution))
|
if (review || _Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution))
|
||||||
{
|
{
|
||||||
bool saveRotated = false;
|
bool saveRotated = false;
|
||||||
if (!_Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution))
|
|
||||||
_FaceParts.SetAngleBracketCollection(_Configuration.PropertyConfiguration, d2ResultsFullGroupDirectory, container.SourceDirectory);
|
|
||||||
string sourceDirectorySegment = Property.Models.Stateless.IResult.GetRelativePath(_Configuration.PropertyConfiguration, container.SourceDirectory);
|
string sourceDirectorySegment = Property.Models.Stateless.IResult.GetRelativePath(_Configuration.PropertyConfiguration, container.SourceDirectory);
|
||||||
facePartsDirectory ??= _FaceParts.GetFacePartsDirectory(_Configuration.PropertyConfiguration, dResultsFullGroupDirectory, item, includeNameWithoutExtension: true);
|
_FaceParts.SaveFaceLandmarkImages(_Configuration.PropertyConfiguration, subFileTuples, parseExceptions, mappingFromItem, faces, saveRotated);
|
||||||
_FaceParts.SaveFaceLandmarkImages(_Configuration.PropertyConfiguration, facePartsDirectory, subFileTuples, parseExceptions, mappingFromItem, faces, saveRotated);
|
|
||||||
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
||||||
ticks = LogDelta(ticks, nameof(D2_FaceParts.SaveFaceLandmarkImages));
|
ticks = LogDelta(ticks, nameof(D2_FaceParts.SaveFaceLandmarkImages));
|
||||||
}
|
}
|
||||||
@ -685,6 +680,7 @@ public partial class DlibDotNet
|
|||||||
(cResultsFullGroupDirectory, c2ResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
|
(cResultsFullGroupDirectory, c2ResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
|
||||||
_Faces.Update(dResultsFullGroupDirectory);
|
_Faces.Update(dResultsFullGroupDirectory);
|
||||||
_Resize.Update(cResultsFullGroupDirectory);
|
_Resize.Update(cResultsFullGroupDirectory);
|
||||||
|
_FaceParts.Update(d2ResultsFullGroupDirectory);
|
||||||
_BlurHasher = new BlurHash.Models.C2_BlurHasher(_Configuration.PropertyConfiguration, c2ResultsFullGroupDirectory);
|
_BlurHasher = new BlurHash.Models.C2_BlurHasher(_Configuration.PropertyConfiguration, c2ResultsFullGroupDirectory);
|
||||||
for (int i = 0; i < containers.Length; i++)
|
for (int i = 0; i < containers.Length; i++)
|
||||||
{
|
{
|
||||||
@ -700,10 +696,6 @@ public partial class DlibDotNet
|
|||||||
anyNullOrNoIsUniqueFileName = filteredItems.Any(l => !l.IsUniqueFileName);
|
anyNullOrNoIsUniqueFileName = filteredItems.Any(l => !l.IsUniqueFileName);
|
||||||
totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
||||||
message = $"{i + 1:000} [{filteredItems.Length:000}] / {containersLength:000} - {total} / {t} total - {totalSeconds} total second(s) - {outputResolution} - {container.SourceDirectory}";
|
message = $"{i + 1:000} [{filteredItems.Length:000}] / {containersLength:000} - {total} / {t} total - {totalSeconds} total second(s) - {outputResolution} - {container.SourceDirectory}";
|
||||||
if (_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Contains(outputResolution))
|
|
||||||
_Faces.SetAngleBracketCollection(dResultsFullGroupDirectory, container.SourceDirectory);
|
|
||||||
if (_Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution))
|
|
||||||
_FaceParts.SetAngleBracketCollection(_Configuration.PropertyConfiguration, d2ResultsFullGroupDirectory, container.SourceDirectory);
|
|
||||||
propertyLogic.SetAngleBracketCollection(aResultsFullGroupDirectory, container.SourceDirectory, anyNullOrNoIsUniqueFileName);
|
propertyLogic.SetAngleBracketCollection(aResultsFullGroupDirectory, container.SourceDirectory, anyNullOrNoIsUniqueFileName);
|
||||||
_Resize.SetAngleBracketCollection(cResultsFullGroupDirectory, container.SourceDirectory);
|
_Resize.SetAngleBracketCollection(cResultsFullGroupDirectory, container.SourceDirectory);
|
||||||
exceptionCount = FullParallelWork(maxDegreeOfParallelism,
|
exceptionCount = FullParallelWork(maxDegreeOfParallelism,
|
||||||
@ -1018,26 +1010,26 @@ public partial class DlibDotNet
|
|||||||
|
|
||||||
private void VerifyPersonContainersDisplayDirectoryAllFiles()
|
private void VerifyPersonContainersDisplayDirectoryAllFiles()
|
||||||
{
|
{
|
||||||
WindowsShortcut windowsShortcut;
|
// WindowsShortcut windowsShortcut;
|
||||||
foreach (PersonContainer personContainer in _PersonContainers)
|
// foreach (PersonContainer personContainer in _PersonContainers)
|
||||||
{
|
// {
|
||||||
foreach (string file in personContainer.DisplayDirectoryAllFiles)
|
// foreach (string file in personContainer.DisplayDirectoryAllFiles)
|
||||||
{
|
// {
|
||||||
if (!file.EndsWith(".lnk"))
|
// if (!file.EndsWith(".lnk"))
|
||||||
continue;
|
// continue;
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
windowsShortcut = WindowsShortcut.Load(file);
|
// windowsShortcut = WindowsShortcut.Load(file);
|
||||||
if (windowsShortcut.Path is null)
|
// if (windowsShortcut.Path is null)
|
||||||
continue;
|
// continue;
|
||||||
if (!File.Exists(windowsShortcut.Path))
|
// if (!File.Exists(windowsShortcut.Path))
|
||||||
File.Delete(file);
|
// File.Delete(file);
|
||||||
windowsShortcut.Dispose();
|
// windowsShortcut.Dispose();
|
||||||
}
|
// }
|
||||||
catch (Exception)
|
// catch (Exception)
|
||||||
{ }
|
// { }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void Verify(string eDistanceContentDirectory, List<Item> distinctFilteredItems)
|
private static void Verify(string eDistanceContentDirectory, List<Item> distinctFilteredItems)
|
||||||
|
@ -322,30 +322,20 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
string checkFile;
|
string checkFile;
|
||||||
string? facesDirectory = Stateless.MapLogic.GetFacesDirectory(dFacesContentDirectory, mapping.MappingFromItem);
|
string facesDirectory = Stateless.MapLogic.GetFacesDirectory(_PropertyConfiguration, dFacesContentDirectory, mapping.MappingFromItem);
|
||||||
if (facesDirectory is null)
|
|
||||||
result = null;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FileHolder faceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}"));
|
FileHolder faceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}"));
|
||||||
if (!faceFileHolder.Exists)
|
if (!faceFileHolder.Exists)
|
||||||
result = null;
|
result = null;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string shortcutFile = string.Empty;
|
string shortcutFile = string.Empty;
|
||||||
string? facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(d2FacePartsContentDirectory, mapping.MappingFromItem);
|
string facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(_PropertyConfiguration, d2FacePartsContentDirectory, mapping.MappingFromItem);
|
||||||
if (facePartsDirectory is null)
|
|
||||||
result = null;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
|
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
|
||||||
FileHolder hiddenFaceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesHiddenFileNameExtension}"));
|
FileHolder hiddenFaceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesHiddenFileNameExtension}"));
|
||||||
FileHolder facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacePartsFileNameExtension}"));
|
FileHolder facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacePartsFileNameExtension}"));
|
||||||
result = new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
|
result = new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,13 +383,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
string directory;
|
string directory;
|
||||||
string shortcutFile;
|
string shortcutFile;
|
||||||
Mapping? keyMapping;
|
Mapping? keyMapping;
|
||||||
|
string facesDirectory;
|
||||||
string? directoryName;
|
string? directoryName;
|
||||||
string personDirectory;
|
string personDirectory;
|
||||||
string? facesDirectory;
|
string facePartsDirectory;
|
||||||
FileHolder faceFileHolder;
|
FileHolder faceFileHolder;
|
||||||
string personKeyFormatted;
|
string personKeyFormatted;
|
||||||
List<int> distinct = new();
|
List<int> distinct = new();
|
||||||
string? facePartsDirectory;
|
|
||||||
SaveContainer? saveContainer;
|
SaveContainer? saveContainer;
|
||||||
FileHolder facePartsFileHolder;
|
FileHolder facePartsFileHolder;
|
||||||
FileHolder hiddenFaceFileHolder;
|
FileHolder hiddenFaceFileHolder;
|
||||||
@ -489,9 +479,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
if (saveIndividually && keyMapping.MappingFromLocation.WholePercentages == mapping.MappingFromLocation.WholePercentages)
|
if (saveIndividually && keyMapping.MappingFromLocation.WholePercentages == mapping.MappingFromLocation.WholePercentages)
|
||||||
results.Add(new(Path.Combine(directory, "Maybe")));
|
results.Add(new(Path.Combine(directory, "Maybe")));
|
||||||
}
|
}
|
||||||
facesDirectory = Stateless.MapLogic.GetFacesDirectory(dFacesContentDirectory, mapping.MappingFromItem);
|
facesDirectory = Stateless.MapLogic.GetFacesDirectory(_PropertyConfiguration, dFacesContentDirectory, mapping.MappingFromItem);
|
||||||
if (facesDirectory is null)
|
|
||||||
continue;
|
|
||||||
faceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}"));
|
faceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}"));
|
||||||
if (!faceFileHolder.Exists)
|
if (!faceFileHolder.Exists)
|
||||||
continue;
|
continue;
|
||||||
@ -512,9 +500,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(d2FacePartsContentDirectory, mapping.MappingFromItem);
|
facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(_PropertyConfiguration, d2FacePartsContentDirectory, mapping.MappingFromItem);
|
||||||
if (facePartsDirectory is null)
|
|
||||||
continue;
|
|
||||||
shortcutFile = Path.Combine(personDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.lnk");
|
shortcutFile = Path.Combine(personDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.lnk");
|
||||||
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
|
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
|
||||||
hiddenFaceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesHiddenFileNameExtension}"));
|
hiddenFaceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesHiddenFileNameExtension}"));
|
||||||
@ -535,7 +521,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
saveContainer = Stateless.MapLogic.GetDebugSaveContainer(directory, mapping.MappingFromPerson, mapping.SortingContainer, keyMapping);
|
saveContainer = Stateless.MapLogic.GetDebugSaveContainer(directory, mapping.MappingFromPerson, mapping.SortingContainer, keyMapping);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
(saveContainer, SaveContainer? extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, dFacesContentDirectory, d2FacePartsContentCollectionDirectory, directory, mapping.SortingContainer, keyMapping);
|
(saveContainer, SaveContainer? extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, _PropertyConfiguration, dFacesContentDirectory, d2FacePartsContentCollectionDirectory, directory, mapping.SortingContainer, keyMapping);
|
||||||
if (saveContainer is null || extraSaveContainer is null)
|
if (saveContainer is null || extraSaveContainer is null)
|
||||||
continue;
|
continue;
|
||||||
results.Add(extraSaveContainer);
|
results.Add(extraSaveContainer);
|
||||||
@ -727,11 +713,11 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
string faceFileName;
|
string faceFileName;
|
||||||
string shortcutFile;
|
string shortcutFile;
|
||||||
|
string facesDirectory;
|
||||||
int? wholePercentages;
|
int? wholePercentages;
|
||||||
string? directoryName;
|
string? directoryName;
|
||||||
string mappingSegmentB;
|
string mappingSegmentB;
|
||||||
string personDirectory;
|
string personDirectory;
|
||||||
string? facesDirectory;
|
|
||||||
string personKeyFormatted;
|
string personKeyFormatted;
|
||||||
string personDisplayFileName;
|
string personDisplayFileName;
|
||||||
PersonBirthday personBirthday;
|
PersonBirthday personBirthday;
|
||||||
@ -775,9 +761,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
if (string.IsNullOrEmpty(directoryName))
|
if (string.IsNullOrEmpty(directoryName))
|
||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
shortcutFile = Path.Combine(personDisplayDirectory, $"{personDisplayFileName}.lnk");
|
shortcutFile = Path.Combine(personDisplayDirectory, $"{personDisplayFileName}.lnk");
|
||||||
facesDirectory = Stateless.MapLogic.GetFacesDirectory(dFacesContentDirectory, mapping.MappingFromItem);
|
facesDirectory = Stateless.MapLogic.GetFacesDirectory(_PropertyConfiguration, dFacesContentDirectory, mapping.MappingFromItem);
|
||||||
if (facesDirectory is null)
|
|
||||||
continue;
|
|
||||||
faceFileName = $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}";
|
faceFileName = $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}";
|
||||||
checkFile = Path.Combine(directory, fileInfo.Name);
|
checkFile = Path.Combine(directory, fileInfo.Name);
|
||||||
if (!_IdThenWholePercentagesToPersonContainers.TryGetValue(id.Value, out wholePercentagesToPeronContainerCollection) || !wholePercentagesToPeronContainerCollection.ContainsKey(wholePercentages.Value))
|
if (!_IdThenWholePercentagesToPersonContainers.TryGetValue(id.Value, out wholePercentagesToPeronContainerCollection) || !wholePercentagesToPeronContainerCollection.ContainsKey(wholePercentages.Value))
|
||||||
@ -898,8 +882,8 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
string faceFile;
|
string faceFile;
|
||||||
string directory;
|
string directory;
|
||||||
string faceFileName;
|
string faceFileName;
|
||||||
|
string facesDirectory;
|
||||||
string? directoryName;
|
string? directoryName;
|
||||||
string? facesDirectory;
|
|
||||||
PersonContainer? personContainer;
|
PersonContainer? personContainer;
|
||||||
Dictionary<long, int> personKeyToCount = new();
|
Dictionary<long, int> personKeyToCount = new();
|
||||||
bool usePersonCharactersCopyCount = personCharactersCopyCount != int.MaxValue;
|
bool usePersonCharactersCopyCount = personCharactersCopyCount != int.MaxValue;
|
||||||
@ -919,9 +903,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
if (string.IsNullOrEmpty(mapping.MappingFromPerson.DisplayDirectoryName))
|
if (string.IsNullOrEmpty(mapping.MappingFromPerson.DisplayDirectoryName))
|
||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
facesDirectory = Stateless.MapLogic.GetFacesDirectory(dFacesContentDirectory, mapping.MappingFromItem);
|
facesDirectory = Stateless.MapLogic.GetFacesDirectory(_PropertyConfiguration, dFacesContentDirectory, mapping.MappingFromItem);
|
||||||
if (facesDirectory is null)
|
|
||||||
continue;
|
|
||||||
faceFileName = $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}";
|
faceFileName = $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}";
|
||||||
faceFile = Path.Combine(facesDirectory, faceFileName);
|
faceFile = Path.Combine(facesDirectory, faceFileName);
|
||||||
personKey = mapping.MappingFromPerson.PersonBirthday.Value.Ticks;
|
personKey = mapping.MappingFromPerson.PersonBirthday.Value.Ticks;
|
||||||
@ -1241,9 +1223,9 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
string fileName;
|
string fileName;
|
||||||
string fullName;
|
string fullName;
|
||||||
string directory;
|
string directory;
|
||||||
|
string facesDirectory;
|
||||||
string? directoryName;
|
string? directoryName;
|
||||||
string personDirectory;
|
string personDirectory;
|
||||||
string? facesDirectory;
|
|
||||||
string personKeyFormatted;
|
string personKeyFormatted;
|
||||||
List<string> distinct = new();
|
List<string> distinct = new();
|
||||||
List<SaveShortcutsForOutputResolutions> collection = new();
|
List<SaveShortcutsForOutputResolutions> collection = new();
|
||||||
@ -1292,8 +1274,8 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
personDirectory = Path.Combine(directory, "Unknown");
|
personDirectory = Path.Combine(directory, "Unknown");
|
||||||
fileName = Path.Combine(personDirectory, $"{mapping.MappingFromItem.ResizedFileHolder.Name}.lnk");
|
fileName = Path.Combine(personDirectory, $"{mapping.MappingFromItem.ResizedFileHolder.Name}.lnk");
|
||||||
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, mapping.MappingFromItem.GetDateTimeOriginalThenMinimumDateTime(), fileName, mapping.MappingFromLocation?.DeterministicHashCodeKey, MakeAllHidden: false));
|
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, mapping.MappingFromItem.GetDateTimeOriginalThenMinimumDateTime(), fileName, mapping.MappingFromLocation?.DeterministicHashCodeKey, MakeAllHidden: false));
|
||||||
facesDirectory = Stateless.MapLogic.GetFacesDirectory(dFacesContentDirectory, mapping.MappingFromItem);
|
facesDirectory = Stateless.MapLogic.GetFacesDirectory(_PropertyConfiguration, dFacesContentDirectory, mapping.MappingFromItem);
|
||||||
if (facesDirectory is null || mapping.MappingFromLocation is null)
|
if (mapping.MappingFromLocation is null)
|
||||||
continue;
|
continue;
|
||||||
fullName = Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}");
|
fullName = Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}");
|
||||||
fileName = Path.Combine(personDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ResizedFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}.lnk");
|
fileName = Path.Combine(personDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ResizedFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}.lnk");
|
||||||
|
@ -809,25 +809,19 @@ internal abstract class MapLogic
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static string? GetFacesDirectory(string dFacesContentDirectory, MappingFromItem mappingFromItem)
|
internal static string GetFacesDirectory(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string dFacesContentDirectory, MappingFromItem mappingFromItem)
|
||||||
{
|
{
|
||||||
string? result;
|
string result;
|
||||||
string? directoryName = Path.GetDirectoryName(mappingFromItem.RelativePath);
|
(string directoryName, _) = IPath.GetDirectoryNameAndIndex(propertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.NameWithoutExtension);
|
||||||
if (directoryName is null)
|
result = Path.Combine(dFacesContentDirectory, propertyConfiguration.ResultAllInOne, directoryName, mappingFromItem.ImageFileHolder.NameWithoutExtension);
|
||||||
result = null;
|
|
||||||
else
|
|
||||||
result = Path.Combine($"{dFacesContentDirectory}{directoryName}", mappingFromItem.ImageFileHolder.NameWithoutExtension);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static string? GetFacePartsDirectory(string d2FacePartsContentDirectory, MappingFromItem mappingFromItem)
|
internal static string GetFacePartsDirectory(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string d2FacePartsContentDirectory, MappingFromItem mappingFromItem)
|
||||||
{
|
{
|
||||||
string? result;
|
string result;
|
||||||
string? directoryName = Path.GetDirectoryName(mappingFromItem.RelativePath);
|
(string directoryName, _) = IPath.GetDirectoryNameAndIndex(propertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.NameWithoutExtension);
|
||||||
if (directoryName is null)
|
result = Path.Combine(d2FacePartsContentDirectory, propertyConfiguration.ResultAllInOne, directoryName, mappingFromItem.ImageFileHolder.NameWithoutExtension);
|
||||||
result = null;
|
|
||||||
else
|
|
||||||
result = Path.Combine($"{d2FacePartsContentDirectory}{directoryName}", mappingFromItem.ImageFileHolder.NameWithoutExtension);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -846,7 +840,7 @@ internal abstract class MapLogic
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static (SaveContainer?, SaveContainer?) GetContainers(string facesFileNameExtension, string facePartsFileNameExtension, string dFacesContentDirectory, string d2FacePartsContentCollectionDirectory, string directory, SortingContainer sortingContainer, Mapping mapping)
|
internal static (SaveContainer?, SaveContainer?) GetContainers(string facesFileNameExtension, string facePartsFileNameExtension, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string dFacesContentDirectory, string d2FacePartsContentCollectionDirectory, string directory, SortingContainer sortingContainer, Mapping mapping)
|
||||||
{
|
{
|
||||||
SaveContainer? result;
|
SaveContainer? result;
|
||||||
SaveContainer? saveContainer;
|
SaveContainer? saveContainer;
|
||||||
@ -864,11 +858,7 @@ internal abstract class MapLogic
|
|||||||
string checkFile = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}{facePartsFileNameExtension}");
|
string checkFile = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}{facePartsFileNameExtension}");
|
||||||
result = new(checkFile, directory, new(facePartsContentCollectionFile));
|
result = new(checkFile, directory, new(facePartsContentCollectionFile));
|
||||||
}
|
}
|
||||||
string? facesDirectory = GetFacesDirectory(dFacesContentDirectory, mapping.MappingFromItem);
|
string facesDirectory = GetFacesDirectory(propertyConfiguration, dFacesContentDirectory, mapping.MappingFromItem);
|
||||||
if (facesDirectory is null)
|
|
||||||
saveContainer = null;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FileHolder faceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}"));
|
FileHolder faceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}"));
|
||||||
if (!faceFileHolder.Exists)
|
if (!faceFileHolder.Exists)
|
||||||
saveContainer = null;
|
saveContainer = null;
|
||||||
@ -878,7 +868,6 @@ internal abstract class MapLogic
|
|||||||
saveContainer = new(checkFile, directory, faceFileHolder);
|
saveContainer = new(checkFile, directory, faceFileHolder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return (result, saveContainer);
|
return (result, saveContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user