From c06435abf9a7290e86fe701017f976dd1ec2d7b1 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Mon, 31 Jul 2023 09:47:56 -0700 Subject: [PATCH] IsDefault extraSaveContainer --- Instance/DlibDotNet.cs | 2 + Map/Models/MapLogic.cs | 10 ++-- Map/Models/Stateless/MapLogic.cs | 47 ++++++++++++------- .../OffsetDateTimeOriginal.cs | 5 +- .../Stateless/Methods/IPersonBirthday.cs | 22 +++++---- .../Stateless/Methods/PersonBirthday.cs | 22 +-------- 6 files changed, 52 insertions(+), 56 deletions(-) diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index f5b809d..cf95dd3 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -57,6 +57,8 @@ public partial class DlibDotNet _IsEnvironment = isEnvironment; long ticks = DateTime.Now.Ticks; _Exceptions = new List(); + if (ticks.ToString().Last() == '0') + ticks += 1; _Log = Serilog.Log.ForContext(); ReadOnlyCollection personContainers; Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs index b1b526a..6d19210 100644 --- a/Map/Models/MapLogic.cs +++ b/Map/Models/MapLogic.cs @@ -383,14 +383,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic string facesDirectory; string? directoryName; string personDirectory; - string facePartsDirectory; FileHolder faceFileHolder; + string facePartsDirectory; string personKeyFormatted; List distinct = new(); SaveContainer? saveContainer; FileHolder facePartsFileHolder; FileHolder hiddenFaceFileHolder; - string? facePartsContentCollectionFile; Dictionary? wholePercentagesToMapping; int padLeft = _Configuration.FaceDistancePermyriad.ToString().Length; string forceSingleImageHumanized = nameof(Shared.Models.Stateless.IMapLogic.ForceSingleImage).Humanize(LetterCasing.Title); @@ -491,10 +490,11 @@ public class MapLogic : Shared.Models.Methods.IMapLogic { if (saveIndividually) { - facePartsContentCollectionFile = Stateless.MapLogic.GetFacePartsContentCollectionFile(_Configuration.FacePartsFileNameExtension, d2FacePartsContentCollectionDirectory, mapping.MappingFromItem); - if (facePartsContentCollectionFile is null) + facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(_PropertyConfiguration, d2FacePartsContentDirectory, mapping.MappingFromItem); + facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacePartsFileNameExtension}")); + (saveContainer, SaveContainer? extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, directory, faceFileHolder, facePartsFileHolder, mapping); + if (extraSaveContainer is null) continue; - (saveContainer, SaveContainer extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, directory, faceFileHolder, facePartsContentCollectionFile, mapping); results.Add(extraSaveContainer); } else diff --git a/Map/Models/Stateless/MapLogic.cs b/Map/Models/Stateless/MapLogic.cs index 276542b..065ec0a 100644 --- a/Map/Models/Stateless/MapLogic.cs +++ b/Map/Models/Stateless/MapLogic.cs @@ -3,6 +3,7 @@ using ShellProgressBar; using System.Collections.ObjectModel; using System.Diagnostics; using System.Drawing; +using System.Globalization; using View_by_Distance.Shared.Models; using View_by_Distance.Shared.Models.Stateless.Methods; using WindowsShortcutFactory; @@ -14,10 +15,12 @@ internal abstract class MapLogic private record Record(string PersonKeyFormatted, string[] PersonDisplayDirectoryNames, + bool IsDefault, string MappedFaceFile); private record PersonKeyFormattedIdThenWholePercentages(string PersonKeyFormatted, string[] PersonDisplayDirectoryNames, + bool IsDefault, string MappedFaceFile, int Id, int WholePercentages); @@ -90,6 +93,7 @@ internal abstract class MapLogic private static void Individually(Configuration configuration, string ticksDirectory, string directory) { + bool isDefault; string[] files; FileInfo[] collection; string[] facesFileNames; @@ -133,7 +137,8 @@ internal abstract class MapLogic if (files.Length != 4) continue; collection = files.Select(l => new FileInfo(l)).ToArray(); - if (IPerson.IsDefaultName(configuration.MappingDefaultName, alphaDirectoryName)) + isDefault = alphaDirectoryName.First() == 'Z' && IPersonBirthday.IsCounterPersonYear(personKeyFormatted[..4]); + if (isDefault) facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension select l.FullName).ToArray(); else facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension && l.Name.Contains(matchDirectoryName) select l.FullName).ToArray(); @@ -215,12 +220,14 @@ internal abstract class MapLogic List results = new(); int? id; long ticks; + bool isDefault; string[] files; string fileName; - bool isNotDefault; + DateTime dateTime; TimeSpan timeSpan; bool check = false; int? wholePercentages; + string checkDirectory; string[] yearDirectories; string personKeyFormatted; string ticksDirectoryName; @@ -274,9 +281,12 @@ internal abstract class MapLogic personDisplayDirectoryNames = IPath.GetDirectoryNames(personNameDirectory); if (!personDisplayDirectoryNames.Any()) continue; - if (personDisplayDirectoryNames[^1] == "Z" && personKeyFormatted.StartsWith("140")) + isDefault = personDisplayDirectoryNames[^1].First() == 'Z' && IPersonBirthday.IsCounterPersonYear(personKeyFormatted[..4]); + if (isDefault && personDisplayDirectoryNames[^1].Length == 1) { - string checkDirectory = Path.Combine(yearDirectory, $"Z]{DateTime.Now.Ticks}"); + if (personKeyFormatted.Length != configuration.PersonBirthdayFormat.Length || !DateTime.TryParseExact(personKeyFormatted, configuration.PersonBirthdayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) + continue; + checkDirectory = Path.Combine(yearDirectory, $"Z]{dateTime.Ticks}"); if (Directory.Exists(checkDirectory)) { files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly); @@ -284,6 +294,8 @@ internal abstract class MapLogic continue; } Directory.Move(personNameDirectory, checkDirectory); + if (!check) + check = true; continue; } files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly); @@ -293,8 +305,7 @@ internal abstract class MapLogic throw new Exception($"Move personKey directories up one from {manualCopyHumanized} and delete {manualCopyHumanized} directory!"); if (personKeyFormatted == forceSingleImageHumanized && files.Any()) throw new Exception($"Move personKey directories up one from {forceSingleImageHumanized} and delete {forceSingleImageHumanized} directory!"); - isNotDefault = personDisplayDirectoryNames[^1].First() != 'Z' || !personKeyFormatted.StartsWith("140"); - if (isNotDefault) + if (!isDefault) { if (personKeyFormattedToNewestPersonKeyFormatted.Count > 0 && newestPersonKeyFormatted is null) RenameUnknown(files); @@ -308,7 +319,7 @@ internal abstract class MapLogic } if (personKeyFormatted.Length != configuration.PersonBirthdayFormat.Length) continue; - if (personDisplayDirectoryNames[^1].Length == 1 || !isNotDefault || !personKeyFormattedCollection.Contains(personKeyFormatted)) + if (personDisplayDirectoryNames[^1].Length == 1 || isDefault || !personKeyFormattedCollection.Contains(personKeyFormatted)) personFirstInitialDirectory = personNameDirectory; else { @@ -344,7 +355,7 @@ internal abstract class MapLogic continue; } distinct.Add(fileName); - results.Add(new(personKeyFormatted, personDisplayDirectoryNames, mappedFaceFile)); + results.Add(new(personKeyFormatted, personDisplayDirectoryNames, isDefault, mappedFaceFile)); } personNameLinkDirectories = Directory.GetDirectories(personFirstInitialDirectory, "*", SearchOption.TopDirectoryOnly); foreach (string personNameLinkDirectory in personNameLinkDirectories) @@ -479,10 +490,10 @@ internal abstract class MapLogic string message = $") {collection.Count:000} join from ticks Director(ies) - C - {totalSeconds} total second(s)"; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; using ProgressBar progressBar = new(collection.Count, message, options); - foreach ((string personKeyFormatted, string[] personDisplayDirectoryNames, string mappedFaceFile) in collection) + foreach (Record record in collection) { progressBar.Tick(); - (id, wholePercentages) = IMapping.GetConverted(configuration.FacesFileNameExtension, mappedFaceFile); + (id, wholePercentages) = IMapping.GetConverted(configuration.FacesFileNameExtension, record.MappedFaceFile); if (id is null || wholePercentages is null) { result++; @@ -493,10 +504,10 @@ internal abstract class MapLogic wholePercentagesCollection = idToWholePercentagesCollection[id.Value]; wholePercentagesCollection.Add(wholePercentages.Value); idToWholePercentagesCollection[id.Value].Add(wholePercentages.Value); - personDisplayDirectoryName = personDisplayDirectoryNames[^1]; + personDisplayDirectoryName = record.PersonDisplayDirectoryNames[^1]; if (string.IsNullOrEmpty(personDisplayDirectoryName)) continue; - personKeyFormattedIdThenWholePercentagesCollection.Add(new(personKeyFormatted, personDisplayDirectoryNames, mappedFaceFile, id.Value, wholePercentages.Value)); + personKeyFormattedIdThenWholePercentagesCollection.Add(new(record.PersonKeyFormatted, record.PersonDisplayDirectoryNames, record.IsDefault, record.MappedFaceFile, id.Value, wholePercentages.Value)); } return result; } @@ -536,7 +547,7 @@ internal abstract class MapLogic 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) + if (results.Count > 99) break; } return results; @@ -773,7 +784,7 @@ internal abstract class MapLogic (id, wholePercentages) = IMapping.GetConverted(configuration.FacesFileNameExtension, file[..^4]); if (id is null || wholePercentages is null) return; - if (file.EndsWith(lnk) || (!configuration.DistanceMoveUnableToMatch && !configuration.DistanceRenameToMatch)) + if (file.EndsWith(lnk) || (!configuration.DistanceMoveUnableToMatch && !configuration.DistanceRenameToMatch) || !File.Exists(file)) directories = new List(); else directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(file); @@ -1023,16 +1034,16 @@ internal abstract class MapLogic return (result, saveContainer); } - internal static (SaveContainer, SaveContainer) GetContainers(string facesFileNameExtension, string facePartsFileNameExtension, string directory, FileHolder faceFileHolder, string facePartsContentCollectionFile, Mapping mapping) + internal static (SaveContainer, SaveContainer?) GetContainers(string facesFileNameExtension, string facePartsFileNameExtension, string directory, FileHolder faceFileHolder, FileHolder facePartsFileHolder, Mapping mapping) { string checkFile; - SaveContainer result; + SaveContainer? saveContainer; if (mapping.MappingFromLocation is null) throw new NullReferenceException(nameof(mapping.MappingFromLocation)); checkFile = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}{facePartsFileNameExtension}"); - result = new(checkFile, directory, new(facePartsContentCollectionFile)); + saveContainer = !facePartsFileHolder.Exists ? null : new(checkFile, directory, facePartsFileHolder); checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}"); - return (result, new(checkFile, directory, faceFileHolder)); + return (new(checkFile, directory, faceFileHolder), saveContainer); } private static IEnumerable<(string, string)> GetCollection(string[] yearDirectories) diff --git a/Offset-Date-Time-Original/OffsetDateTimeOriginal.cs b/Offset-Date-Time-Original/OffsetDateTimeOriginal.cs index 3356cdc..a6090fb 100644 --- a/Offset-Date-Time-Original/OffsetDateTimeOriginal.cs +++ b/Offset-Date-Time-Original/OffsetDateTimeOriginal.cs @@ -4,6 +4,7 @@ using Serilog; using ShellProgressBar; using System.Drawing; using System.Drawing.Imaging; +using System.Globalization; using System.Reflection; using System.Text; using View_by_Distance.Offset.Date.Time.Original.Models; @@ -198,8 +199,8 @@ public class OffsetDateTimeOriginal bool targetIsValidImageFormatExtension = _PropertyConfiguration.ValidImageFormatExtensions.Contains(targetFileHolder.ExtensionLowered); badIsIgnoreExtension = badIsValidImageFormatExtension && _PropertyConfiguration.IgnoreExtensions.Contains(badFileHolder.ExtensionLowered); targetIsIgnoreExtension = targetIsValidImageFormatExtension && _PropertyConfiguration.IgnoreExtensions.Contains(targetFileHolder.ExtensionLowered); - DateTime minimumDateTime = DateTime.ParseExact(Path.GetFileName(minimumDirectory.First()), format, null, System.Globalization.DateTimeStyles.None); - DateTime maximumDateTime = DateTime.ParseExact(Path.GetFileName(maximumDirectory.First()), format, null, System.Globalization.DateTimeStyles.None).AddHours(23); + DateTime minimumDateTime = DateTime.ParseExact(Path.GetFileName(minimumDirectory.First()), format, CultureInfo.InvariantCulture, DateTimeStyles.None); + DateTime maximumDateTime = DateTime.ParseExact(Path.GetFileName(maximumDirectory.First()), format, CultureInfo.InvariantCulture, DateTimeStyles.None).AddHours(23); (badDateTimeOriginal, badDateTimes, badId, badMessage) = Property.Models.Stateless.IProperty.Get(_PropertyConfiguration.PopulatePropertyId, badFileHolder, badIsIgnoreExtension, badIsValidImageFormatExtension, asciiEncoding); if (badMessage is not null) throw new Exception(badMessage); diff --git a/Shared/Models/Stateless/Methods/IPersonBirthday.cs b/Shared/Models/Stateless/Methods/IPersonBirthday.cs index 6dbdedc..dc5ae79 100644 --- a/Shared/Models/Stateless/Methods/IPersonBirthday.cs +++ b/Shared/Models/Stateless/Methods/IPersonBirthday.cs @@ -13,6 +13,18 @@ public interface IPersonBirthday // ... + static bool IsCounterPersonBirthday(Models.PersonBirthday personBirthday) => + personBirthday.Value.Year < 1809; + + static bool IsCounterPersonYear(int year) => + year < 1809; + + static bool IsCounterPersonYear(string year) => + new string[] { year, "1809" }.Min() == year; + + static bool IsWrongYearFilterOrCounterPersonBirthday(bool? isWrongYear, Models.PersonBirthday personBirthday) => + isWrongYear is null || isWrongYear.Value || IsCounterPersonBirthday(personBirthday); + string TestStatic_GetDateTime(string personKeyFormatted) => GetDateTime(personKeyFormatted); static string GetDateTime(string personKeyFormatted) => @@ -68,11 +80,6 @@ public interface IPersonBirthday static string GetFormatted(string personBirthdayFormat, long personKey) => GetFormatted(personBirthdayFormat, GetPersonBirthday(personKey)); - bool TestStatic_IsCounterPersonBirthday(Models.PersonBirthday personBirthday) => - IsCounterPersonBirthday(personBirthday); - static bool IsCounterPersonBirthday(Models.PersonBirthday personBirthday) => - PersonBirthday.IsCounterPersonBirthday(personBirthday); - Models.PersonBirthday TestStatic_GetNextBirthDate(Properties.IStorage storage) => GetNextBirthDate(storage); static Models.PersonBirthday GetNextBirthDate(Properties.IStorage storage) => @@ -103,11 +110,6 @@ public interface IPersonBirthday static TimeSpan? GetTimeSpan(DateTime minimumDateTime, bool? isWrongYear, Models.PersonBirthday personBirthday) => PersonBirthday.GetTimeSpan(minimumDateTime, isWrongYear, personBirthday); - bool TestStatic_IsWrongYearFilterOrCounterPersonBirthday(bool? isWrongYear, Models.PersonBirthday personBirthday) => - IsWrongYearFilterOrCounterPersonBirthday(isWrongYear, personBirthday); - static bool IsWrongYearFilterOrCounterPersonBirthday(bool? isWrongYear, Models.PersonBirthday personBirthday) => - PersonBirthday.IsWrongYearFilterOrCounterPersonBirthday(isWrongYear, personBirthday); - string TestStatic_GetFileFullName(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday personBirthday) => GetFileFullName(storage, personBirthdayFormat, personBirthday); static string GetFileFullName(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday personBirthday) => diff --git a/Shared/Models/Stateless/Methods/PersonBirthday.cs b/Shared/Models/Stateless/Methods/PersonBirthday.cs index c445bc0..4123b89 100644 --- a/Shared/Models/Stateless/Methods/PersonBirthday.cs +++ b/Shared/Models/Stateless/Methods/PersonBirthday.cs @@ -24,30 +24,10 @@ internal abstract class PersonBirthday return result; } - internal static bool IsCounterPersonBirthday(Models.PersonBirthday personBirthday) - { - bool result; - if (personBirthday.Value.Year < 1809) - result = true; - else - result = false; - return result; - } - - internal static bool IsWrongYearFilterOrCounterPersonBirthday(bool? isWrongYear, Models.PersonBirthday personBirthday) - { - bool result; - if (isWrongYear is null || isWrongYear.Value || IsCounterPersonBirthday(personBirthday)) - result = true; - else - result = false; - return result; - } - internal static TimeSpan? GetTimeSpan(long minimumDateTimeTicks, bool? isWrongYear, Models.PersonBirthday personBirthday) { TimeSpan? timeSpan; - bool isWrongYearFilterOrCounterPersonBirthday = IsWrongYearFilterOrCounterPersonBirthday(isWrongYear, personBirthday); + bool isWrongYearFilterOrCounterPersonBirthday = IPersonBirthday.IsWrongYearFilterOrCounterPersonBirthday(isWrongYear, personBirthday); if (isWrongYearFilterOrCounterPersonBirthday) timeSpan = null; else