diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs index e160331..b1b526a 100644 --- a/Map/Models/MapLogic.cs +++ b/Map/Models/MapLogic.cs @@ -339,17 +339,14 @@ public class MapLogic : Shared.Models.Methods.IMapLogic return result; } - private string GetDirectory(bool saveIndividually, int padLeft, string? segmentC, string by, MappingFromItem mappingFromItem, SortingContainer sortingContainer) + private string? GetDirectory(Configuration configuration, bool saveIndividually, int padLeft, string? segmentC, string by, MappingFromItem mappingFromItem) { - if (_Configuration is null) - throw new NullReferenceException(nameof(_Configuration)); - string result; + string? result = null; const int zero = 0; string mappingSegmentB; string personKeyFormatted; PersonBirthday personBirthday; PersonContainer personContainer; - result = Path.Combine(_EDistanceContentTicksDirectory, by, sortingContainer.Sorting.Id.ToString(), sortingContainer.Sorting.WholePercentages.ToString()); for (int i = _NotMappedPersonContainers.Count - 1; i > 0; i--) { personContainer = _NotMappedPersonContainers[i]; @@ -357,7 +354,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic continue; personBirthday = personContainer.Birthdays[zero]; mappingSegmentB = Stateless.MapLogic.GetMappingSegmentB(_Ticks, personBirthday, personContainer.ApproximateYears, mappingFromItem); - personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday); + personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, personBirthday); if (!saveIndividually || segmentC is null) result = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, mappingSegmentB); else @@ -380,7 +377,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic bool isByMapping; bool isBySorting; string checkFile; - string directory; + string? directory; string shortcutFile; Mapping? keyMapping; string facesDirectory; @@ -426,7 +423,9 @@ public class MapLogic : Shared.Models.Methods.IMapLogic if (distinct.Contains(mapping.SortingContainer.Sorting.Id)) continue; ticks = DateTime.Now.Ticks; - directory = GetDirectory(saveIndividually, padLeft, mapping.SegmentC, by, mapping.MappingFromItem, mapping.SortingContainer); + directory = GetDirectory(_Configuration, saveIndividually, padLeft, mapping.SegmentC, by, mapping.MappingFromItem); + if (string.IsNullOrEmpty(directory)) + continue; personDirectory = Path.Combine(directory, $"Z]{ticks}"); if (saveIndividually) { diff --git a/Map/Models/Stateless/MapLogic.cs b/Map/Models/Stateless/MapLogic.cs index 56fd868..276542b 100644 --- a/Map/Models/Stateless/MapLogic.cs +++ b/Map/Models/Stateless/MapLogic.cs @@ -501,7 +501,48 @@ internal abstract class MapLogic return result; } - private static List GetNotMappedPersonContainers(Configuration configuration, ReadOnlyCollection personContainers, long[] personKeyCollection) + private static List GetNonSpecificPeopleCollection(Configuration configuration, long ticks, List personKeys) + { + List results = new(); + bool check; + Person person; + long personKey; + int? approximateYears = null; + PersonBirthday personBirthday; + PersonContainer personContainer; + string[] personDisplayDirectoryAllFiles = Array.Empty(); + DateTime incrementDate = new(configuration.PersonBirthdayFirstYear, 1, 1); + long oneHour = new DateTime(1, 1, 1, 1, 0, 0).Ticks - new DateTime(1, 1, 1).Ticks; + for (int i = 0; i < int.MaxValue; i++) + { + check = false; + personKey = incrementDate.Ticks; + incrementDate = incrementDate.AddDays(1); + if (incrementDate.Ticks > ticks) + break; + if (personKeys.Contains(personKey)) + continue; + for (int j = 1; j < 24; j++) + { + if (personKeys.Contains(personKey + (oneHour * j))) + { + check = true; + break; + } + } + if (check) + continue; + personBirthday = IPersonBirthday.GetPersonBirthday(personKey + (oneHour * 2)); + person = IPerson.GetPerson(configuration.MappingDefaultName, configuration.PersonCharacters.ToArray(), configuration.MappingDefaultName, personKey, personBirthday); + personContainer = new(approximateYears, new PersonBirthday[] { personBirthday }, personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey, person); + results.Add(personContainer); + if (results.Count > 999) + break; + } + return results; + } + + private static List GetNotMappedPersonContainers(Configuration configuration, long ticks, ReadOnlyCollection personContainers, long[] personKeyCollection) { List results = new(); List notMappedAndNotNamedPersonKeys = new(); @@ -521,6 +562,8 @@ internal abstract class MapLogic notMappedAndWithNamedPersonKeys.Add(personContainer); } results.AddRange(notMappedAndNotNamedPersonKeys); + if (results.Count == 0) + results.AddRange(GetNonSpecificPeopleCollection(configuration, ticks, personKeys)); return results; } @@ -866,7 +909,7 @@ internal abstract class MapLogic long[] personKeyCollection = (from l in nullablePersonKeyCollection where l is not null select l.Value).Distinct().ToArray(); PossiblyRebuildPersonContainers(configuration, a2PeopleSingletonDirectory, personKeyFormattedToNewestPersonKeyFormatted, possiblyNewPersonDisplayDirectoryNamesAndPersonContainer); SetPersonKeyToPersonContainer(configuration, personContainers, personKeyCollection, personKeyToPersonContainer, personKeyToPersonContainerCollection); - notMappedPersonContainers.AddRange(GetNotMappedPersonContainers(configuration, personContainers, personKeyCollection)); + notMappedPersonContainers.AddRange(GetNotMappedPersonContainers(configuration, ticks, personContainers, personKeyCollection)); } private static string GetMappingSegmentB(long ticks, PersonBirthday personBirthday, int? approximateYears, long dateTimeOriginalThenMinimumDateTimeTicks, bool? isWrongYear)