From 8a817750c9b47076b4b87e747508e987a5e1c51e Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Mon, 17 Jun 2024 21:41:37 -0700 Subject: [PATCH] Prep for item.FilePath.HasIgnoreKeyword, item.FilePath.HasDateTimeOriginal --- Rename/Rename.cs | 11 +++++------ Shared/Models/FilePath.cs | 9 ++++++--- Shared/Models/Stateless/Id.cs | 10 +++++----- Shared/Models/Stateless/Methods/IId.cs | 16 ++++++++-------- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/Rename/Rename.cs b/Rename/Rename.cs index b938049..c533319 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -122,15 +122,16 @@ public partial class Rename : IRename, IDisposable if (exifDirectory.Id is null) throw new NotImplementedException(); int i = 0; - DateTime? dateTime; const string jpg = ".jpg"; const string jpeg = ".jpeg"; List toDoCollection = []; + DateTime? dateTime = IDate.GetDateTimeOriginal(exifDirectory); ReadOnlyCollection keywords = IMetadata.GetKeywords(exifDirectory); MetadataConfiguration metadataConfiguration = renameConfiguration.MetadataConfiguration; bool hasIgnoreKeyword = metadataConfiguration.IgnoreRulesKeyWords.Any(keywords.Contains); string checkFileExtension = filePath.ExtensionLowered == jpeg ? jpg : filePath.ExtensionLowered; - string paddedId = IId.GetPaddedId(metadataConfiguration, exifDirectory.Id.Value, hasIgnoreKeyword, i); + bool hasDateTimeOriginal = dateTime is not null; + string paddedId = IId.GetPaddedId(metadataConfiguration, exifDirectory.Id.Value, hasIgnoreKeyword, hasDateTimeOriginal, i); string checkDirectory = renameConfiguration.InPlaceWithOriginalName ? Path.Combine(filePath.DirectoryName, filePath.FileNameFirstSegment) : filePath.DirectoryName; string checkFile = Path.Combine(checkDirectory, $"{paddedId}{checkFileExtension}"); if (checkFile != filePath.FullName) @@ -146,8 +147,6 @@ public partial class Rename : IRename, IDisposable { if (renameConfiguration.InPlace) throw new NotSupportedException($"Must use {nameof(renameConfiguration.InPlaceWithOriginalName)} when sidecar file(s) are present!"); - dateTime = IDate.GetDateTimeOriginal(exifDirectory); - bool hasDateTimeOriginal = dateTime is not null; dateTime ??= IDate.GetMinimum(exifDirectory); RecordB recordB = new(dateTime.Value, exifDirectory, filePath, sidecarFiles, hasDateTimeOriginal, hasIgnoreKeyword, fileInfo.FullName); toDoCollection.AddRange(GetSidecarFiles(metadataConfiguration, recordB, [], checkDirectory, paddedId)); @@ -390,7 +389,7 @@ public partial class Rename : IRename, IDisposable if (string.IsNullOrEmpty(checkDirectory)) continue; checkFileExtension = record.FilePath.ExtensionLowered == jpeg ? jpg : record.FilePath.ExtensionLowered; - paddedId = IId.GetPaddedId(metadataConfiguration, record.ExifDirectory.Id.Value, record.HasIgnoreKeyword, i); + paddedId = IId.GetPaddedId(metadataConfiguration, record.ExifDirectory.Id.Value, record.HasIgnoreKeyword, record.HasDateTimeOriginal, i); jsonFileSubDirectory = Path.GetDirectoryName(Path.GetDirectoryName(record.JsonFile)) ?? throw new Exception(); checkFile = Path.Combine(checkDirectory, $"{paddedId}{checkFileExtension}"); if (checkFile == record.FilePath.FullName) @@ -478,7 +477,7 @@ public partial class Rename : IRename, IDisposable { if (record.ExifDirectory.Id is null) continue; - paddedId = IId.GetPaddedId(renameConfiguration.MetadataConfiguration, record.ExifDirectory.Id.Value, record.FilePath.IsIgnore, index: null); + paddedId = IId.GetPaddedId(renameConfiguration.MetadataConfiguration, record.ExifDirectory.Id.Value, record.HasIgnoreKeyword, record.HasDateTimeOriginal, index: null); identifiers.Add(new(record.ExifDirectory.Id.Value, record.FilePath.Length, paddedId, record.DateTime.Ticks)); } string json = JsonSerializer.Serialize(identifiers.OrderBy(l => l.PaddedId).ToArray(), IdentifierCollectionSourceGenerationContext.Default.IdentifierArray); diff --git a/Shared/Models/FilePath.cs b/Shared/Models/FilePath.cs index 284ffe7..f9f317b 100644 --- a/Shared/Models/FilePath.cs +++ b/Shared/Models/FilePath.cs @@ -10,7 +10,8 @@ public record FilePath(long CreationTicks, string FileNameFirstSegment, string FullName, int? Id, - bool? IsIgnore, + bool? HasIgnoreKeyword, + bool? HasDateTimeOriginal, bool IsIntelligentIdFormat, long LastWriteTicks, long Length, @@ -44,7 +45,8 @@ public record FilePath(long CreationTicks, bool isIntelligentIdFormat = IId.NameWithoutExtensionIsIntelligentIdFormat(metadataConfiguration, fileNameFirstSegment); bool isPaddedIntelligentIdFormat = IId.NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataConfiguration, sortOrderOnlyLengthIndex, fileNameFirstSegment); bool fileNameFirstSegmentIsIdFormat = !isPaddedIntelligentIdFormat && !isIntelligentIdFormat && IId.NameWithoutExtensionIsIdFormat(metadataConfiguration, fileHolder); - bool? isIgnore = !isIntelligentIdFormat && !isPaddedIntelligentIdFormat ? null : fileNameFirstSegment[^1] is '2' or '8'; + bool? hasIgnoreKeyword = !isIntelligentIdFormat && !isPaddedIntelligentIdFormat ? null : fileNameFirstSegment[^1] is '2' or '8'; + bool? hasDateTimeOriginal = !isIntelligentIdFormat && !isPaddedIntelligentIdFormat ? null : fileNameFirstSegment[^1] is '1' or '9'; if (!fileNameFirstSegmentIsIdFormat && !isIntelligentIdFormat && !isPaddedIntelligentIdFormat) (id, sortOder) = (null, null); else if (isIntelligentIdFormat) @@ -72,7 +74,8 @@ public record FilePath(long CreationTicks, fileNameFirstSegment, fileHolder.FullName, id, - isIgnore, + hasIgnoreKeyword, + hasDateTimeOriginal, isIntelligentIdFormat, fileHolder.LastWriteTime.Value.Ticks, fileHolder.Length.Value, diff --git a/Shared/Models/Stateless/Id.cs b/Shared/Models/Stateless/Id.cs index 29a73dd..4a67ee5 100644 --- a/Shared/Models/Stateless/Id.cs +++ b/Shared/Models/Stateless/Id.cs @@ -36,7 +36,7 @@ internal abstract class Id return result; } - internal static string GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool? ignore) + internal static string GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) { string result; StringBuilder stringBuilder = new(); @@ -47,12 +47,12 @@ internal abstract class Id List resultAllInOneSubdirectoryChars = []; if (id > -1) { - key = ignore is not null && ignore.Value ? 8 : 9; + key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 8 : 9; value = id.ToString().PadLeft(metadataConfiguration.IntMinValueLength, '0'); } else { - key = ignore is not null && ignore.Value ? 2 : 1; + key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 2 : 1; value = id.ToString()[1..].PadLeft(metadataConfiguration.IntMinValueLength, '0'); } for (int i = value.Length - metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength - 1; i > -1; i--) @@ -63,14 +63,14 @@ internal abstract class Id return result; } - internal static string GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? ignore, int? index) + internal static string GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) { string result; if (metadataConfiguration.Offset < 0) result = Guid.NewGuid().ToString(); else { - string intelligentId = GetIntelligentId(metadataConfiguration, id, ignore); + string intelligentId = GetIntelligentId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal); int check = GetId(metadataConfiguration, intelligentId); if (check != id) throw new NotSupportedException(); diff --git a/Shared/Models/Stateless/Methods/IId.cs b/Shared/Models/Stateless/Methods/IId.cs index 69c48ad..25cfff2 100644 --- a/Shared/Models/Stateless/Methods/IId.cs +++ b/Shared/Models/Stateless/Methods/IId.cs @@ -8,20 +8,20 @@ public interface IId static bool IsOffsetDeterministicHashCode(MetadataConfiguration metadataConfiguration) => metadataConfiguration.Offset == DeterministicHashCode; - string TestStatic_GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool ignore) => - GetIntelligentId(metadataConfiguration, id, ignore); - static string GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool ignore) => - Id.GetIntelligentId(metadataConfiguration, id, ignore); + string TestStatic_GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) => + GetIntelligentId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal); + static string GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) => + Id.GetIntelligentId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal); int TestStatic_GetId(MetadataConfiguration metadataConfiguration, string intelligentId) => GetId(metadataConfiguration, intelligentId); static int GetId(MetadataConfiguration metadataConfiguration, string intelligentId) => Id.GetId(metadataConfiguration, intelligentId); - string TestStatic_GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? ignore, int? index) => - GetPaddedId(metadataConfiguration, id, ignore, index); - static string GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? ignore, int? index) => - Id.GetPaddedId(metadataConfiguration, id, ignore, index); + string TestStatic_GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) => + GetPaddedId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal, index); + static string GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) => + Id.GetPaddedId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal, index); string TestStatic_GetIgnoreFullPath(FilePath filePath, FileHolder fileHolder) => GetIgnoreFullPath(filePath, fileHolder);