Made PhotoPrism dynamic

This commit is contained in:
Mike Phares 2022-12-27 10:22:23 -07:00
parent e5dc8c1c05
commit b5ff1b202c
10 changed files with 58 additions and 57 deletions

View File

@ -269,7 +269,7 @@ public partial class E_Distance
return results; return results;
} }
public void LookForMatchFacesAndPossiblyRename(string facesFileNameExtension, string? eDistanceContentDirectory, MappingFromItem mappingFromItem, List<Face> faces, List<(string MappedFaceFile, int NormalizedRectangle, IReadOnlyList<MetadataExtractor.Directory>? Directories)> collection) public void LookForMatchFacesAndPossiblyRename(string facesFileNameExtension, string eDistanceContentDirectory, MappingFromItem mappingFromItem, List<Face> faces, List<(string MappedFaceFile, int NormalizedRectangle, IReadOnlyList<MetadataExtractor.Directory>? Directories)> collection)
{ {
string? json; string? json;
string[] matches; string[] matches;
@ -295,7 +295,7 @@ public partial class E_Distance
json = Metadata.Models.Stateless.IMetadata.GetFaceEncoding(directories); json = Metadata.Models.Stateless.IMetadata.GetFaceEncoding(directories);
if (json is null) if (json is null)
{ {
if (!string.IsNullOrEmpty(eDistanceContentDirectory) && _DistanceMoveUnableToMatch) if (_DistanceMoveUnableToMatch)
MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName); MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName);
continue; continue;
} }
@ -312,13 +312,13 @@ public partial class E_Distance
} }
if (!checkFaces.Any()) if (!checkFaces.Any())
{ {
if (!string.IsNullOrEmpty(eDistanceContentDirectory) && _DistanceMoveUnableToMatch) if (_DistanceMoveUnableToMatch)
MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName); MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName);
continue; continue;
} }
if (checkFaces.Count != 1) if (checkFaces.Count != 1)
{ {
if (!string.IsNullOrEmpty(eDistanceContentDirectory) && _DistanceMoveUnableToMatch) if (_DistanceMoveUnableToMatch)
MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName); MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName);
continue; continue;
} }

View File

@ -272,7 +272,6 @@ public partial class DlibDotNet
configuration.MappingDefaultName, configuration.MappingDefaultName,
configuration.PersonBirthdayFirstYear, configuration.PersonBirthdayFirstYear,
configuration.PersonBirthdayFormat, configuration.PersonBirthdayFormat,
configuration.PhotoPrismDirectory,
configuration.RangeDaysDeltaTolerance, configuration.RangeDaysDeltaTolerance,
configuration.RangeDistanceTolerance, configuration.RangeDistanceTolerance,
configuration.SortingMaximumPerKey, configuration.SortingMaximumPerKey,
@ -283,7 +282,7 @@ public partial class DlibDotNet
return result; return result;
} }
private void FullParallelForWork(A_Property propertyLogic, Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> idToMappedFaceFilesWithCollection, string outputResolution, string bResultsFullGroupDirectory, string cResultsFullGroupDirectory, string dResultsDateGroupDirectory, string dResultsFullGroupDirectory, string? eDistanceContentDirectory, List<Tuple<string, DateTime>> sourceDirectoryChanges, List<FileHolder?> propertyFileHolderCollection, List<Shared.Models.Property?> propertyCollection, List<List<KeyValuePair<string, string>>> metadataCollections, List<Dictionary<string, int[]>> resizeKeyValuePairs, List<List<Shared.Models.Face>> imageFaceCollections, Container container, int index, Item item, DateTime[] containerDateTimes) private void FullParallelForWork(A_Property propertyLogic, Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> idToMappedFaceFilesWithCollection, string outputResolution, string bResultsFullGroupDirectory, string cResultsFullGroupDirectory, string dResultsDateGroupDirectory, string dResultsFullGroupDirectory, string eDistanceContentDirectory, List<Tuple<string, DateTime>> sourceDirectoryChanges, List<FileHolder?> propertyFileHolderCollection, List<Shared.Models.Property?> propertyCollection, List<List<KeyValuePair<string, string>>> metadataCollections, List<Dictionary<string, int[]>> resizeKeyValuePairs, List<List<Shared.Models.Face>> imageFaceCollections, Container container, int index, Item item, DateTime[] containerDateTimes)
{ {
if (_Log is null) if (_Log is null)
throw new NullReferenceException(nameof(_Log)); throw new NullReferenceException(nameof(_Log));
@ -408,7 +407,7 @@ public partial class DlibDotNet
string cResultsFullGroupDirectory, string cResultsFullGroupDirectory,
string dResultsDateGroupDirectory, string dResultsDateGroupDirectory,
string dResultsFullGroupDirectory, string dResultsFullGroupDirectory,
string? eDistanceContentDirectory, string eDistanceContentDirectory,
List<Tuple<string, DateTime>> sourceDirectoryChanges, List<Tuple<string, DateTime>> sourceDirectoryChanges,
List<FileHolder?> propertyFileHolderCollection, List<FileHolder?> propertyFileHolderCollection,
List<Shared.Models.Property?> propertyCollection, List<Shared.Models.Property?> propertyCollection,
@ -854,7 +853,7 @@ public partial class DlibDotNet
return items; return items;
} }
private void MapLogic(string argZero, long ticks, Container[] containers, string a2PeopleSingletonDirectory, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, MapLogicSupport mapLogicSupport, MapLogic mapLogic, string outputResolution) private void MapLogic(string argZero, long ticks, Container[] containers, string a2PeopleSingletonDirectory, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, string fPhotoPrismContentDirectory, MapLogicSupport mapLogicSupport, MapLogic mapLogic, string outputResolution)
{ {
int? useFiltersCounter = null; int? useFiltersCounter = null;
SortingContainer[] sortingContainers; SortingContainer[] sortingContainers;
@ -864,8 +863,8 @@ public partial class DlibDotNet
Mapping[] mappingCollection = MapLogicSupport.GetSelectedMappingCollection(distinctFilteredFaces); Mapping[] mappingCollection = MapLogicSupport.GetSelectedMappingCollection(distinctFilteredFaces);
string dFacesCollectionDirectory = Path.Combine(dResultsFullGroupDirectory, "[]", _Configuration.PropertyConfiguration.ResultAllInOne); string dFacesCollectionDirectory = Path.Combine(dResultsFullGroupDirectory, "[]", _Configuration.PropertyConfiguration.ResultAllInOne);
(Dictionary<long, int> personKeyToCount, int totalNotMapped) = mapLogic.AddToMapping(mappingCollection); (Dictionary<long, int> personKeyToCount, int totalNotMapped) = mapLogic.AddToMapping(mappingCollection);
if (!string.IsNullOrEmpty(_Configuration.PhotoPrismDirectory) && Directory.Exists(_Configuration.PhotoPrismDirectory)) if (Directory.Exists(fPhotoPrismContentDirectory))
F_PhotoPrism.WriteMatches(_Configuration.PhotoPrismDirectory, _Configuration.PersonBirthdayFormat, ticks, distinctFilteredFaces, mapLogic); F_PhotoPrism.WriteMatches(fPhotoPrismContentDirectory, _Configuration.PersonBirthdayFormat, ticks, distinctFilteredFaces, mapLogic);
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution)) if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
{ {
List<Item> filteredItems = GetItems(argZero, containers); List<Item> filteredItems = GetItems(argZero, containers);
@ -1013,7 +1012,7 @@ public partial class DlibDotNet
collection.Add(new(value.MappedFaceFile, normalizedRectangle.Value, directories)); collection.Add(new(value.MappedFaceFile, normalizedRectangle.Value, directories));
} }
private Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> GetCollection(long ticks, string? a2PeopleContentDirectory, string? eDistanceContentDirectory) private Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> GetCollection(long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory)
{ {
Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> results = new(); Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> results = new();
int? id; int? id;
@ -1052,18 +1051,14 @@ public partial class DlibDotNet
int t; int t;
Container[] containers; Container[] containers;
string? a2PeopleContentDirectory; string? a2PeopleContentDirectory;
string eDistanceContentDirectory;
string aResultsFullGroupDirectory; string aResultsFullGroupDirectory;
string bResultsFullGroupDirectory; string bResultsFullGroupDirectory;
string cResultsFullGroupDirectory; string cResultsFullGroupDirectory;
string dResultsFullGroupDirectory; string dResultsFullGroupDirectory;
string? eDistanceContentDirectory;
string d2ResultsFullGroupDirectory; string d2ResultsFullGroupDirectory;
if (!string.IsNullOrEmpty(_Configuration.PhotoPrismDirectory) && Directory.Exists(_Configuration.PhotoPrismDirectory)) string fPhotoPrismContentDirectory;
{ string fPhotoPrismSingletonDirectory;
Dictionary<string, List<MappingFromPhotoPrism>> fileNameToCollection = F_PhotoPrism.GetFileNameToCollection(_Configuration.PhotoPrismDirectory);
foreach (KeyValuePair<string, List<MappingFromPhotoPrism>> keyValuePair in fileNameToCollection)
_FileNameToCollection.Add(keyValuePair.Key, keyValuePair.Value);
}
string a2PeopleSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A2_People), "{}"); string a2PeopleSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A2_People), "{}");
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
string message = $") Building Container(s) - {totalSeconds} total second(s)"; string message = $") Building Container(s) - {totalSeconds} total second(s)";
@ -1079,14 +1074,16 @@ public partial class DlibDotNet
{ {
a2PeopleContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A2_People), "([])"); a2PeopleContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A2_People), "([])");
eDistanceContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(E_Distance), "()"); eDistanceContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(E_Distance), "()");
fPhotoPrismContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(F_PhotoPrism), "()");
fPhotoPrismSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(F_PhotoPrism), "{}");
} }
else else
{ {
string resultsGroupDirectory; string resultsGroupDirectory;
a2PeopleContentDirectory = null; a2PeopleContentDirectory = null;
eDistanceContentDirectory = Path.GetPathRoot(argZero); eDistanceContentDirectory = Path.Combine($"{Path.GetPathRoot(argZero)}", "()");
if (eDistanceContentDirectory is null) fPhotoPrismContentDirectory = Path.Combine($"{Path.GetPathRoot(argZero)}", "()");
throw new NullReferenceException(nameof(eDistanceContentDirectory)); fPhotoPrismSingletonDirectory = Path.Combine($"{Path.GetPathRoot(argZero)}", "{}");
string? newRootDirectory = SaveUrlAndGetNewRootDirectory(container); string? newRootDirectory = SaveUrlAndGetNewRootDirectory(container);
for (int i = 1; i < 10; i++) for (int i = 1; i < 10; i++)
{ {
@ -1101,6 +1098,12 @@ public partial class DlibDotNet
containers = Shared.Models.Stateless.Methods.IContainer.SortContainers(_Configuration.PropertyConfiguration, _Configuration.IgnoreRelativePaths, _ArgZeroIsConfigurationRootDirectory, argZero, containers); containers = Shared.Models.Stateless.Methods.IContainer.SortContainers(_Configuration.PropertyConfiguration, _Configuration.IgnoreRelativePaths, _ArgZeroIsConfigurationRootDirectory, argZero, containers);
MapLogicSupport mapLogicSupport = new(_Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeFaceAreaPermilleTolerance, _Configuration.SortingMaximumPerFaceShouldBeHigh); MapLogicSupport mapLogicSupport = new(_Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeFaceAreaPermilleTolerance, _Configuration.SortingMaximumPerFaceShouldBeHigh);
MapLogic? mapLogic = _Configuration.DistanceMoveUnableToMatch ? null : new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory, mapLogicSupport); MapLogic? mapLogic = _Configuration.DistanceMoveUnableToMatch ? null : new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory, mapLogicSupport);
if (Directory.Exists(fPhotoPrismSingletonDirectory))
{
Dictionary<string, List<MappingFromPhotoPrism>> fileNameToCollection = F_PhotoPrism.GetFileNameToCollection(fPhotoPrismContentDirectory);
foreach (KeyValuePair<string, List<MappingFromPhotoPrism>> keyValuePair in fileNameToCollection)
_FileNameToCollection.Add(keyValuePair.Key, keyValuePair.Value);
}
FullDoWork(argZero, propertyRoot, ticks, propertyLogic, t, containers, a2PeopleContentDirectory, eDistanceContentDirectory); FullDoWork(argZero, propertyRoot, ticks, propertyLogic, t, containers, a2PeopleContentDirectory, eDistanceContentDirectory);
_Distance.Clear(); _Distance.Clear();
mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory, mapLogicSupport); mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory, mapLogicSupport);
@ -1115,13 +1118,12 @@ public partial class DlibDotNet
&& _Configuration.SaveResizedSubfiles && _Configuration.SaveResizedSubfiles
&& outputResolution == _Configuration.OutputResolutions[0] && outputResolution == _Configuration.OutputResolutions[0]
&& _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution) && _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution)
&& _Exceptions.Count == 0 && _Exceptions.Count == 0)
&& !string.IsNullOrEmpty(eDistanceContentDirectory))
{ {
if (!_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Any()) if (!_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Any())
break; break;
SetMapping(_FileNameToCollection, argZero, containers); SetMapping(_FileNameToCollection, argZero, containers);
MapLogic(argZero, ticks, containers, a2PeopleSingletonDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, mapLogicSupport, mapLogic, outputResolution); MapLogic(argZero, ticks, containers, a2PeopleSingletonDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, fPhotoPrismContentDirectory, mapLogicSupport, mapLogic, outputResolution);
if (_IsEnvironment.Development) if (_IsEnvironment.Development)
continue; continue;
List<MappingFromItem> mappingFromItemCollection = GetMappingFromItemCollection(containers); List<MappingFromItem> mappingFromItemCollection = GetMappingFromItemCollection(containers);

View File

@ -50,7 +50,6 @@ public class Configuration
[Display(Name = "Person Birthday First Year"), Required] public int? PersonBirthdayFirstYear { get; set; } [Display(Name = "Person Birthday First Year"), Required] public int? PersonBirthdayFirstYear { get; set; }
[Display(Name = "Person Birthday Format"), Required] public string PersonBirthdayFormat { get; set; } [Display(Name = "Person Birthday Format"), Required] public string PersonBirthdayFormat { get; set; }
[Display(Name = "PersonKey Format"), Required] public string PersonKeyFormat { get; set; } [Display(Name = "PersonKey Format"), Required] public string PersonKeyFormat { get; set; }
[Display(Name = "Photo-Prism Directory"), Required] public string PhotoPrismDirectory { get; set; }
[Display(Name = "Predictor Model Name"), Required] public string PredictorModelName { get; set; } [Display(Name = "Predictor Model Name"), Required] public string PredictorModelName { get; set; }
[Display(Name = "Properties Changed For Distance"), Required] public bool? PropertiesChangedForDistance { get; set; } [Display(Name = "Properties Changed For Distance"), Required] public bool? PropertiesChangedForDistance { get; set; }
[Display(Name = "Properties Changed For Faces"), Required] public bool? PropertiesChangedForFaces { get; set; } [Display(Name = "Properties Changed For Faces"), Required] public bool? PropertiesChangedForFaces { get; set; }
@ -159,8 +158,6 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat)); throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat));
if (configuration.PersonKeyFormat is null) if (configuration.PersonKeyFormat is null)
throw new NullReferenceException(nameof(configuration.PersonKeyFormat)); throw new NullReferenceException(nameof(configuration.PersonKeyFormat));
if (configuration.PhotoPrismDirectory is null)
throw new NullReferenceException(nameof(configuration.PhotoPrismDirectory));
if (configuration.PropertiesChangedForDistance is null) if (configuration.PropertiesChangedForDistance is null)
throw new NullReferenceException(nameof(configuration.PropertiesChangedForDistance)); throw new NullReferenceException(nameof(configuration.PropertiesChangedForDistance));
if (configuration.PropertiesChangedForFaces is null) if (configuration.PropertiesChangedForFaces is null)
@ -244,7 +241,6 @@ public class Configuration
configuration.PersonBirthdayFirstYear.Value, configuration.PersonBirthdayFirstYear.Value,
configuration.PersonBirthdayFormat, configuration.PersonBirthdayFormat,
configuration.PersonKeyFormat, configuration.PersonKeyFormat,
configuration.PhotoPrismDirectory,
configuration.PredictorModelName, configuration.PredictorModelName,
configuration.PropertiesChangedForDistance.Value, configuration.PropertiesChangedForDistance.Value,
configuration.PropertiesChangedForFaces.Value, configuration.PropertiesChangedForFaces.Value,

View File

@ -47,7 +47,6 @@ public class Configuration
public int PersonBirthdayFirstYear { init; get; } public int PersonBirthdayFirstYear { init; get; }
public string PersonBirthdayFormat { init; get; } public string PersonBirthdayFormat { init; get; }
public string PersonKeyFormat { init; get; } public string PersonKeyFormat { init; get; }
public string PhotoPrismDirectory { init; get; }
public string PredictorModelName { init; get; } public string PredictorModelName { init; get; }
public bool PropertiesChangedForDistance { init; get; } public bool PropertiesChangedForDistance { init; get; }
public bool PropertiesChangedForFaces { init; get; } public bool PropertiesChangedForFaces { init; get; }
@ -114,7 +113,6 @@ public class Configuration
int personBirthdayFirstYear, int personBirthdayFirstYear,
string personBirthdayFormat, string personBirthdayFormat,
string personKeyFormat, string personKeyFormat,
string photoPrismDirectory,
string predictorModelName, string predictorModelName,
bool propertiesChangedForDistance, bool propertiesChangedForDistance,
bool propertiesChangedForFaces, bool propertiesChangedForFaces,
@ -180,7 +178,6 @@ public class Configuration
PersonBirthdayFirstYear = personBirthdayFirstYear; PersonBirthdayFirstYear = personBirthdayFirstYear;
PersonBirthdayFormat = personBirthdayFormat; PersonBirthdayFormat = personBirthdayFormat;
PersonKeyFormat = personKeyFormat; PersonKeyFormat = personKeyFormat;
PhotoPrismDirectory = photoPrismDirectory;
PredictorModelName = predictorModelName; PredictorModelName = predictorModelName;
PropertiesChangedForDistance = propertiesChangedForDistance; PropertiesChangedForDistance = propertiesChangedForDistance;
PropertiesChangedForFaces = propertiesChangedForFaces; PropertiesChangedForFaces = propertiesChangedForFaces;

View File

@ -12,12 +12,11 @@
"Configuration": { "Configuration": {
"DistanceRenameToMatch": false, "DistanceRenameToMatch": false,
"DistanceMoveUnableToMatch": false, "DistanceMoveUnableToMatch": false,
"PhotoPrismDirectory": "D:/Docker/photoprism/windows/Images/storage/backup",
"xRootDirectory": "D:/Tmp/phares/Pictures", "xRootDirectory": "D:/Tmp/phares/Pictures",
"xxRootDirectory": "D:/Tmp/Phares/Compare/Not-Copy-Copy-37c7b67", "xxRootDirectory": "D:/Tmp/Phares/Compare/Not-Copy-Copy-37c7b67",
"xxxRootDirectory": "D:/Tmp/Phares/Compare/Corrupt", "xxxRootDirectory": "D:/Tmp/Phares/Compare/Corrupt",
"RootDirectory": "D:/1) Images A/Images-37c7b67", "RootDirectory": "D:/1) Images A/Images-37c7b67",
"xxxxxRootDirectory": "F:/Tmp/Phares/Compare/Images-37c7b67/Facebook/=2022.3 Facebook", "xxxxxRootDirectory": "D:/1) Images A/Images-37c7b67/Facebook/=2022.3 Facebook",
"JLinks": [ "JLinks": [
"Julie" "Julie"
], ],

View File

@ -88,7 +88,6 @@
"PersonBirthdayFirstYear": 1500, "PersonBirthdayFirstYear": 1500,
"PersonBirthdayFormat": "yyyy-MM-dd_HH", "PersonBirthdayFormat": "yyyy-MM-dd_HH",
"PersonKeyFormat": "yyyy-MM-dd_HH", "PersonKeyFormat": "yyyy-MM-dd_HH",
"PhotoPrismDirectory": "",
"PopulatePropertyId": true, "PopulatePropertyId": true,
"PredictorModelName": "Large", "PredictorModelName": "Large",
"PropertiesChangedForDistance": false, "PropertiesChangedForDistance": false,

View File

@ -14,7 +14,6 @@ public class Configuration
public string MappingDefaultName { init; get; } public string MappingDefaultName { init; get; }
public int PersonBirthdayFirstYear { init; get; } public int PersonBirthdayFirstYear { init; get; }
public string PersonBirthdayFormat { init; get; } public string PersonBirthdayFormat { init; get; }
public string PhotoPrismDirectory { init; get; }
public int RangeDaysDeltaTolerance { init; get; } public int RangeDaysDeltaTolerance { init; get; }
public double RangeDistanceTolerance { init; get; } public double RangeDistanceTolerance { init; get; }
public int SortingMaximumPerKey { init; get; } public int SortingMaximumPerKey { init; get; }
@ -26,7 +25,6 @@ public class Configuration
string mappingDefaultName, string mappingDefaultName,
int personBirthdayFirstYear, int personBirthdayFirstYear,
string personBirthdayFormat, string personBirthdayFormat,
string photoPrismDirectory,
int[] rangeDaysDeltaTolerance, int[] rangeDaysDeltaTolerance,
double[] rangeDistanceTolerance, double[] rangeDistanceTolerance,
int sortingMaximumPerKey, int sortingMaximumPerKey,
@ -36,7 +34,6 @@ public class Configuration
string facePartsFileNameExtension) string facePartsFileNameExtension)
{ {
MappingDefaultName = mappingDefaultName; MappingDefaultName = mappingDefaultName;
PhotoPrismDirectory = photoPrismDirectory;
PersonBirthdayFormat = personBirthdayFormat; PersonBirthdayFormat = personBirthdayFormat;
SortingMaximumPerKey = sortingMaximumPerKey; SortingMaximumPerKey = sortingMaximumPerKey;
FaceConfidencePercent = faceConfidencePercent; FaceConfidencePercent = faceConfidencePercent;

View File

@ -189,7 +189,7 @@ internal abstract class MapLogic
return results; return results;
} }
internal static List<(string, string[], string)> DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string? eDistanceContentDirectory) internal static List<(string, string[], string)> DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory)
{ {
List<(string, string[], string)> results; List<(string, string[], string)> results;
string personKeyFormatted; string personKeyFormatted;

View File

@ -3,9 +3,9 @@ namespace View_by_Distance.Map.Models.Stateless.Methods;
public interface IMapLogic public interface IMapLogic
{ // ... { // ...
List<(string, string[], string)> TestStatic_DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, Shared.Models.PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string? eDistanceContentDirectory) => List<(string, string[], string)> TestStatic_DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, Shared.Models.PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) =>
DeleteEmptyDirectoriesAndGetMappedFaceFiles(configuration, personContainers, ticks, a2PeopleContentDirectory, eDistanceContentDirectory); DeleteEmptyDirectoriesAndGetMappedFaceFiles(configuration, personContainers, ticks, a2PeopleContentDirectory, eDistanceContentDirectory);
static List<(string, string[], string)> DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, Shared.Models.PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string? eDistanceContentDirectory) => static List<(string, string[], string)> DeleteEmptyDirectoriesAndGetMappedFaceFiles(Configuration configuration, Shared.Models.PersonContainer[] personContainers, long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory) =>
MapLogic.DeleteEmptyDirectoriesAndGetMappedFaceFiles(configuration, personContainers, ticks, a2PeopleContentDirectory, eDistanceContentDirectory); MapLogic.DeleteEmptyDirectoriesAndGetMappedFaceFiles(configuration, personContainers, ticks, a2PeopleContentDirectory, eDistanceContentDirectory);
} }

View File

@ -11,25 +11,33 @@ public class F_PhotoPrism
private static JsonProperty[] GetJsonProperty(string fileName) private static JsonProperty[] GetJsonProperty(string fileName)
{ {
JsonProperty[] results; JsonProperty[] results;
string json = File.ReadAllText(fileName); if (!File.Exists(fileName))
JsonElement? jsonElement = JsonSerializer.Deserialize<JsonElement>(json); results = Array.Empty<JsonProperty>();
results = jsonElement.Value.EnumerateObject().ToArray(); else
{
string json = File.ReadAllText(fileName);
JsonElement? jsonElement = JsonSerializer.Deserialize<JsonElement>(json);
results = jsonElement.Value.EnumerateObject().ToArray();
}
return results; return results;
} }
private static Marker[]? GetMarkers(string photoPrismDirectory) private static Marker[]? GetMarkers(string fPhotoPrismSingletonDirectory)
{ {
Marker[]? results; Marker[]? results;
string file = Path.Combine(photoPrismDirectory, "markers.json"); string file = Path.Combine(fPhotoPrismSingletonDirectory, "markers.json");
JsonProperty[] jsonProperties = GetJsonProperty(file); JsonProperty[] jsonProperties = GetJsonProperty(file);
results = JsonSerializer.Deserialize<Marker[]>(jsonProperties[1].Value); if (!jsonProperties.Any())
results = null;
else
results = JsonSerializer.Deserialize<Marker[]>(jsonProperties[1].Value);
return results; return results;
} }
private static Dictionary<string, List<Marker>> GetFileUIdToMarkers(string photoPrismDirectory) private static Dictionary<string, List<Marker>> GetFileUIdToMarkers(string fPhotoPrismSingletonDirectory)
{ {
Dictionary<string, List<Marker>> results = new(); Dictionary<string, List<Marker>> results = new();
Marker[]? markers = GetMarkers(photoPrismDirectory); Marker[]? markers = GetMarkers(fPhotoPrismSingletonDirectory);
if (markers is null) if (markers is null)
throw new NullReferenceException(nameof(markers)); throw new NullReferenceException(nameof(markers));
foreach (Marker marker in markers) foreach (Marker marker in markers)
@ -41,25 +49,28 @@ public class F_PhotoPrism
return results; return results;
} }
private static DatabaseFile[]? GetDatabaseFiles(string photoPrismDirectory) private static DatabaseFile[]? GetDatabaseFiles(string fPhotoPrismSingletonDirectory)
{ {
DatabaseFile[]? results; DatabaseFile[]? results;
string file = Path.Combine(photoPrismDirectory, "files.json"); string file = Path.Combine(fPhotoPrismSingletonDirectory, "files.json");
JsonProperty[] jsonProperties = GetJsonProperty(file); JsonProperty[] jsonProperties = GetJsonProperty(file);
results = JsonSerializer.Deserialize<DatabaseFile[]>(jsonProperties[1].Value); if (!jsonProperties.Any())
results = null;
else
results = JsonSerializer.Deserialize<DatabaseFile[]>(jsonProperties[1].Value);
return results; return results;
} }
public static Dictionary<string, List<MappingFromPhotoPrism>> GetFileNameToCollection(string photoPrismDirectory) public static Dictionary<string, List<MappingFromPhotoPrism>> GetFileNameToCollection(string fPhotoPrismSingletonDirectory)
{ {
Dictionary<string, List<MappingFromPhotoPrism>> results = new(); Dictionary<string, List<MappingFromPhotoPrism>> results = new();
List<Marker>? makers; List<Marker>? makers;
MappingFromPhotoPrism mappingFromPhotoPrism; MappingFromPhotoPrism mappingFromPhotoPrism;
List<MappingFromPhotoPrism>? mappingFromPhotoPrismCollection; List<MappingFromPhotoPrism>? mappingFromPhotoPrismCollection;
DatabaseFile[]? databaseFiles = GetDatabaseFiles(photoPrismDirectory); DatabaseFile[]? databaseFiles = GetDatabaseFiles(fPhotoPrismSingletonDirectory);
if (databaseFiles is null) if (databaseFiles is null)
throw new NullReferenceException(nameof(databaseFiles)); throw new NullReferenceException(nameof(databaseFiles));
Dictionary<string, List<Marker>> fileUIdToMarkers = GetFileUIdToMarkers(photoPrismDirectory); Dictionary<string, List<Marker>> fileUIdToMarkers = GetFileUIdToMarkers(fPhotoPrismSingletonDirectory);
foreach (DatabaseFile databaseFile in databaseFiles) foreach (DatabaseFile databaseFile in databaseFiles)
{ {
if (!results.TryGetValue(databaseFile.FileName, out mappingFromPhotoPrismCollection)) if (!results.TryGetValue(databaseFile.FileName, out mappingFromPhotoPrismCollection))
@ -77,7 +88,7 @@ public class F_PhotoPrism
return results; return results;
} }
public static void WriteMatches(string photoPrismDirectory, string personBirthdayFormat, long ticks, Face[] distinctFilteredFaces, Shared.Models.Methods.IMapLogic mapLogic) public static void WriteMatches(string fPhotoPrismContentDirectory, string personBirthdayFormat, long ticks, Face[] distinctFilteredFaces, Shared.Models.Methods.IMapLogic mapLogic)
{ {
long? personKey; long? personKey;
const int zero = 0; const int zero = 0;
@ -147,8 +158,8 @@ public class F_PhotoPrism
} }
} }
} }
File.WriteAllLines(Path.Combine(photoPrismDirectory, $"{ticks}-subject_alias_update.sql"), subjects.Distinct()); File.WriteAllLines(Path.Combine(fPhotoPrismContentDirectory, $"{ticks}-subject_alias_update.sql"), subjects.Distinct());
File.WriteAllText(Path.Combine(photoPrismDirectory, $"{ticks}-marker_name_update.sql"), stringBuilder.ToString()); File.WriteAllText(Path.Combine(fPhotoPrismContentDirectory, $"{ticks}-marker_name_update.sql"), stringBuilder.ToString());
} }
} }