Filter same id
RelationLogic LookForAbandoned
This commit is contained in:
@ -12,13 +12,7 @@ namespace View_by_Distance.Distance.Models;
|
||||
public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
{
|
||||
|
||||
internal record Mapped(string File,
|
||||
double? Length,
|
||||
string Link,
|
||||
string Image);
|
||||
|
||||
internal record Record(string File,
|
||||
FaceRecognitionDotNet.FaceEncoding FaceRecognitionDotNetFaceEncoding);
|
||||
internal record Record(string File, FaceRecognitionDotNet.FaceEncoding FaceRecognitionDotNetFaceEncoding);
|
||||
|
||||
private readonly List<string> _Moved;
|
||||
private readonly List<double?> _Debug;
|
||||
@ -446,10 +440,10 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
continue;
|
||||
if (faceDistanceContainer.Face.Mapping.MappingFromFilterPre.InSkipCollection is not null && faceDistanceContainer.Face.Mapping.MappingFromFilterPre.InSkipCollection.Value)
|
||||
throw new NotSupportedException(nameof(PreFilterSetFaceDistances));
|
||||
if (faceDistanceContainer.Face.Mapping.MappingFromFilterPre.IsFocusModel is not null && faceDistanceContainer.Face.Mapping.MappingFromFilterPre.IsFocusModel.Value)
|
||||
throw new NotSupportedException(nameof(PreFilterSetFaceDistances));
|
||||
if (faceDistanceContainer.Face.Mapping.MappingFromFilterPre.IsFocusRelativePath is not null && faceDistanceContainer.Face.Mapping.MappingFromFilterPre.IsFocusRelativePath.Value)
|
||||
throw new NotSupportedException(nameof(PreFilterSetFaceDistances));
|
||||
if (faceDistanceContainer.Face.Mapping.MappingFromFilterPre.IsFocusModel is not null && !faceDistanceContainer.Face.Mapping.MappingFromFilterPre.IsFocusModel.Value)
|
||||
continue;
|
||||
if (faceDistanceContainer.Face.Mapping.MappingFromFilterPre.IsFocusRelativePath is not null && !faceDistanceContainer.Face.Mapping.MappingFromFilterPre.IsFocusRelativePath.Value)
|
||||
continue;
|
||||
if (faceDistanceContainer.Face.Mapping.MappingFromFilterPost.InSkipCollection is not null && faceDistanceContainer.Face.Mapping.MappingFromFilterPost.InSkipCollection.Value)
|
||||
continue;
|
||||
if (faceDistanceContainer.Face.Mapping.MappingFromFilterPost.IsFocusPerson is not null && !faceDistanceContainer.Face.Mapping.MappingFromFilterPost.IsFocusPerson.Value)
|
||||
@ -489,122 +483,27 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
return new(results);
|
||||
}
|
||||
|
||||
private static void WriteVsCodeFiles(string eDistanceContentDirectory, string? displayDirectoryName, string directory)
|
||||
private static ReadOnlyCollection<RelationContainer> GetRelationCollections(int faceDistancePermyriad, int locationContainerDistanceTake, float distanceTolerance, List<Record> records)
|
||||
{
|
||||
string json;
|
||||
string vsCodeDirectory = Path.Combine(directory, ".vscode");
|
||||
if (!Directory.Exists(vsCodeDirectory))
|
||||
_ = Directory.CreateDirectory(vsCodeDirectory);
|
||||
if (displayDirectoryName is not null)
|
||||
File.WriteAllText(Path.Combine(directory, $"_ {displayDirectoryName}.txt"), string.Empty);
|
||||
json = "{ \"[markdown]\": { \"editor.wordWrap\": \"off\" }, \"foam.links.hover.enable\": false, \"foam.graph.style\": { \"background\": \"#202020\", \"node\": { \"note\": \"#f2cb1d\", \"distance\": \"green\", \"image\": \"orange\", \"placeholder\": \"white\", } } }";
|
||||
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(Path.Combine(vsCodeDirectory, "settings.json"), json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null);
|
||||
json = string.Concat("{ \"version\": \"2.0.0\", \"tasks\": [ { \"label\": \"MKLink\", \"type\": \"shell\", \"command\": \"New-Item\", \"args\": [ \"-ItemType\", \"Junction\", \"-Path\", \"'", directory.Replace('\\', '/'), "/()'\", \"-Target\", \"'", eDistanceContentDirectory.Replace('\\', '/'), "'\" ], \"problemMatcher\": [] } ] }");
|
||||
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(Path.Combine(vsCodeDirectory, "tasks.json"), json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null);
|
||||
}
|
||||
|
||||
private static void MoveFiles(string locationContainerDebugDirectory, bool isCounterPersonYear, string? displayDirectoryName, Dictionary<string, int> keyValuePairs, List<string> linkedOnce, List<string> linkedTwice, List<string> linkedThrice, List<string> linkedFour, List<string> linkedFive)
|
||||
{
|
||||
string checkFile;
|
||||
string debugFile;
|
||||
string checkDirectory;
|
||||
string? yearDirectory;
|
||||
string? personNameDirectory;
|
||||
string? maybeTicksDirectoryName;
|
||||
string? personNameDirectoryName;
|
||||
string? personKeyFormattedDirectory;
|
||||
foreach (string file in linkedOnce)
|
||||
keyValuePairs[file] += 1;
|
||||
foreach (string file in linkedTwice)
|
||||
keyValuePairs[file] += 1;
|
||||
foreach (string file in linkedThrice)
|
||||
keyValuePairs[file] += 1;
|
||||
foreach (string file in linkedFour)
|
||||
keyValuePairs[file] += 1;
|
||||
foreach (string file in linkedFive)
|
||||
keyValuePairs[file] += 1;
|
||||
foreach (KeyValuePair<string, int> keyValuePair in keyValuePairs)
|
||||
{
|
||||
personNameDirectory = Path.GetDirectoryName(keyValuePair.Key);
|
||||
yearDirectory = Path.GetDirectoryName(personNameDirectory);
|
||||
personNameDirectoryName = Path.GetFileName(personNameDirectory);
|
||||
personKeyFormattedDirectory = Path.GetDirectoryName(yearDirectory);
|
||||
maybeTicksDirectoryName = Path.GetFileName(personKeyFormattedDirectory);
|
||||
if (string.IsNullOrEmpty(personNameDirectory) || string.IsNullOrEmpty(yearDirectory) || string.IsNullOrEmpty(personKeyFormattedDirectory) || string.IsNullOrEmpty(personNameDirectoryName))
|
||||
continue;
|
||||
if (maybeTicksDirectoryName == locationContainerDebugDirectory)
|
||||
checkDirectory = Path.Combine(yearDirectory, $"{keyValuePair.Value}{new string(Convert.ToChar(65 + keyValuePair.Value), 7)}");
|
||||
else
|
||||
{
|
||||
if (!string.IsNullOrEmpty(locationContainerDebugDirectory))
|
||||
continue;
|
||||
checkDirectory = Path.Combine(personKeyFormattedDirectory, $"{keyValuePair.Value}{new string(Convert.ToChar(65 + keyValuePair.Value), 7)}");
|
||||
}
|
||||
if (maybeTicksDirectoryName != locationContainerDebugDirectory)
|
||||
{
|
||||
if (isCounterPersonYear || string.IsNullOrEmpty(displayDirectoryName))
|
||||
checkDirectory = Path.Combine(checkDirectory, personNameDirectoryName);
|
||||
else
|
||||
checkDirectory = Path.Combine(checkDirectory, displayDirectoryName[0].ToString());
|
||||
}
|
||||
if (checkDirectory == personNameDirectory)
|
||||
continue;
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
checkFile = Path.Combine(checkDirectory, Path.GetFileName(keyValuePair.Key));
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(keyValuePair.Key, checkFile);
|
||||
debugFile = $"{keyValuePair.Key[..^4]}.gif";
|
||||
if (File.Exists(debugFile))
|
||||
{
|
||||
checkFile = Path.Combine(checkDirectory, $"{Path.GetFileName(keyValuePair.Key)[..^4]}.gif");
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(debugFile, checkFile);
|
||||
}
|
||||
if (maybeTicksDirectoryName == locationContainerDebugDirectory && !string.IsNullOrEmpty(displayDirectoryName))
|
||||
{
|
||||
checkDirectory = Path.Combine(checkDirectory, displayDirectoryName);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void SaveMappedForOutputResolutions(string locationContainerDebugDirectory, string eDistanceContentDirectory, float distanceTolerance, long personKey, bool isCounterPersonYear, string personKeyFormatted, string? displayDirectoryName, List<Record> records, string directory)
|
||||
{
|
||||
int years;
|
||||
string text;
|
||||
List<RelationContainer> results = new();
|
||||
string fileName;
|
||||
FileInfo fileInfo;
|
||||
FileHolder fileHolder;
|
||||
int distancePermyriad;
|
||||
List<string> files = new();
|
||||
List<string> lines = new();
|
||||
List<Mapped> results = new();
|
||||
List<string> linkedFive = new();
|
||||
List<string> linkedFour = new();
|
||||
List<string> linkedOnce = new();
|
||||
long ticks = DateTime.Now.Ticks;
|
||||
string fileNameWithoutExtension;
|
||||
List<string> linkedTwice = new();
|
||||
List<string> linkedThrice = new();
|
||||
FaceDistance? faceDistanceEncoding;
|
||||
List<string> relativePaths = new();
|
||||
List<Relation> mappedRelations;
|
||||
List<FaceDistance> faceDistanceLengths;
|
||||
Uri uri = new(eDistanceContentDirectory);
|
||||
Dictionary<string, int> keyValuePairs = new();
|
||||
List<FaceDistance> faceDistanceEncodings = new();
|
||||
foreach (Record record in records)
|
||||
{
|
||||
files.Add(record.File);
|
||||
relativePaths.Add(uri.MakeRelativeUri(new(record.File)).OriginalString);
|
||||
faceDistanceEncodings.Add(new(record.FaceRecognitionDotNetFaceEncoding));
|
||||
}
|
||||
foreach (Record record in records)
|
||||
{
|
||||
lines.Clear();
|
||||
results.Clear();
|
||||
fileInfo = new(record.File);
|
||||
mappedRelations = new();
|
||||
fileHolder = new(record.File);
|
||||
if (files.Count > 1)
|
||||
{
|
||||
faceDistanceEncoding = new(record.FaceRecognitionDotNetFaceEncoding);
|
||||
@ -613,77 +512,25 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
faceDistanceLengths = FaceRecognition.FaceDistances(new(faceDistanceEncodings), faceDistanceEncoding);
|
||||
for (int i = 0; i < faceDistanceLengths.Count; i++)
|
||||
{
|
||||
fileName = Path.GetFileName(relativePaths[i]);
|
||||
if (fileName == fileInfo.Name)
|
||||
fileName = Path.GetFileName(files[i]);
|
||||
if (fileName == fileHolder.Name)
|
||||
continue;
|
||||
FaceDistance faceDistance = faceDistanceLengths[i];
|
||||
if (faceDistance.Length > distanceTolerance)
|
||||
if (faceDistance.Length is null || faceDistance.Length.Value > distanceTolerance)
|
||||
continue;
|
||||
fileNameWithoutExtension = Path.GetFileNameWithoutExtension(Path.GetFileNameWithoutExtension(fileName));
|
||||
results.Add(new(files[i], faceDistance.Length, $"[[{fileNameWithoutExtension}]]", $""));
|
||||
distancePermyriad = (int)(faceDistance.Length.Value * faceDistancePermyriad);
|
||||
mappedRelations.Add(new(distancePermyriad, files[i]));
|
||||
}
|
||||
}
|
||||
results = (from l in results orderby l.Length select l).Take(3).ToList();
|
||||
keyValuePairs.Add(record.File, results.Count);
|
||||
foreach (Mapped mapped in results)
|
||||
{
|
||||
if (!linkedOnce.Contains(mapped.File))
|
||||
{
|
||||
linkedOnce.Add(mapped.File);
|
||||
continue;
|
||||
}
|
||||
if (!linkedTwice.Contains(mapped.File))
|
||||
{
|
||||
linkedTwice.Add(mapped.File);
|
||||
continue;
|
||||
}
|
||||
if (!linkedThrice.Contains(mapped.File))
|
||||
{
|
||||
linkedThrice.Add(mapped.File);
|
||||
continue;
|
||||
}
|
||||
if (!linkedFour.Contains(mapped.File))
|
||||
{
|
||||
linkedFour.Add(mapped.File);
|
||||
continue;
|
||||
}
|
||||
if (!linkedFive.Contains(mapped.File))
|
||||
{
|
||||
linkedFive.Add(mapped.File);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (isCounterPersonYear)
|
||||
(years, _) = Shared.Models.Stateless.Methods.IAge.GetAge(ticks, fileInfo.CreationTime.Ticks);
|
||||
else
|
||||
(years, _) = Shared.Models.Stateless.Methods.IAge.GetAge(fileInfo.CreationTime.Ticks, personKey);
|
||||
fileNameWithoutExtension = Path.GetFileNameWithoutExtension(Path.GetFileNameWithoutExtension(fileInfo.Name));
|
||||
lines.Add("---");
|
||||
lines.Add("type: \"distance\"");
|
||||
lines.Add("---");
|
||||
lines.Add(string.Empty);
|
||||
if (displayDirectoryName is null)
|
||||
lines.Add($"## {personKeyFormatted}");
|
||||
else
|
||||
lines.Add($"## {displayDirectoryName}");
|
||||
lines.Add(string.Empty);
|
||||
lines.Add($").OriginalString})");
|
||||
lines.Add($"__{fileNameWithoutExtension}__");
|
||||
if (isCounterPersonYear)
|
||||
lines.Add($"#{years}yrs-ago");
|
||||
else
|
||||
lines.Add($"#{years}yrs-old");
|
||||
lines.Add(string.Empty);
|
||||
lines.AddRange(results.Select(l => $"{l.Image}{Environment.NewLine}{l.Link}{Environment.NewLine}"));
|
||||
text = string.Join(Environment.NewLine, lines);
|
||||
if (!Shared.Models.Stateless.Methods.IPath.WriteAllText(Path.Combine(directory, $"{fileNameWithoutExtension}.md"), text, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null))
|
||||
continue;
|
||||
mappedRelations = (from l in mappedRelations orderby l.DistancePermyriad select l).Take(locationContainerDistanceTake).ToList();
|
||||
results.Add(new(fileHolder, new(mappedRelations)));
|
||||
}
|
||||
MoveFiles(locationContainerDebugDirectory, isCounterPersonYear, displayDirectoryName, keyValuePairs, linkedOnce, linkedTwice, linkedThrice, linkedFour, linkedFive);
|
||||
return new(results);
|
||||
}
|
||||
|
||||
void IDistance<MetadataExtractor.Directory>.SaveMappedForOutputResolutions(string locationContainerDebugDirectory, string a2PeopleContentDirectory, string eDistanceContentDirectory, float locationContainerDistanceTolerance, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers, long personKey, bool isCounterPersonYear, string personKeyFormatted, string? displayDirectoryName)
|
||||
ReadOnlyCollection<RelationContainer> IDistance<MetadataExtractor.Directory>.GetRelationContainers(int faceDistancePermyriad, int locationContainerDistanceTake, float locationContainerDistanceTolerance, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers)
|
||||
{
|
||||
ReadOnlyCollection<RelationContainer> result;
|
||||
string? json;
|
||||
List<Record> records = new();
|
||||
Shared.Models.FaceEncoding? modelsFaceEncoding;
|
||||
@ -699,15 +546,8 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
faceRecognitionDotNetFaceEncoding = FaceRecognition.LoadFaceEncoding(modelsFaceEncoding.RawEncoding);
|
||||
records.Add(new(locationContainer.File, faceRecognitionDotNetFaceEncoding));
|
||||
}
|
||||
string directory = Path.Combine(a2PeopleContentDirectory, locationContainerDistanceTolerance.ToString(), personKeyFormatted);
|
||||
if (!Directory.Exists(directory))
|
||||
_ = Directory.CreateDirectory(directory);
|
||||
if (records.Count > 0)
|
||||
{
|
||||
WriteVsCodeFiles(eDistanceContentDirectory, displayDirectoryName, directory);
|
||||
SaveMappedForOutputResolutions(locationContainerDebugDirectory, eDistanceContentDirectory, locationContainerDistanceTolerance, personKey, isCounterPersonYear, personKeyFormatted, displayDirectoryName, records, directory);
|
||||
}
|
||||
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(directory);
|
||||
result = GetRelationCollections(faceDistancePermyriad, locationContainerDistanceTake, locationContainerDistanceTolerance, records);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user