Removed Rectangle from LocationContainer
mapped-ids-then-whole-percentages-to-location-container save-extracted-face save-extracted-java-script-object-notation
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Text.Json;
|
||||
using View_by_Distance.Shared.Models;
|
||||
using View_by_Distance.Shared.Models.Properties;
|
||||
using View_by_Distance.Shared.Models.Stateless;
|
||||
|
||||
namespace View_by_Distance.Distance.Models.Stateless;
|
||||
@ -8,27 +9,135 @@ namespace View_by_Distance.Distance.Models.Stateless;
|
||||
internal static class FaceEncodingLogic
|
||||
{
|
||||
|
||||
internal static ReadOnlyCollection<ExifDirectory> GetMappedExifDirectoryWithEncoding(ICompare compare, ReadOnlyCollection<ExifDirectory> exifDirectories)
|
||||
internal static void MoveUnableToMatch(FilePath filePath)
|
||||
{
|
||||
List<ExifDirectory> results = [];
|
||||
string? json;
|
||||
FaceEncoding? faceEncoding;
|
||||
ExifDirectory exifDirectory;
|
||||
FaceRecognitionDotNet.Models.FaceEncoding? encoding;
|
||||
string checkFile = $"{filePath.FullName}.unk";
|
||||
if (File.Exists(filePath.FullName) && !File.Exists(checkFile))
|
||||
File.Move(filePath.FullName, checkFile);
|
||||
}
|
||||
|
||||
internal static ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> GetMappedIdsThenWholePercentagesToLocationContainer(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections)
|
||||
{
|
||||
ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> results;
|
||||
List<LocationContainer?> locationContainers = [];
|
||||
int maxDegreeOfParallelism = compareSettings.MaxDegreeOfParallelism;
|
||||
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism };
|
||||
ReadOnlyCollection<ExifDirectory> exifDirectories = MappedLogicA.GetMapped(resultSettings,
|
||||
metadataSettings,
|
||||
peopleSettings,
|
||||
distanceSettings,
|
||||
compareSettings,
|
||||
compare,
|
||||
readOnlyCollections);
|
||||
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds);
|
||||
string message = $") Building Mapped with Encoding Face Files Collection - {totalSeconds} total second(s)";
|
||||
compare.ConstructProgressBar(exifDirectories.Count, message);
|
||||
foreach (ExifDirectory e in exifDirectories)
|
||||
_ = Parallel.For(0, exifDirectories.Count, parallelOptions, (i, state) =>
|
||||
LocationContainersParallelFor(distanceSettings, compareSettings, compare, exifDirectories, i, locationContainers));
|
||||
results = GetMappedIdsThenWholePercentagesToLocationContainer(locationContainers);
|
||||
return results;
|
||||
}
|
||||
|
||||
private static void LocationContainersParallelFor(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection<ExifDirectory> exifDirectories, int i, List<LocationContainer?> results)
|
||||
{
|
||||
compare.Tick();
|
||||
ExifDirectory exifDirectory = exifDirectories[i];
|
||||
LocationContainer? locationContainer = GetLocationContainer(distanceSettings, compareSettings, exifDirectory);
|
||||
results.Add(locationContainer);
|
||||
}
|
||||
|
||||
internal static LocationContainer? GetLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ExifDirectory exifDirectory)
|
||||
{
|
||||
LocationContainer? result;
|
||||
string? json;
|
||||
DateOnly dateOnly;
|
||||
FaceFile? faceFile;
|
||||
int? wholePercentages;
|
||||
FaceEncoding? faceEncoding;
|
||||
FaceRecognitionDotNet.Models.FaceEncoding? encoding;
|
||||
wholePercentages = IMapping.GetWholePercentages(compareSettings, exifDirectory.FilePath);
|
||||
if (wholePercentages is null)
|
||||
{
|
||||
compare.Tick();
|
||||
json = Metadata.Models.Stateless.IMetadata.GetFaceEncoding(e);
|
||||
faceEncoding = json is null ? null : JsonSerializer.Deserialize(json, FaceEncodingGenerationContext.Default.FaceEncoding);
|
||||
if (faceEncoding is null)
|
||||
continue;
|
||||
encoding = FaceRecognitionDotNet.Models.FaceRecognition.LoadFaceEncoding(faceEncoding.RawEncoding);
|
||||
exifDirectory = ExifDirectory.Get(encoding, e);
|
||||
results.Add(exifDirectory);
|
||||
if (distanceSettings.DistanceMoveUnableToMatch)
|
||||
MoveUnableToMatch(exifDirectory.FilePath);
|
||||
result = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
faceFile = GetFaceFile(distanceSettings, exifDirectory);
|
||||
if (faceFile is null)
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
dateOnly = DateOnly.FromDateTime(new DateTime(exifDirectory.FilePath.CreationTicks));
|
||||
json = Metadata.Models.Stateless.IMetadata.GetFaceEncoding(exifDirectory);
|
||||
faceEncoding = json is null ? null : JsonSerializer.Deserialize(json, FaceEncodingGenerationContext.Default.FaceEncoding);
|
||||
if (faceEncoding is null)
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
encoding = FaceRecognitionDotNet.Models.FaceRecognition.LoadFaceEncoding(faceEncoding.RawEncoding);
|
||||
result = new(CreationDateOnly: dateOnly,
|
||||
ExifDirectory: exifDirectory,
|
||||
Encoding: encoding,
|
||||
FaceFile: faceFile,
|
||||
FilePath: exifDirectory.FilePath,
|
||||
LengthPermyriad: null,
|
||||
LengthSource: null,
|
||||
PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName: exifDirectory.PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName,
|
||||
WholePercentages: wholePercentages);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static FaceFile? GetFaceFile(DistanceSettings distanceSettings, ExifDirectory exifDirectory)
|
||||
{
|
||||
FaceFile? result;
|
||||
string? json = Metadata.Models.Stateless.IMetadata.GetOutputResolution(exifDirectory);
|
||||
if (json is null || !json.Contains(nameof(DateTime)))
|
||||
{
|
||||
if (distanceSettings.DistanceMoveUnableToMatch)
|
||||
MoveUnableToMatch(exifDirectory.FilePath);
|
||||
result = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = JsonSerializer.Deserialize(json, FaceFileGenerationContext.Default.FaceFile);
|
||||
if (result is null || result.Location is null)
|
||||
{
|
||||
if (distanceSettings.DistanceMoveUnableToMatch)
|
||||
MoveUnableToMatch(exifDirectory.FilePath);
|
||||
result = null;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> GetMappedIdsThenWholePercentagesToLocationContainer(List<LocationContainer?> locationContainers)
|
||||
{
|
||||
Dictionary<int, ReadOnlyDictionary<int, LocationContainer>> results = [];
|
||||
int id;
|
||||
int wholePercentages;
|
||||
Dictionary<int, LocationContainer>? keyValue;
|
||||
Dictionary<int, Dictionary<int, LocationContainer>> keyValuePairs = [];
|
||||
foreach (LocationContainer? locationContainer in locationContainers)
|
||||
{
|
||||
if (locationContainer?.FilePath.Id is null || locationContainer.WholePercentages is null)
|
||||
continue;
|
||||
id = locationContainer.FilePath.Id.Value;
|
||||
wholePercentages = locationContainer.WholePercentages.Value;
|
||||
if (!keyValuePairs.TryGetValue(id, out keyValue))
|
||||
{
|
||||
keyValuePairs.Add(id, []);
|
||||
if (!keyValuePairs.TryGetValue(id, out keyValue))
|
||||
throw new Exception();
|
||||
}
|
||||
keyValue.Add(wholePercentages, locationContainer);
|
||||
}
|
||||
foreach (KeyValuePair<int, Dictionary<int, LocationContainer>> keyValuePair in keyValuePairs)
|
||||
results.Add(keyValuePair.Key, keyValuePair.Value.AsReadOnly());
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ internal static class FilterLogicA
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static ReadOnlyCollection<LocationContainer> GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary<int, ReadOnlyDictionary<int, FilePath>> keyValuePairs, ReadOnlyCollection<ExifDirectory> exifDirectories)
|
||||
internal static ReadOnlyCollection<LocationContainer> GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> mappedIdsThenWholePercentagesToLocationContainer, ReadOnlyCollection<ExifDirectory> exifDirectories)
|
||||
{
|
||||
List<LocationContainer> results = [];
|
||||
string? json;
|
||||
@ -41,8 +41,8 @@ internal static class FilterLogicA
|
||||
bool? isFocusPerson;
|
||||
bool? inSkipCollection;
|
||||
FaceEncoding? faceEncoding;
|
||||
ReadOnlyDictionary<int, FilePath>? keyValues;
|
||||
FaceRecognitionDotNet.Models.FaceEncoding? encoding;
|
||||
ReadOnlyDictionary<int, LocationContainer>? keyValues;
|
||||
List<FilePathAndWholePercentages>? wholePercentagesCollection;
|
||||
ReadOnlyCollection<LocationContainer> locationContainers = FilterLogicB.GetLocationContainers(distanceSettings, compareSettings, compare, exifDirectories, nameof(FilterLogicA));
|
||||
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds);
|
||||
@ -53,7 +53,7 @@ internal static class FilterLogicA
|
||||
compare.Tick();
|
||||
if (locationContainer.FilePath.Id is null || locationContainer.WholePercentages is null)
|
||||
continue;
|
||||
if (keyValuePairs.TryGetValue(locationContainer.FilePath.Id.Value, out keyValues))
|
||||
if (mappedIdsThenWholePercentagesToLocationContainer.TryGetValue(locationContainer.FilePath.Id.Value, out keyValues))
|
||||
{
|
||||
if (keyValues.ContainsKey(locationContainer.WholePercentages.Value))
|
||||
continue;
|
||||
@ -85,7 +85,7 @@ internal static class FilterLogicA
|
||||
if (faceEncoding is null)
|
||||
continue;
|
||||
encoding = FaceRecognitionDotNet.Models.FaceRecognition.LoadFaceEncoding(faceEncoding.RawEncoding);
|
||||
results.Add(LocationContainer.Get(locationContainer, encoding, keepExifDirectory: false));
|
||||
results.Add(LocationContainer.Get(locationContainer, encoding));
|
||||
}
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
@ -1,6 +1,4 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Drawing;
|
||||
using System.Text.Json;
|
||||
using View_by_Distance.Shared.Models;
|
||||
using View_by_Distance.Shared.Models.Properties;
|
||||
using View_by_Distance.Shared.Models.Stateless;
|
||||
@ -10,71 +8,30 @@ namespace View_by_Distance.Distance.Models.Stateless;
|
||||
internal static class FilterLogicB
|
||||
{
|
||||
|
||||
private static void MoveUnableToMatch(FilePath filePath)
|
||||
{
|
||||
string checkFile = $"{filePath.FullName}.unk";
|
||||
if (File.Exists(filePath.FullName) && !File.Exists(checkFile))
|
||||
File.Move(filePath.FullName, checkFile);
|
||||
}
|
||||
|
||||
private static void LocationContainersParallelFor(DistanceSettings distanceSettings, ICompareSettings compareSettings, List<LocationContainer> locationContainers, ExifDirectory exifDirectory)
|
||||
{
|
||||
string? json;
|
||||
if (exifDirectory.FilePath.Id is null)
|
||||
return;
|
||||
DateOnly dateOnly = DateOnly.FromDateTime(new DateTime(exifDirectory.FilePath.CreationTicks));
|
||||
int? wholePercentages = IMapping.GetWholePercentages(compareSettings, exifDirectory.FilePath);
|
||||
if (wholePercentages is null)
|
||||
{
|
||||
if (distanceSettings.DistanceMoveUnableToMatch)
|
||||
MoveUnableToMatch(exifDirectory.FilePath);
|
||||
return;
|
||||
}
|
||||
json = Metadata.Models.Stateless.IMetadata.GetOutputResolution(exifDirectory);
|
||||
if (json is null || !json.Contains(nameof(DateTime)))
|
||||
{
|
||||
if (distanceSettings.DistanceMoveUnableToMatch)
|
||||
MoveUnableToMatch(exifDirectory.FilePath);
|
||||
return;
|
||||
}
|
||||
FaceFile? faceFile = JsonSerializer.Deserialize(json, FaceFileGenerationContext.Default.FaceFile);
|
||||
if (faceFile is null || faceFile.Location is null)
|
||||
{
|
||||
if (distanceSettings.DistanceMoveUnableToMatch)
|
||||
MoveUnableToMatch(exifDirectory.FilePath);
|
||||
return;
|
||||
}
|
||||
RectangleF? rectangle = Shared.Models.Stateless.ILocation.GetPercentagesRectangle(distanceSettings, wholePercentages.Value);
|
||||
if (rectangle is null)
|
||||
return;
|
||||
LocationContainer locationContainer = new(CreationDateOnly: dateOnly,
|
||||
ExifDirectory: exifDirectory,
|
||||
Encoding: exifDirectory.Encoding,
|
||||
FaceFile: faceFile,
|
||||
FilePath: exifDirectory.FilePath,
|
||||
LengthPermyriad: null,
|
||||
LengthSource: null,
|
||||
PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName: exifDirectory.PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName,
|
||||
Rectangle: rectangle,
|
||||
WholePercentages: wholePercentages);
|
||||
lock (locationContainers)
|
||||
locationContainers.Add(locationContainer);
|
||||
}
|
||||
|
||||
internal static ReadOnlyCollection<LocationContainer> GetLocationContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection<ExifDirectory> exifDirectories, string sourceClass)
|
||||
{
|
||||
List<LocationContainer> results = [];
|
||||
int maxDegreeOfParallelism = compareSettings.MaxDegreeOfParallelism;
|
||||
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds);
|
||||
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism };
|
||||
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds);
|
||||
string message = $") Building LocationContainers Face Files Collection {sourceClass} - {totalSeconds} total second(s)";
|
||||
compare.ConstructProgressBar(exifDirectories.Count, message);
|
||||
_ = Parallel.For(0, exifDirectories.Count, parallelOptions, (i, state) =>
|
||||
{
|
||||
compare.Tick();
|
||||
LocationContainersParallelFor(distanceSettings, compareSettings, results, exifDirectories[i]);
|
||||
});
|
||||
LocationContainersParallelFor(distanceSettings, compareSettings, compare, exifDirectories, i, results));
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
||||
private static void LocationContainersParallelFor(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection<ExifDirectory> exifDirectories, int i, List<LocationContainer> results)
|
||||
{
|
||||
compare.Tick();
|
||||
ExifDirectory exifDirectory = exifDirectories[i];
|
||||
if (exifDirectory.FilePath.Id is null)
|
||||
return;
|
||||
LocationContainer? locationContainer = FaceEncodingLogic.GetLocationContainer(distanceSettings, compareSettings, exifDirectory);
|
||||
if (locationContainer is null)
|
||||
return;
|
||||
lock (results)
|
||||
results.Add(locationContainer);
|
||||
}
|
||||
|
||||
}
|
@ -24,22 +24,24 @@ internal static class FilterLogicC
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
||||
private static ReadOnlyCollection<LocationContainer> GetCombined(DistanceSettings distanceSettings, Shared.Models.Properties.ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection<ExifDirectory> exifDirectories, ReadOnlyCollection<LocationContainer> postFiltered)
|
||||
private static ReadOnlyCollection<LocationContainer> GetCombined(ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> mappedIdsThenWholePercentagesToLocationContainer, ReadOnlyCollection<LocationContainer> postFiltered)
|
||||
{
|
||||
List<LocationContainer> results = [];
|
||||
foreach (LocationContainer locationContainer in postFiltered)
|
||||
results.Add(locationContainer);
|
||||
ReadOnlyCollection<LocationContainer> locationContainers = FilterLogicB.GetLocationContainers(distanceSettings, compareSettings, compare, exifDirectories, nameof(FilterLogicC));
|
||||
foreach (LocationContainer locationContainer in locationContainers)
|
||||
results.Add(locationContainer);
|
||||
foreach (KeyValuePair<int, ReadOnlyDictionary<int, LocationContainer>> keyValuePair in mappedIdsThenWholePercentagesToLocationContainer)
|
||||
{
|
||||
foreach (KeyValuePair<int, LocationContainer> keyValue in keyValuePair.Value)
|
||||
results.Add(keyValue.Value);
|
||||
}
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
||||
internal static ReadOnlyCollection<LocationContainer> GetMatrixLocationContainers(DistanceSettings distanceSettings, Shared.Models.Properties.ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection<ExifDirectory> mappedExifDirectoryWithEncoding, DistanceLimits distanceLimits, ReadOnlyCollection<LocationContainer> postFiltered)
|
||||
internal static ReadOnlyCollection<LocationContainer> GetMatrixLocationContainers(DistanceSettings distanceSettings, ICompare compare, ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> mappedIdsThenWholePercentagesToLocationContainer, DistanceLimits distanceLimits, ReadOnlyCollection<LocationContainer> postFiltered)
|
||||
{
|
||||
List<LocationContainer> results = [];
|
||||
ReadOnlyCollection<LocationContainer> collection;
|
||||
ReadOnlyCollection<LocationContainer> locationContainers = GetCombined(distanceSettings, compareSettings, compare, mappedExifDirectoryWithEncoding, postFiltered);
|
||||
ReadOnlyCollection<LocationContainer> locationContainers = GetCombined(mappedIdsThenWholePercentagesToLocationContainer, postFiltered);
|
||||
string message = $") Building Matrix - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds)} total second(s)";
|
||||
compare.ConstructProgressBar(postFiltered.Count, message);
|
||||
foreach (LocationContainer locationContainer in postFiltered)
|
||||
|
@ -9,7 +9,7 @@ namespace View_by_Distance.Distance.Models.Stateless;
|
||||
public interface IDistance
|
||||
{
|
||||
|
||||
static string Get(bool saveIndividually, string forceSingleImageHumanized, int by, bool isDefaultName) =>
|
||||
public static string Get(bool saveIndividually, string forceSingleImageHumanized, int by, bool isDefaultName) =>
|
||||
$"{by switch
|
||||
{
|
||||
IMapLogic.Mapping => nameof(IMapLogic.Mapping),
|
||||
@ -23,55 +23,43 @@ public interface IDistance
|
||||
public static ReadOnlyDictionary<string, LocationContainer> GetOnlyOne(DistanceSettings distanceSettings, ReadOnlyCollection<LocationContainer> matrix) =>
|
||||
FilterLogicC.GetOnlyOne(distanceSettings, matrix);
|
||||
|
||||
public static ReadOnlyCollection<ExifDirectory> GetMappedExifDirectoryWithEncoding(ICompare compare, ReadOnlyCollection<ExifDirectory> exifDirectories) =>
|
||||
FaceEncodingLogic.GetMappedExifDirectoryWithEncoding(compare, exifDirectories);
|
||||
|
||||
public static ReadOnlyCollection<LocationContainer> GetPostFilterLocationContainer(ReadOnlyCollection<LocationContainer> preFiltered, DistanceLimits distanceLimits) =>
|
||||
FilterLogicC.GetPostFilterLocationContainer(preFiltered, distanceLimits);
|
||||
|
||||
public static ReadOnlyDictionary<int, ReadOnlyDictionary<int, FilePath>> Extract(ICompareSettings compareSettings, ReadOnlyCollection<ExifDirectory> exifDirectories) =>
|
||||
MappedLogicA.Extract(compareSettings, exifDirectories);
|
||||
|
||||
public static void SaveContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, int? updated, ReadOnlyCollection<SaveContainer> saveContainers) =>
|
||||
FilterLogicD.SaveContainers(distanceSettings, compareSettings, compare, updated, saveContainers);
|
||||
|
||||
public static ReadOnlyCollection<SaveContainer> GetSaveContainers(ResultSettings resultSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, string outputResolution, ReadOnlyDictionary<string, LocationContainer> onlyOne) =>
|
||||
FilterLogicD.GetSaveContainers(resultSettings, distanceSettings, compareSettings, compare, outputResolution, onlyOne);
|
||||
|
||||
public static ReadOnlyCollection<ExifDirectory> GetMapped(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections) =>
|
||||
MappedLogicA.GetMapped(resultSettings, metadataSettings, peopleSettings, distanceSettings, compareSettings, compare, readOnlyCollections);
|
||||
public static ReadOnlyCollection<LocationContainer> GetMatrixLocationContainers(DistanceSettings distanceSettings, ICompare compare, ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> mappedIdsThenWholePercentagesToLocationContainer, DistanceLimits distanceLimits, ReadOnlyCollection<LocationContainer> postFiltered) =>
|
||||
FilterLogicC.GetMatrixLocationContainers(distanceSettings, compare, mappedIdsThenWholePercentagesToLocationContainer, distanceLimits, postFiltered);
|
||||
|
||||
public static ReadOnlyCollection<LocationContainer> GetMatrixLocationContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection<ExifDirectory> mappedExifDirectoryWithEncoding, DistanceLimits distanceLimits, ReadOnlyCollection<LocationContainer> postFiltered) =>
|
||||
FilterLogicC.GetMatrixLocationContainers(distanceSettings, compareSettings, compare, mappedExifDirectoryWithEncoding, distanceLimits, postFiltered);
|
||||
public static ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> GetMappedIdsThenWholePercentagesToLocationContainer(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections) =>
|
||||
FaceEncodingLogic.GetMappedIdsThenWholePercentagesToLocationContainer(resultSettings, metadataSettings, peopleSettings, distanceSettings, compareSettings, compare, readOnlyCollections);
|
||||
|
||||
public static ReadOnlyCollection<LocationContainer> GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary<int, ReadOnlyDictionary<int, FilePath>> keyValuePairs, ReadOnlyCollection<ExifDirectory> exifDirectories) =>
|
||||
FilterLogicA.GetPreFilterLocationContainer(distanceSettings, compareSettings, compare, readOnlyCollections, keyValuePairs, exifDirectories);
|
||||
public static ReadOnlyCollection<LocationContainer> GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> mappedIdsThenWholePercentagesToLocationContainer, ReadOnlyCollection<ExifDirectory> exifDirectories) =>
|
||||
FilterLogicA.GetPreFilterLocationContainer(distanceSettings, compareSettings, compare, readOnlyCollections, mappedIdsThenWholePercentagesToLocationContainer, exifDirectories);
|
||||
|
||||
internal static ReadOnlyDictionary<string, LocationContainer> TestStatic_GetOnlyOne(DistanceSettings distanceSettings, ReadOnlyCollection<LocationContainer> matrix) =>
|
||||
GetOnlyOne(distanceSettings, matrix);
|
||||
|
||||
internal static ReadOnlyCollection<ExifDirectory> TestStatic_GetMappedExifDirectoryWithEncoding(ICompare compare, ReadOnlyCollection<ExifDirectory> exifDirectories) =>
|
||||
GetMappedExifDirectoryWithEncoding(compare, exifDirectories);
|
||||
|
||||
internal static ReadOnlyCollection<LocationContainer> TestStatic_GetPostFilterLocationContainer(ReadOnlyCollection<LocationContainer> preFiltered, DistanceLimits distanceLimits) =>
|
||||
GetPostFilterLocationContainer(preFiltered, distanceLimits);
|
||||
|
||||
internal static ReadOnlyDictionary<int, ReadOnlyDictionary<int, FilePath>> TestStatic_Extract(ICompareSettings compareSettings, ReadOnlyCollection<ExifDirectory> exifDirectories) =>
|
||||
Extract(compareSettings, exifDirectories);
|
||||
|
||||
internal static void TestStatic_SaveContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, int? updated, ReadOnlyCollection<SaveContainer> saveContainers) =>
|
||||
SaveContainers(distanceSettings, compareSettings, compare, updated, saveContainers);
|
||||
|
||||
internal static ReadOnlyCollection<SaveContainer> TestStatic_GetSaveContainers(ResultSettings resultSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, string outputResolution, ReadOnlyDictionary<string, LocationContainer> onlyOne) =>
|
||||
GetSaveContainers(resultSettings, distanceSettings, compareSettings, compare, outputResolution, onlyOne);
|
||||
|
||||
internal static ReadOnlyCollection<ExifDirectory> TestStatic_GetMapped(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections) =>
|
||||
GetMapped(resultSettings, metadataSettings, peopleSettings, distanceSettings, compareSettings, compare, readOnlyCollections);
|
||||
internal static ReadOnlyCollection<LocationContainer> TestStatic_GetMatrixLocationContainers(DistanceSettings distanceSettings, ICompare compare, ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> mappedIdsThenWholePercentagesToLocationContainer, DistanceLimits distanceLimits, ReadOnlyCollection<LocationContainer> postFiltered) =>
|
||||
GetMatrixLocationContainers(distanceSettings, compare, mappedIdsThenWholePercentagesToLocationContainer, distanceLimits, postFiltered);
|
||||
|
||||
internal static ReadOnlyCollection<LocationContainer> TestStatic_GetMatrixLocationContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection<ExifDirectory> mappedExifDirectoryWithEncoding, DistanceLimits distanceLimits, ReadOnlyCollection<LocationContainer> postFiltered) =>
|
||||
GetMatrixLocationContainers(distanceSettings, compareSettings, compare, mappedExifDirectoryWithEncoding, distanceLimits, postFiltered);
|
||||
internal static ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> TestStatic_GetMappedIdsThenWholePercentagesToLocationContainer(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections) =>
|
||||
GetMappedIdsThenWholePercentagesToLocationContainer(resultSettings, metadataSettings, peopleSettings, distanceSettings, compareSettings, compare, readOnlyCollections);
|
||||
|
||||
internal static ReadOnlyCollection<LocationContainer> TestStatic_GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary<int, ReadOnlyDictionary<int, FilePath>> keyValuePairs, ReadOnlyCollection<ExifDirectory> exifDirectories) =>
|
||||
GetPreFilterLocationContainer(distanceSettings, compareSettings, compare, readOnlyCollections, keyValuePairs, exifDirectories);
|
||||
internal static ReadOnlyCollection<LocationContainer> TestStatic_GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary<int, ReadOnlyDictionary<int, LocationContainer>> mappedIdsThenWholePercentagesToLocationContainer, ReadOnlyCollection<ExifDirectory> exifDirectories) =>
|
||||
GetPreFilterLocationContainer(distanceSettings, compareSettings, compare, readOnlyCollections, mappedIdsThenWholePercentagesToLocationContainer, exifDirectories);
|
||||
|
||||
}
|
@ -14,32 +14,6 @@ internal static class MappedLogicA
|
||||
string? PersonDisplayDirectoryName,
|
||||
FilePath FilePath);
|
||||
|
||||
internal static ReadOnlyDictionary<int, ReadOnlyDictionary<int, FilePath>> Extract(ICompareSettings compareSettings, ReadOnlyCollection<ExifDirectory> exifDirectories)
|
||||
{
|
||||
Dictionary<int, ReadOnlyDictionary<int, FilePath>> results = [];
|
||||
int? wholePercentages;
|
||||
Dictionary<int, FilePath>? keyValues;
|
||||
Dictionary<int, Dictionary<int, FilePath>> keyValuePairs = [];
|
||||
foreach (ExifDirectory exifDirectory in exifDirectories)
|
||||
{
|
||||
if (exifDirectory.FilePath.Id is null)
|
||||
continue;
|
||||
if (!keyValuePairs.TryGetValue(exifDirectory.FilePath.Id.Value, out keyValues))
|
||||
{
|
||||
keyValuePairs.Add(exifDirectory.FilePath.Id.Value, []);
|
||||
if (!keyValuePairs.TryGetValue(exifDirectory.FilePath.Id.Value, out keyValues))
|
||||
throw new Exception();
|
||||
}
|
||||
wholePercentages = IMapping.GetWholePercentages(compareSettings, exifDirectory.FilePath);
|
||||
if (wholePercentages is null)
|
||||
continue;
|
||||
keyValues.Add(wholePercentages.Value, exifDirectory.FilePath);
|
||||
}
|
||||
foreach (KeyValuePair<int, Dictionary<int, FilePath>> keyValuePair in keyValuePairs)
|
||||
results.Add(keyValuePair.Key, keyValuePair.Value.AsReadOnly());
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
||||
internal static ReadOnlyCollection<ExifDirectory> GetMapped(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections)
|
||||
{
|
||||
List<ExifDirectory> results = [];
|
||||
|
Reference in New Issue
Block a user