Save Shortcuts Rev C
This commit is contained in:
parent
b0b4c20597
commit
022f89106a
@ -872,13 +872,13 @@ public partial class DlibDotNet
|
|||||||
mapLogicSupport);
|
mapLogicSupport);
|
||||||
Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping = MapLogicSupport.GetIdToNormalizedPixelPercentageToFace(mappingCollection);
|
Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping = MapLogicSupport.GetIdToNormalizedPixelPercentageToFace(mappingCollection);
|
||||||
mapLogic.CopyManualFiles(dFacesContentDirectory, idToNormalizedPixelPercentageToMapping);
|
mapLogic.CopyManualFiles(dFacesContentDirectory, idToNormalizedPixelPercentageToMapping);
|
||||||
int totalNotMapped = mapLogic.AddToMapping(mappingCollection);
|
(Dictionary<long, int> personKeyToCount, int totalNotMapped) = mapLogic.AddToMapping(mappingCollection);
|
||||||
if (_Configuration.MappingSaveMapped)
|
if (_Configuration.MappingSaveMapped)
|
||||||
mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, totalNotMapped);
|
mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, personKeyToCount, totalNotMapped);
|
||||||
if (_Configuration.MappingSaveNotMapped)
|
if (_Configuration.MappingSaveNotMapped)
|
||||||
mapLogic.SaveNotMappedTicks();
|
mapLogic.SaveNotMappedTicks();
|
||||||
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
||||||
mapLogic.SaveShortcuts(a2PeopleSingletonDirectory, personContainers, filteredItems, mappingCollection);
|
mapLogic.SaveShortcuts(a2PeopleSingletonDirectory, personContainers, filteredItems, mappingCollection, personKeyToCount);
|
||||||
if (_Configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions.Contains(outputResolution))
|
if (_Configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions.Contains(outputResolution))
|
||||||
mapLogic.SaveResizedImagesByPersonKeyFormatted(_Configuration.JLinks, a2PeopleSingletonDirectory, personContainers, mappingCollection, totalNotMapped);
|
mapLogic.SaveResizedImagesByPersonKeyFormatted(_Configuration.JLinks, a2PeopleSingletonDirectory, personContainers, mappingCollection, totalNotMapped);
|
||||||
MapLogicSupport.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces);
|
MapLogicSupport.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces);
|
||||||
|
@ -108,26 +108,28 @@ public class MapLogic
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int AddToMapping(Mapping[] mappingCollection)
|
public (Dictionary<long, int>, int) AddToMapping(Mapping[] mappingCollection)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
long personKey;
|
||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
string mappingSegmentB;
|
string mappingSegmentB;
|
||||||
int by = IMapLogic.Mapping;
|
int by = IMapLogic.Mapping;
|
||||||
PersonBirthday personBirthday;
|
PersonBirthday personBirthday;
|
||||||
PersonContainer[]? collection;
|
PersonContainer[]? collection;
|
||||||
List<PersonContainer> personContainers = new();
|
List<PersonContainer> personContainers = new();
|
||||||
Dictionary<int, PersonContainer[]>? keyValuePairs;
|
Dictionary<long, int> personKeyToCount = new();
|
||||||
|
Dictionary<int, PersonContainer[]>? normalizedPixelPercentageToPersonContainers;
|
||||||
foreach (Mapping mapping in mappingCollection)
|
foreach (Mapping mapping in mappingCollection)
|
||||||
{
|
{
|
||||||
personContainers.Clear();
|
personContainers.Clear();
|
||||||
if (!_IdThenNormalizedPixelPercentageToPersonContainers.TryGetValue(mapping.MappingFromItem.Id, out keyValuePairs))
|
if (!_IdThenNormalizedPixelPercentageToPersonContainers.TryGetValue(mapping.MappingFromItem.Id, out normalizedPixelPercentageToPersonContainers))
|
||||||
result += 1;
|
result += 1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!keyValuePairs.TryGetValue(mapping.MappingFromLocation.NormalizedPixelPercentage, out collection))
|
if (!normalizedPixelPercentageToPersonContainers.TryGetValue(mapping.MappingFromLocation.NormalizedPixelPercentage, out collection))
|
||||||
result += 1;
|
result += 1;
|
||||||
else
|
else
|
||||||
personContainers.AddRange(collection);
|
personContainers.AddRange(collection);
|
||||||
@ -137,11 +139,15 @@ public class MapLogic
|
|||||||
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
|
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
|
||||||
continue;
|
continue;
|
||||||
personBirthday = personContainer.Birthdays[zero];
|
personBirthday = personContainer.Birthdays[zero];
|
||||||
|
personKey = personBirthday.Value.Ticks;
|
||||||
|
if (!personKeyToCount.ContainsKey(personKey))
|
||||||
|
personKeyToCount.Add(personKey, 0);
|
||||||
|
personKeyToCount[personKey] += 1;
|
||||||
mappingSegmentB = Stateless.MapLogic.GetMappingSegmentB(_Ticks, personBirthday, personContainer.ApproximateYears, mapping.MappingFromItem);
|
mappingSegmentB = Stateless.MapLogic.GetMappingSegmentB(_Ticks, personBirthday, personContainer.ApproximateYears, mapping.MappingFromItem);
|
||||||
mapping.UpdateMappingFromPerson(personContainer.ApproximateYears, by, personContainer.DisplayDirectoryName, personBirthday, mappingSegmentB);
|
mapping.UpdateMappingFromPerson(personContainer.ApproximateYears, by, personContainer.DisplayDirectoryName, personBirthday, mappingSegmentB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return new(personKeyToCount, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveContainers(int totalNotMapped, int? updated, List<SaveContainer> saveContainers)
|
private void SaveContainers(int totalNotMapped, int? updated, List<SaveContainer> saveContainers)
|
||||||
@ -307,12 +313,13 @@ public class MapLogic
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<SaveContainer> GetSaveContainers(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping, int? useFiltersCounter, bool saveMapped)
|
private List<SaveContainer> GetSaveContainers(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping, Dictionary<long, int> personKeyToCount, int? useFiltersCounter, bool saveMapped)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
List<SaveContainer> results = new();
|
List<SaveContainer> results = new();
|
||||||
string by;
|
string by;
|
||||||
|
long personKey;
|
||||||
bool isByMapping;
|
bool isByMapping;
|
||||||
bool isBySorting;
|
bool isBySorting;
|
||||||
string checkFile;
|
string checkFile;
|
||||||
@ -350,10 +357,16 @@ public class MapLogic
|
|||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
if (string.IsNullOrEmpty(mapping.MappingFromPerson.DisplayDirectoryName))
|
if (string.IsNullOrEmpty(mapping.MappingFromPerson.DisplayDirectoryName))
|
||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
|
personKey = mapping.MappingFromPerson.PersonBirthday.Value.Ticks;
|
||||||
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
|
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
|
||||||
directory = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, mapping.MappingFromPerson.SegmentB);
|
directory = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, mapping.MappingFromPerson.SegmentB);
|
||||||
if (isByMapping)
|
if (isByMapping)
|
||||||
|
{
|
||||||
|
if (!personKeyToCount.ContainsKey(personKey))
|
||||||
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName);
|
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName);
|
||||||
|
else
|
||||||
|
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName, $"{personKeyToCount[personKey]} Face(s)");
|
||||||
|
}
|
||||||
else if (mapping.By is not null)
|
else if (mapping.By is not null)
|
||||||
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName, "lnk");
|
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName, "lnk");
|
||||||
else
|
else
|
||||||
@ -401,18 +414,19 @@ public class MapLogic
|
|||||||
public void UpdateFromSortingContainersThenSaveContainers(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping, int? useFiltersCounter, SortingContainer[] sortingContainers, int totalNotMapped)
|
public void UpdateFromSortingContainersThenSaveContainers(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping, int? useFiltersCounter, SortingContainer[] sortingContainers, int totalNotMapped)
|
||||||
{
|
{
|
||||||
int updated = UpdateFromSortingContainers(sortingContainers);
|
int updated = UpdateFromSortingContainers(sortingContainers);
|
||||||
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, useFiltersCounter, saveMapped: false);
|
Dictionary<long, int> personKeyToCount = new();
|
||||||
|
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, personKeyToCount, useFiltersCounter, saveMapped: false);
|
||||||
SaveContainers(totalNotMapped, updated, saveContainers);
|
SaveContainers(totalNotMapped, updated, saveContainers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveMapped(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping, int totalNotMapped)
|
public void SaveMapped(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping, Dictionary<long, int> personKeyToCount, int totalNotMapped)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
int? updated = null;
|
int? updated = null;
|
||||||
int? useFiltersCounter = null;
|
int? useFiltersCounter = null;
|
||||||
string mappingDirectory = Path.Combine(_EDistanceContentTicksDirectory, nameof(IMapLogic.Mapping));
|
string mappingDirectory = Path.Combine(_EDistanceContentTicksDirectory, nameof(IMapLogic.Mapping));
|
||||||
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, useFiltersCounter, saveMapped: true);
|
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, personKeyToCount, useFiltersCounter, saveMapped: true);
|
||||||
SaveContainers(totalNotMapped, updated, saveContainers);
|
SaveContainers(totalNotMapped, updated, saveContainers);
|
||||||
if (!string.IsNullOrEmpty(_EDistanceContentTicksDirectory) && Directory.Exists(mappingDirectory))
|
if (!string.IsNullOrEmpty(_EDistanceContentTicksDirectory) && Directory.Exists(mappingDirectory))
|
||||||
Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory);
|
Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory);
|
||||||
@ -856,28 +870,29 @@ public class MapLogic
|
|||||||
SaveContainers(totalNotMapped, null, saveContainers);
|
SaveContainers(totalNotMapped, null, saveContainers);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<(string, string, string)> GetCollectionForSaveShortcuts(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers, List<Item> filteredItems, Mapping[] mappingCollection)
|
private List<(string, string, string, string)> GetCollectionForSaveShortcuts(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers, List<Item> filteredItems, Mapping[] mappingCollection, Dictionary<long, int> personKeyToCount)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
|
long personKey;
|
||||||
string fileName;
|
string fileName;
|
||||||
string directory;
|
string directory;
|
||||||
string? directoryName;
|
string? directoryName;
|
||||||
string personDirectory;
|
string personDirectory;
|
||||||
string personKeyFormatted;
|
string personKeyFormatted;
|
||||||
List<(string, string Directory, string)> collection = new();
|
List<(string, string, string, string)> collection = new();
|
||||||
string[] personKeyFormattedCollection = GetPersonKeyFormattedCollection(jLinks, a2PeopleSingletonDirectory, personContainers);
|
string[] personKeyFormattedCollection = GetPersonKeyFormattedCollection(jLinks, a2PeopleSingletonDirectory, personContainers);
|
||||||
foreach (Item item in filteredItems)
|
foreach (Item item in filteredItems)
|
||||||
{
|
{
|
||||||
directoryName = Path.GetDirectoryName(item.RelativePath);
|
directoryName = Path.GetDirectoryName(item.RelativePath);
|
||||||
if (directoryName is null)
|
if (directoryName is null)
|
||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
if (item.ResizedFileHolder?.DirectoryName is null || !item.ResizedFileHolder.Exists)
|
if (item.Property?.Id is null || item.ResizedFileHolder?.DirectoryName is null || !item.ResizedFileHolder.Exists)
|
||||||
continue;
|
continue;
|
||||||
directory = Path.Combine(item.ResizedFileHolder.DirectoryName, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", _PropertyConfiguration.ResultAllInOne);
|
directory = Path.Combine(item.ResizedFileHolder.DirectoryName, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", _PropertyConfiguration.ResultAllInOne);
|
||||||
personDirectory = Path.Combine(directory, "No Faces");
|
personDirectory = Path.Combine(directory, "No Faces");
|
||||||
fileName = Path.Combine(personDirectory, $"{item.ResizedFileHolder.Name}.lnk");
|
fileName = Path.Combine(personDirectory, $"{item.ResizedFileHolder.Name}.lnk");
|
||||||
collection.Add(new(item.ResizedFileHolder.FullName, personDirectory, fileName));
|
collection.Add(new(item.ResizedFileHolder.FullName, personDirectory, fileName, item.Property.Id.Value.ToString()));
|
||||||
}
|
}
|
||||||
foreach (Mapping mapping in mappingCollection)
|
foreach (Mapping mapping in mappingCollection)
|
||||||
{
|
{
|
||||||
@ -891,7 +906,7 @@ public class MapLogic
|
|||||||
directory = Path.Combine(mapping.MappingFromItem.ResizedFileHolder.DirectoryName, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", _PropertyConfiguration.ResultAllInOne);
|
directory = Path.Combine(mapping.MappingFromItem.ResizedFileHolder.DirectoryName, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", _PropertyConfiguration.ResultAllInOne);
|
||||||
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, fileName));
|
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -902,22 +917,26 @@ public class MapLogic
|
|||||||
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
|
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
|
||||||
if (!personKeyFormattedCollection.Contains(personKeyFormatted))
|
if (!personKeyFormattedCollection.Contains(personKeyFormatted))
|
||||||
continue;
|
continue;
|
||||||
|
personKey = mapping.MappingFromPerson.PersonBirthday.Value.Ticks;
|
||||||
directory = Path.Combine(mapping.MappingFromItem.ResizedFileHolder.DirectoryName, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", personKeyFormatted);
|
directory = Path.Combine(mapping.MappingFromItem.ResizedFileHolder.DirectoryName, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", personKeyFormatted);
|
||||||
|
if (!personKeyToCount.ContainsKey(personKey))
|
||||||
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName);
|
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName);
|
||||||
|
else
|
||||||
|
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName, $"{personKeyToCount[personKey]} Face(s)");
|
||||||
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ResizedFileHolder.Name}.lnk");
|
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ResizedFileHolder.Name}.lnk");
|
||||||
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, fileName));
|
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return collection;
|
return collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveShortcuts(string a2PeopleSingletonDirectory, PersonContainer[] personContainers, List<Item> filteredItems, Mapping[] mappingCollection)
|
public void SaveShortcuts(string a2PeopleSingletonDirectory, PersonContainer[] personContainers, List<Item> filteredItems, Mapping[] mappingCollection, Dictionary<long, int> personKeyToCount)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
WindowsShortcut windowsShortcut;
|
WindowsShortcut windowsShortcut;
|
||||||
string[] jLinks = new string[] { "All" };
|
string[] jLinks = new string[] { "All" };
|
||||||
List<(string, string Directory, string)> collection = GetCollectionForSaveShortcuts(jLinks, a2PeopleSingletonDirectory, personContainers, filteredItems, mappingCollection);
|
List<(string, string Directory, string, string)> collection = GetCollectionForSaveShortcuts(jLinks, a2PeopleSingletonDirectory, personContainers, filteredItems, mappingCollection, personKeyToCount);
|
||||||
string[] directories = (from l in collection select l.Directory).Distinct().ToArray();
|
string[] directories = (from l in collection select l.Directory).Distinct().ToArray();
|
||||||
foreach (string directory in directories)
|
foreach (string directory in directories)
|
||||||
{
|
{
|
||||||
@ -926,13 +945,13 @@ public class MapLogic
|
|||||||
if (!Directory.Exists(directory))
|
if (!Directory.Exists(directory))
|
||||||
_ = Directory.CreateDirectory(directory);
|
_ = Directory.CreateDirectory(directory);
|
||||||
}
|
}
|
||||||
foreach ((string fullName, string directory, string fileName) in collection)
|
foreach ((string fullName, string directory, string fileName, string description) in collection)
|
||||||
{
|
{
|
||||||
if (File.Exists(fileName))
|
if (File.Exists(fileName))
|
||||||
continue;
|
continue;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
windowsShortcut = new() { Path = fullName };
|
windowsShortcut = new() { Path = fullName, Description = description };
|
||||||
windowsShortcut.Save(fileName);
|
windowsShortcut.Save(fileName);
|
||||||
windowsShortcut.Dispose();
|
windowsShortcut.Dispose();
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ internal abstract class MapLogic
|
|||||||
personKeys.Add(personKey);
|
personKeys.Add(personKey);
|
||||||
personBirthday = IPersonBirthday.GetPersonBirthday(personKey);
|
personBirthday = IPersonBirthday.GetPersonBirthday(personKey);
|
||||||
person = IPerson.GetPerson(configuration.MappingDefaultName, personKey, personBirthday);
|
person = IPerson.GetPerson(configuration.MappingDefaultName, personKey, personBirthday);
|
||||||
personContainer = new(approximateYears, person, new PersonBirthday[] { personBirthday }, personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey);
|
personContainer = new(approximateYears, person, new PersonBirthday[] { personBirthday }, personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey, partialKeyFormatted: null);
|
||||||
results.Add(personContainer);
|
results.Add(personContainer);
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
@ -207,7 +207,10 @@ internal abstract class MapLogic
|
|||||||
if (string.IsNullOrEmpty(eDistanceContentDirectory))
|
if (string.IsNullOrEmpty(eDistanceContentDirectory))
|
||||||
ticksDirectories = Array.Empty<string>();
|
ticksDirectories = Array.Empty<string>();
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
_ = IPath.DeleteEmptyDirectories(eDistanceContentDirectory);
|
||||||
ticksDirectories = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
|
ticksDirectories = Directory.GetDirectories(eDistanceContentDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
|
}
|
||||||
string message = $") {ticksDirectories.Length:000} collect from and clean ticks Director(ies) - A - {totalSeconds} total second(s)";
|
string message = $") {ticksDirectories.Length:000} collect from and clean ticks Director(ies) - A - {totalSeconds} total second(s)";
|
||||||
foreach (PersonContainer personContainer in personContainers)
|
foreach (PersonContainer personContainer in personContainers)
|
||||||
{
|
{
|
||||||
|
@ -12,28 +12,30 @@ public class PersonContainer : Properties.IPersonContainer
|
|||||||
public string[] DisplayDirectoryAllFiles { init; get; }
|
public string[] DisplayDirectoryAllFiles { init; get; }
|
||||||
public string DisplayDirectoryName { init; get; }
|
public string DisplayDirectoryName { init; get; }
|
||||||
public long? Key { init; get; }
|
public long? Key { init; get; }
|
||||||
|
public string? PartialKeyFormatted { init; get; }
|
||||||
|
|
||||||
[JsonConstructor]
|
[JsonConstructor]
|
||||||
public PersonContainer(int? approximateYears, Person? person, PersonBirthday[]? personBirthdays, string[] personDisplayDirectoryAllFiles, string personDisplayDirectoryName, long? personKey)
|
public PersonContainer(int? approximateYears, Person? person, PersonBirthday[]? birthdays, string[] displayDirectoryAllFiles, string displayDirectoryName, long? key, string? partialKeyFormatted)
|
||||||
{
|
{
|
||||||
ApproximateYears = approximateYears;
|
ApproximateYears = approximateYears;
|
||||||
Person = person;
|
Person = person;
|
||||||
Birthdays = personBirthdays;
|
Birthdays = birthdays;
|
||||||
DisplayDirectoryAllFiles = personDisplayDirectoryAllFiles;
|
DisplayDirectoryAllFiles = displayDirectoryAllFiles;
|
||||||
DisplayDirectoryName = personDisplayDirectoryName;
|
DisplayDirectoryName = displayDirectoryName;
|
||||||
Key = personKey;
|
Key = key;
|
||||||
|
PartialKeyFormatted = partialKeyFormatted;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PersonContainer(int? approximateYears, string[] personDisplayDirectoryAllFiles, string personDisplayDirectoryName) :
|
public PersonContainer(int? approximateYears, string[] displayDirectoryAllFiles, string displayDirectoryName) :
|
||||||
this(approximateYears, null, null, personDisplayDirectoryAllFiles, personDisplayDirectoryName, null)
|
this(approximateYears, null, null, displayDirectoryAllFiles, displayDirectoryName, null, null)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public PersonContainer(int? approximateYears, PersonBirthday personBirthday, string personDisplayDirectoryName, long personKey) :
|
public PersonContainer(int? approximateYears, PersonBirthday birthdays, string displayDirectoryName, long key) :
|
||||||
this(approximateYears, null, new PersonBirthday[] { personBirthday }, Array.Empty<string>(), personDisplayDirectoryName, personKey)
|
this(approximateYears, null, new PersonBirthday[] { birthdays }, Array.Empty<string>(), displayDirectoryName, key, null)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public PersonContainer(PersonBirthday personBirthday, string personDisplayDirectoryName) :
|
public PersonContainer(PersonBirthday birthday, string displayDirectoryName) :
|
||||||
this(Stateless.Methods.IAge.GetApproximateYears(personDisplayDirectoryName), Stateless.Methods.IPerson.GetPerson(personDisplayDirectoryName, personBirthday.Value.Ticks, personBirthday), new PersonBirthday[] { personBirthday }, Array.Empty<string>(), personDisplayDirectoryName, personBirthday.Value.Ticks)
|
this(Stateless.Methods.IAge.GetApproximateYears(displayDirectoryName), Stateless.Methods.IPerson.GetPerson(displayDirectoryName, birthday.Value.Ticks, birthday), new PersonBirthday[] { birthday }, Array.Empty<string>(), displayDirectoryName, birthday.Value.Ticks, null)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
@ -9,5 +9,6 @@ public interface IPersonContainer
|
|||||||
public string[] DisplayDirectoryAllFiles { init; get; }
|
public string[] DisplayDirectoryAllFiles { init; get; }
|
||||||
public string DisplayDirectoryName { init; get; }
|
public string DisplayDirectoryName { init; get; }
|
||||||
public long? Key { init; get; }
|
public long? Key { init; get; }
|
||||||
|
public string? PartialKeyFormatted { init; get; }
|
||||||
|
|
||||||
}
|
}
|
@ -21,7 +21,7 @@ public interface IAge
|
|||||||
char[] TestStatic_GetChars() =>
|
char[] TestStatic_GetChars() =>
|
||||||
GetChars();
|
GetChars();
|
||||||
static char[] GetChars() =>
|
static char[] GetChars() =>
|
||||||
new char[] { '!', '^', '_', '~', '+', '#' };
|
new char[] { '!', '#', '^', '_', '`', '~', '+' };
|
||||||
|
|
||||||
int? TestStatic_GetApproximateYears(string personDisplayDirectoryName, char[] chars) =>
|
int? TestStatic_GetApproximateYears(string personDisplayDirectoryName, char[] chars) =>
|
||||||
GetApproximateYears(personDisplayDirectoryName, chars);
|
GetApproximateYears(personDisplayDirectoryName, chars);
|
||||||
|
@ -107,9 +107,9 @@ internal abstract class PersonBirthday
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static List<Models.PersonBirthday> GetPersonBirthdays(string personBirthdayFormat, string[] personKeyDirectories, string personDisplayDirectory, string personDisplayDirectoryName)
|
internal static List<(string, Models.PersonBirthday)> GetPersonBirthdays(string personBirthdayFormat, string[] personKeyDirectories, string personDisplayDirectory, string personDisplayDirectoryName)
|
||||||
{
|
{
|
||||||
List<Models.PersonBirthday> results = new();
|
List<(string, Models.PersonBirthday)> results = new();
|
||||||
string[] files;
|
string[] files;
|
||||||
string personKeyFormatted;
|
string personKeyFormatted;
|
||||||
Models.PersonBirthday? personBirthday;
|
Models.PersonBirthday? personBirthday;
|
||||||
@ -120,11 +120,11 @@ internal abstract class PersonBirthday
|
|||||||
personBirthday = IPersonBirthday.GetPersonBirthday(personBirthdayFormat, personKeyFormatted);
|
personBirthday = IPersonBirthday.GetPersonBirthday(personBirthdayFormat, personKeyFormatted);
|
||||||
else
|
else
|
||||||
(personBirthday, personKeyFormatted) = Person.Get(personBirthdayFormat, personDisplayDirectory, personKeyDirectory, birthday);
|
(personBirthday, personKeyFormatted) = Person.Get(personBirthdayFormat, personDisplayDirectory, personKeyDirectory, birthday);
|
||||||
if (personBirthday is null || personKeyFormatted.Contains('#'))
|
if (personBirthday is null)
|
||||||
continue;
|
continue;
|
||||||
if (!IPersonBirthday.IsCounterPersonBirthday(personBirthday) && ((!personKeyDirectory.Contains('#') && (personDisplayDirectoryName.Contains('~') || personDisplayDirectoryName.Contains('#'))) || (personKeyDirectory.Contains('#') && !personDisplayDirectoryName.Contains('#'))))
|
if (!IPersonBirthday.IsCounterPersonBirthday(personBirthday) && ((!personKeyDirectory.Contains('#') && (personDisplayDirectoryName.Contains('~') || personDisplayDirectoryName.Contains('#'))) || (personKeyDirectory.Contains('#') && !personDisplayDirectoryName.Contains('#'))))
|
||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
results.Add(personBirthday);
|
results.Add(new(personKeyFormatted, personBirthday));
|
||||||
files = Directory.GetFiles(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
files = Directory.GetFiles(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
if (files.Any())
|
if (files.Any())
|
||||||
continue;
|
continue;
|
||||||
|
@ -33,23 +33,34 @@ internal abstract class PersonContainer
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<(long?, Models.PersonContainer)> GetPersonContainersCollections(string facesFileNameExtension, char[] chars, string personDisplayDirectory, string personDisplayDirectoryName, int? approximateYears, List<Models.PersonBirthday> personBirthdays)
|
private static List<(long?, Models.PersonContainer)> GetPersonContainersCollections(string facesFileNameExtension, char[] chars, char numberSign, string personDisplayDirectory, string personDisplayDirectoryName, int? approximateYears, List<(string PersonKeyFormatted, Models.PersonBirthday PersonBirthday)> collection)
|
||||||
{
|
{
|
||||||
List<(long?, Models.PersonContainer)> results = new();
|
List<(long?, Models.PersonContainer)> results = new();
|
||||||
long personKey;
|
long personKey;
|
||||||
string[] segments;
|
string[] segments;
|
||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
Models.Person person;
|
Models.Person person;
|
||||||
|
string? partialPersonKeyFormatted;
|
||||||
Models.PersonContainer personContainer;
|
Models.PersonContainer personContainer;
|
||||||
Models.PersonBirthday[] orderedPersonBirthdays;
|
Models.PersonBirthday[] orderedPersonBirthdays;
|
||||||
|
IEnumerable<string> partialPersonKeyFormattedCollection;
|
||||||
string[] personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory);
|
string[] personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory);
|
||||||
foreach (Models.PersonBirthday personBirthday in personBirthdays)
|
foreach ((string personKeyFormatted, Models.PersonBirthday personBirthday) in collection)
|
||||||
{
|
{
|
||||||
segments = personDisplayDirectoryName.Split(chars);
|
segments = personDisplayDirectoryName.Split(chars);
|
||||||
orderedPersonBirthdays = personBirthdays.OrderByDescending(l => l.Value.Ticks).ToArray();
|
orderedPersonBirthdays = (from l in collection where !l.PersonKeyFormatted.Contains(numberSign) orderby l.PersonBirthday.Value.Ticks descending select l.PersonBirthday).ToArray();
|
||||||
|
if (!orderedPersonBirthdays.Any())
|
||||||
|
personKey = collection[zero].PersonBirthday.Value.Ticks;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (personKeyFormatted.Contains(numberSign))
|
||||||
|
continue;
|
||||||
personKey = orderedPersonBirthdays[zero].Value.Ticks;
|
personKey = orderedPersonBirthdays[zero].Value.Ticks;
|
||||||
|
}
|
||||||
person = IPerson.GetPerson(personKey, segments);
|
person = IPerson.GetPerson(personKey, segments);
|
||||||
personContainer = new(approximateYears, person, orderedPersonBirthdays, personDisplayDirectoryAllFiles, personDisplayDirectoryName, personKey);
|
partialPersonKeyFormattedCollection = (from l in collection where l.PersonKeyFormatted.Contains(numberSign) select l.PersonKeyFormatted);
|
||||||
|
partialPersonKeyFormatted = partialPersonKeyFormattedCollection.FirstOrDefault();
|
||||||
|
personContainer = new(approximateYears, person, orderedPersonBirthdays, personDisplayDirectoryAllFiles, personDisplayDirectoryName, personKey, partialPersonKeyFormatted);
|
||||||
results.Add(new(personKey, personContainer));
|
results.Add(new(personKey, personContainer));
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
@ -63,17 +74,17 @@ internal abstract class PersonContainer
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string? VerifyAge(string personDisplayDirectory, string minusOne, string personDisplayDirectoryName, int? approximateYears, List<Models.PersonBirthday> personBirthdays)
|
private static string? VerifyAge(char numberSign, string personDisplayDirectory, string minusOne, string personDisplayDirectoryName, int? approximateYears, List<(string PersonKeyFormatted, Models.PersonBirthday PersonBirthday)> collection)
|
||||||
{
|
{
|
||||||
string? result;
|
string? result;
|
||||||
if (approximateYears is null)
|
if (approximateYears is null)
|
||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
if (!personBirthdays.Any())
|
if (!collection.Any())
|
||||||
throw new NotSupportedException();
|
throw new NotSupportedException();
|
||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
int? updateApproximateYears;
|
int? updateApproximateYears;
|
||||||
DateTime dateTime = DateTime.Now;
|
DateTime dateTime = DateTime.Now;
|
||||||
Models.PersonBirthday[] orderedPersonBirthdays = personBirthdays.OrderByDescending(l => l.Value.Ticks).ToArray();
|
Models.PersonBirthday[] orderedPersonBirthdays = (from l in collection where !l.PersonKeyFormatted.Contains(numberSign) orderby l.PersonBirthday.Value.Ticks descending select l.PersonBirthday).ToArray();
|
||||||
TimeSpan timeSpan = new(orderedPersonBirthdays[zero].Value.Ticks - dateTime.AddYears(-approximateYears.Value).Ticks);
|
TimeSpan timeSpan = new(orderedPersonBirthdays[zero].Value.Ticks - dateTime.AddYears(-approximateYears.Value).Ticks);
|
||||||
if (timeSpan.TotalDays < -356)
|
if (timeSpan.TotalDays < -356)
|
||||||
updateApproximateYears = approximateYears.Value + 1;
|
updateApproximateYears = approximateYears.Value + 1;
|
||||||
@ -99,11 +110,12 @@ internal abstract class PersonContainer
|
|||||||
List<(long?, Models.PersonContainer)> results = new();
|
List<(long?, Models.PersonContainer)> results = new();
|
||||||
string? minusOne;
|
string? minusOne;
|
||||||
int? approximateYears;
|
int? approximateYears;
|
||||||
|
char numberSign = '#';
|
||||||
List<string?> changes = new();
|
List<string?> changes = new();
|
||||||
string[] personKeyDirectories;
|
string[] personKeyDirectories;
|
||||||
string? personDisplayDirectoryName;
|
string? personDisplayDirectoryName;
|
||||||
Models.PersonContainer personContainer;
|
Models.PersonContainer personContainer;
|
||||||
List<Models.PersonBirthday> personBirthdays;
|
List<(string, Models.PersonBirthday)> collection;
|
||||||
foreach (string personDisplayDirectory in personDisplayDirectories)
|
foreach (string personDisplayDirectory in personDisplayDirectories)
|
||||||
{
|
{
|
||||||
personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory);
|
personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory);
|
||||||
@ -111,18 +123,18 @@ internal abstract class PersonContainer
|
|||||||
continue;
|
continue;
|
||||||
approximateYears = Age.GetApproximateYears(personDisplayDirectoryName, chars);
|
approximateYears = Age.GetApproximateYears(personDisplayDirectoryName, chars);
|
||||||
personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly);
|
personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
personBirthdays = PersonBirthday.GetPersonBirthdays(personBirthdayFormat, personKeyDirectories, personDisplayDirectory, personDisplayDirectoryName);
|
collection = PersonBirthday.GetPersonBirthdays(personBirthdayFormat, personKeyDirectories, personDisplayDirectory, personDisplayDirectoryName);
|
||||||
if (personDisplayDirectoryName.Contains('^'))
|
if (personDisplayDirectoryName.Contains('^'))
|
||||||
{
|
{
|
||||||
minusOne = Path.GetDirectoryName(personDisplayDirectory);
|
minusOne = Path.GetDirectoryName(personDisplayDirectory);
|
||||||
if (minusOne is null)
|
if (minusOne is null)
|
||||||
continue;
|
continue;
|
||||||
changes.Add(VerifyAge(personDisplayDirectory, minusOne, personDisplayDirectoryName, approximateYears, personBirthdays));
|
changes.Add(VerifyAge(numberSign, personDisplayDirectory, minusOne, personDisplayDirectoryName, approximateYears, collection));
|
||||||
}
|
}
|
||||||
if (changes.Any(l => l is not null))
|
if (changes.Any(l => l is not null))
|
||||||
continue;
|
continue;
|
||||||
if (personBirthdays.Any())
|
if (collection.Any())
|
||||||
results.AddRange(GetPersonContainersCollections(facesFileNameExtension, chars, personDisplayDirectory, personDisplayDirectoryName, approximateYears, personBirthdays));
|
results.AddRange(GetPersonContainersCollections(facesFileNameExtension, chars, numberSign, personDisplayDirectory, personDisplayDirectoryName, approximateYears, collection));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
personContainer = GetPersonContainer(facesFileNameExtension, personDisplayDirectory, personDisplayDirectoryName, approximateYears);
|
personContainer = GetPersonContainer(facesFileNameExtension, personDisplayDirectory, personDisplayDirectoryName, approximateYears);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user