FilePath ready to test

This commit is contained in:
2023-12-24 11:29:36 -07:00
parent af491371a3
commit 7007a9df2e
60 changed files with 960 additions and 857 deletions

View File

@ -11,7 +11,7 @@ namespace View_by_Distance.Distance.Models;
public partial class E_Distance : IDistance<MetadataExtractor.Directory>
{
internal record Record(string File, FaceRecognitionDotNet.FaceEncoding FaceRecognitionDotNetFaceEncoding);
internal record Record(FilePath FilePath, FaceRecognitionDotNet.FaceEncoding FaceRecognitionDotNetFaceEncoding);
private readonly List<string> _Moved;
private readonly List<double?> _Debug;
@ -40,11 +40,11 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
_RangeDistanceToleranceAverage = rangeDistanceTolerance.Average();
}
private static void MoveUnableToMatch(string file)
private static void MoveUnableToMatch(FilePath filePath)
{
string checkFile = $"{file}.unk";
if (File.Exists(file) && !File.Exists(checkFile))
File.Move(file, checkFile);
string checkFile = $"{filePath.FullName}.unk";
if (File.Exists(filePath.FullName) && !File.Exists(checkFile))
File.Move(filePath.FullName, checkFile);
}
private FaceDistanceContainer[] GetFaceDistanceContainers(MappingFromItem mappingFromItem, List<Face> intersectFaces)
@ -150,7 +150,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
return results;
}
private static FileInfo? CheckFileThenGetFileInfo(string facesFileNameExtension, MappingFromItem mappingFromItem, string file, List<(Face, double?)> checkFaces)
private static FileInfo? CheckFileThenGetFileInfo(string facesFileNameExtension, FilePath filePath, MappingFromItem mappingFromItem, string file, List<(Face, double?)> checkFaces)
{
FileInfo? result = null;
string checkFile;
@ -165,7 +165,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
mappedFaceDirectory = Path.GetDirectoryName(file);
if (mappedFaceDirectory is null)
throw new NotSupportedException();
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(filePath, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
checkFile = Path.Combine(mappedFaceDirectory, $"{deterministicHashCodeKey}{mappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}");
if (checkFile == file)
continue;
@ -201,10 +201,9 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
}
}
public void LookForMatchFacesAndPossiblyRename(string facesFileNameExtension, MappingFromItem mappingFromItem, List<Face> faces, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers)
public void LookForMatchFacesAndPossiblyRename(string facesFileNameExtension, FilePath filePath, MappingFromItem mappingFromItem, List<Face> faces, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers)
{
string? json;
string fileName;
string[] matches;
FileInfo? fileInfo;
List<Face> intersectFaces;
@ -215,10 +214,9 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
checkFaces.Clear();
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
{
if (_Renamed.Contains(locationContainer.File))
if (_Renamed.Contains(locationContainer.FilePath.FullName))
continue;
fileName = Path.GetFileName(locationContainer.File);
if (locationContainer.FromDistanceContent && _DuplicateMappedFaceFiles.Contains(fileName))
if (locationContainer.FromDistanceContent && _DuplicateMappedFaceFiles.Contains(locationContainer.FilePath.Name))
continue;
checkFaces.Clear();
if (locationContainer.Directories.Count == 0)
@ -231,7 +229,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
if (json is null)
{
if (_DistanceMoveUnableToMatch)
MoveUnableToMatch(locationContainer.File);
MoveUnableToMatch(locationContainer.FilePath);
continue;
}
if (filteredFaces.Length > 0)
@ -254,42 +252,42 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
if (checkFaces.Count == 0)
{
if (_DistanceMoveUnableToMatch)
MoveUnableToMatch(locationContainer.File);
MoveUnableToMatch(locationContainer.FilePath);
continue;
}
if (checkFaces.Count != 1)
{
if (_DistanceMoveUnableToMatch)
MoveUnableToMatch(locationContainer.File);
MoveUnableToMatch(locationContainer.FilePath);
continue;
}
fileInfo = CheckFileThenGetFileInfo(facesFileNameExtension, mappingFromItem, locationContainer.File, checkFaces);
fileInfo = CheckFileThenGetFileInfo(facesFileNameExtension, filePath, mappingFromItem, locationContainer.FilePath.FullName, checkFaces);
if (fileInfo is not null)
{
if (_DistanceRenameToMatch && fileInfo is not null)
{
if (fileInfo.Exists)
File.Delete(locationContainer.File);
File.Delete(locationContainer.FilePath.FullName);
else
File.Move(locationContainer.File, fileInfo.FullName);
File.WriteAllText($"{fileInfo.FullName}.old", $"{fileInfo.FullName}{Environment.NewLine}{locationContainer.File}");
_Renamed.Add(locationContainer.File);
File.Move(locationContainer.FilePath.FullName, fileInfo.FullName);
File.WriteAllText($"{fileInfo.FullName}.old", $"{fileInfo.FullName}{Environment.NewLine}{locationContainer.FilePath.FullName}");
_Renamed.Add(locationContainer.FilePath.FullName);
}
continue;
}
if (_AllMappedFaceFileNames.Contains(fileName))
if (_AllMappedFaceFileNames.Contains(locationContainer.FilePath.Name))
{
lock (_AllMappedFaceFiles)
matches = (from l in _AllMappedFaceFiles where l != locationContainer.File && Path.GetFileName(l) == fileName select l).ToArray();
matches = (from l in _AllMappedFaceFiles where l != locationContainer.FilePath.FullName && Path.GetFileName(l) == locationContainer.FilePath.Name select l).ToArray();
if (locationContainer.FromDistanceContent && matches.Length > 0)
AppendMatchingDuplicates(locationContainer.File, matches);
AppendMatchingDuplicates(locationContainer.FilePath.FullName, matches);
}
if (!locationContainer.FromDistanceContent)
continue;
lock (_AllMappedFaceFiles)
_AllMappedFaceFiles.Add(locationContainer.File);
_AllMappedFaceFiles.Add(locationContainer.FilePath.FullName);
lock (_AllMappedFaceFileNames)
_AllMappedFaceFileNames.Add(fileName);
_AllMappedFaceFileNames.Add(locationContainer.FilePath.Name);
}
}
@ -491,13 +489,13 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
List<FaceDistance> faceDistanceEncodings = [];
foreach (Record record in records)
{
files.Add(record.File);
files.Add(record.FilePath.FullName);
faceDistanceEncodings.Add(new(record.FaceRecognitionDotNetFaceEncoding));
}
foreach (Record record in records)
{
mappedRelations = [];
fileHolder = new(record.File);
fileHolder = Shared.Models.Stateless.Methods.IFileHolder.Get(record.FilePath.FullName);
if (files.Count > 1)
{
faceDistanceEncoding = new(record.FaceRecognitionDotNetFaceEncoding);
@ -538,7 +536,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
if (modelsFaceEncoding is null)
throw new NotSupportedException();
faceRecognitionDotNetFaceEncoding = FaceRecognition.LoadFaceEncoding(modelsFaceEncoding.RawEncoding);
records.Add(new(locationContainer.File, faceRecognitionDotNetFaceEncoding));
records.Add(new(locationContainer.FilePath, faceRecognitionDotNetFaceEncoding));
}
result = GetRelationCollections(faceDistancePermyriad, locationContainerDistanceTake, locationContainerDistanceTolerance, records);
return result;