Save Shortcuts Rev C

This commit is contained in:
2022-10-09 17:36:23 -07:00
parent b0b4c20597
commit 022f89106a
8 changed files with 91 additions and 54 deletions

View File

@ -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()

View File

@ -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; }
}

View File

@ -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);

View File

@ -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;

View File

@ -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);