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