From 99e3f297201e4eeae3aaf599d106305ef9012875 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Mon, 13 May 2024 16:59:22 -0700 Subject: [PATCH] IsOffsetDeterministicHashCode --- Instance/DlibDotNet.cs | 77 ++++++++++--------- Shared/Models/Stateless/Methods/IId.cs | 5 ++ Shared/Models/Stateless/Methods/Id.cs | 2 +- Shared/Models/Stateless/Methods/XDirectory.cs | 19 ++++- 4 files changed, 64 insertions(+), 39 deletions(-) diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index b3761a8..c41893c 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -298,8 +298,8 @@ public partial class DlibDotNet ReadOnlyCollection? notNineCollection = null; ReadOnlyDictionary> personKeyToIds; ReadOnlyCollection? filesCollection = null; - bool runToDoCollectionFirst = GetRunToDoCollectionFirst(ticks); (aResultsFullGroupDirectory, bResultsFullGroupDirectory) = GetResultsFullGroupDirectories(); + bool runToDoCollectionFirst = GetRunToDoCollectionFirst(_Configuration.PropertyConfiguration, ticks); ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; Shared.Models.Stateless.Methods.IPath.ChangeDateForEmptyDirectories(_Configuration.PropertyConfiguration.RootDirectory, ticks); a2PeopleContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A2_People), "([])"); @@ -432,47 +432,50 @@ public partial class DlibDotNet } } - private bool GetRunToDoCollectionFirst(long ticks) + private bool GetRunToDoCollectionFirst(Property.Models.Configuration propertyConfiguration, long ticks) { - bool result = false; - string[] directories; - directories = Directory.GetDirectories(_Configuration.PropertyConfiguration.RootDirectory, "*", SearchOption.TopDirectoryOnly); - if (directories.Length == 0) - result = true; - else + bool result = IId.IsOffsetDeterministicHashCode(propertyConfiguration); + if (!result) { - string seasonDirectory; - DirectoryInfo directoryInfo; - DateTime dateTime = new(ticks); - string rootDirectory = _Configuration.PropertyConfiguration.RootDirectory; - string eDistanceContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(E_Distance), _Configuration.PropertyConfiguration.ResultContent); - (int season, string seasonName) = Shared.Models.Stateless.Methods.IProperty.GetSeason(dateTime.DayOfYear); - FileSystemInfo fileSystemInfo = new DirectoryInfo(eDistanceContentDirectory); - string[] checkDirectories = - [ - Path.Combine(rootDirectory, "Ancestry"), - Path.Combine(rootDirectory, "Facebook"), - Path.Combine(rootDirectory, "LinkedIn"), - rootDirectory, - ]; - foreach (string checkDirectory in checkDirectories) + string[] directories; + directories = Directory.GetDirectories(_Configuration.PropertyConfiguration.RootDirectory, "*", SearchOption.TopDirectoryOnly); + if (directories.Length == 0) + result = true; + else { - if (checkDirectory == rootDirectory) - seasonDirectory = Path.Combine(checkDirectory, $"{dateTime.Year}.{season} {seasonName}"); - else - seasonDirectory = Path.Combine(checkDirectory, $"{dateTime.Year}.{season} {seasonName} {Path.GetFileName(checkDirectory)}"); - if (!Directory.Exists(seasonDirectory)) - _ = Directory.CreateDirectory(seasonDirectory); - if (result) - continue; - directories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly); - foreach (string directory in directories) + string seasonDirectory; + DirectoryInfo directoryInfo; + DateTime dateTime = new(ticks); + string rootDirectory = _Configuration.PropertyConfiguration.RootDirectory; + string eDistanceContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(E_Distance), _Configuration.PropertyConfiguration.ResultContent); + (int season, string seasonName) = Shared.Models.Stateless.Methods.IProperty.GetSeason(dateTime.DayOfYear); + FileSystemInfo fileSystemInfo = new DirectoryInfo(eDistanceContentDirectory); + string[] checkDirectories = + [ + Path.Combine(rootDirectory, "Ancestry"), + Path.Combine(rootDirectory, "Facebook"), + Path.Combine(rootDirectory, "LinkedIn"), + rootDirectory, + ]; + foreach (string checkDirectory in checkDirectories) { - directoryInfo = new(directory); - if (directoryInfo.LastWriteTime > fileSystemInfo.LastWriteTime) + if (checkDirectory == rootDirectory) + seasonDirectory = Path.Combine(checkDirectory, $"{dateTime.Year}.{season} {seasonName}"); + else + seasonDirectory = Path.Combine(checkDirectory, $"{dateTime.Year}.{season} {seasonName} {Path.GetFileName(checkDirectory)}"); + if (!Directory.Exists(seasonDirectory)) + _ = Directory.CreateDirectory(seasonDirectory); + if (result) + continue; + directories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly); + foreach (string directory in directories) { - result = true; - break; + directoryInfo = new(directory); + if (directoryInfo.LastWriteTime > fileSystemInfo.LastWriteTime) + { + result = true; + break; + } } } } diff --git a/Shared/Models/Stateless/Methods/IId.cs b/Shared/Models/Stateless/Methods/IId.cs index 7d05948..f8c0318 100644 --- a/Shared/Models/Stateless/Methods/IId.cs +++ b/Shared/Models/Stateless/Methods/IId.cs @@ -3,6 +3,11 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods; public interface IId { // ... + const int DeterministicHashCode = 9876543; + + static bool IsOffsetDeterministicHashCode(Properties.IPropertyConfiguration propertyConfiguration) => + propertyConfiguration.Offset == DeterministicHashCode; + string TestStatic_GetIntelligentId(Properties.IPropertyConfiguration propertyConfiguration, long id, bool? ignore) => GetIntelligentId(propertyConfiguration, id, ignore); static string GetIntelligentId(Properties.IPropertyConfiguration propertyConfiguration, long id, bool? ignore) => diff --git a/Shared/Models/Stateless/Methods/Id.cs b/Shared/Models/Stateless/Methods/Id.cs index 948cfae..e6893a7 100644 --- a/Shared/Models/Stateless/Methods/Id.cs +++ b/Shared/Models/Stateless/Methods/Id.cs @@ -73,7 +73,7 @@ internal abstract class Id int check = GetId(propertyConfiguration, intelligentId); if (check != id) throw new NotSupportedException(); - result = index is null || propertyConfiguration.Offset == 9876543 ? intelligentId : $"{propertyConfiguration.Offset + index}{intelligentId}"; + result = index is null || propertyConfiguration.Offset == IId.DeterministicHashCode ? intelligentId : $"{propertyConfiguration.Offset + index}{intelligentId}"; } return result; } diff --git a/Shared/Models/Stateless/Methods/XDirectory.cs b/Shared/Models/Stateless/Methods/XDirectory.cs index 41f5275..83e76b0 100644 --- a/Shared/Models/Stateless/Methods/XDirectory.cs +++ b/Shared/Models/Stateless/Methods/XDirectory.cs @@ -301,6 +301,7 @@ internal abstract partial class XDirectory Models.FileHolder fileHolder; List distinctDirectories = []; FilePath[] sortedRecords = GetSortedRecords(propertyConfiguration, filesCollection); + bool isOffsetDeterministicHashCode = IId.IsOffsetDeterministicHashCode(propertyConfiguration); for (int i = 0; i < sortedRecords.Length; i++) { tick?.Invoke(); @@ -342,7 +343,21 @@ internal abstract partial class XDirectory if (filePath.Id is null) throw new NullReferenceException(nameof(filePath.Id)); intelligentId = IId.GetIntelligentId(propertyConfiguration, filePath.Id.Value, filePath.IsIgnore); - checkFile = Path.Combine(directory, $"{intelligentId}{filePath.ExtensionLowered}"); + if (!isOffsetDeterministicHashCode) + checkFile = Path.Combine(directory, $"{intelligentId}{filePath.ExtensionLowered}"); + else + { + if (filePath.DirectoryName is null) + continue; + paddedId = IId.GetPaddedId(propertyConfiguration, filePath.Id.Value, filePath.IsIgnore, i); + paddedIdFile = Path.Combine(filePath.DirectoryName, $"{paddedId}{filePath.ExtensionLowered}"); + if (File.Exists(paddedIdFile)) + continue; + File.Move(filePath.FullName, paddedIdFile); + if (!paddedCheck) + paddedCheck = true; + continue; + } } if ((filePath.Id is not null && distinctIds.Contains(filePath.Id.Value)) || distinct.Contains(checkFile)) { @@ -380,6 +395,8 @@ internal abstract partial class XDirectory if (!distinctDirectories.Contains(directory)) distinctDirectories.Add(directory); } + if (isOffsetDeterministicHashCode) + throw new Exception("Change Configuration Offset when ready to sort images!"); if (paddedCheck) throw new Exception("Maybe need to restart application!"); return (distinctDirectories.ToArray(), results);