Save Shortcuts Rev C
This commit is contained in:
@ -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);
|
||||
|
Reference in New Issue
Block a user