Prep for item.FilePath.HasIgnoreKeyword, item.FilePath.HasDateTimeOriginal

This commit is contained in:
Mike Phares 2024-06-17 21:41:37 -07:00
parent a9275dd5d1
commit 8a817750c9
4 changed files with 24 additions and 22 deletions

View File

@ -122,15 +122,16 @@ public partial class Rename : IRename, IDisposable
if (exifDirectory.Id is null) if (exifDirectory.Id is null)
throw new NotImplementedException(); throw new NotImplementedException();
int i = 0; int i = 0;
DateTime? dateTime;
const string jpg = ".jpg"; const string jpg = ".jpg";
const string jpeg = ".jpeg"; const string jpeg = ".jpeg";
List<ToDo> toDoCollection = []; List<ToDo> toDoCollection = [];
DateTime? dateTime = IDate.GetDateTimeOriginal(exifDirectory);
ReadOnlyCollection<string> keywords = IMetadata.GetKeywords(exifDirectory); ReadOnlyCollection<string> keywords = IMetadata.GetKeywords(exifDirectory);
MetadataConfiguration metadataConfiguration = renameConfiguration.MetadataConfiguration; MetadataConfiguration metadataConfiguration = renameConfiguration.MetadataConfiguration;
bool hasIgnoreKeyword = metadataConfiguration.IgnoreRulesKeyWords.Any(keywords.Contains); bool hasIgnoreKeyword = metadataConfiguration.IgnoreRulesKeyWords.Any(keywords.Contains);
string checkFileExtension = filePath.ExtensionLowered == jpeg ? jpg : filePath.ExtensionLowered; 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 checkDirectory = renameConfiguration.InPlaceWithOriginalName ? Path.Combine(filePath.DirectoryName, filePath.FileNameFirstSegment) : filePath.DirectoryName;
string checkFile = Path.Combine(checkDirectory, $"{paddedId}{checkFileExtension}"); string checkFile = Path.Combine(checkDirectory, $"{paddedId}{checkFileExtension}");
if (checkFile != filePath.FullName) if (checkFile != filePath.FullName)
@ -146,8 +147,6 @@ public partial class Rename : IRename, IDisposable
{ {
if (renameConfiguration.InPlace) if (renameConfiguration.InPlace)
throw new NotSupportedException($"Must use {nameof(renameConfiguration.InPlaceWithOriginalName)} when sidecar file(s) are present!"); 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); dateTime ??= IDate.GetMinimum(exifDirectory);
RecordB recordB = new(dateTime.Value, exifDirectory, filePath, sidecarFiles, hasDateTimeOriginal, hasIgnoreKeyword, fileInfo.FullName); RecordB recordB = new(dateTime.Value, exifDirectory, filePath, sidecarFiles, hasDateTimeOriginal, hasIgnoreKeyword, fileInfo.FullName);
toDoCollection.AddRange(GetSidecarFiles(metadataConfiguration, recordB, [], checkDirectory, paddedId)); toDoCollection.AddRange(GetSidecarFiles(metadataConfiguration, recordB, [], checkDirectory, paddedId));
@ -390,7 +389,7 @@ public partial class Rename : IRename, IDisposable
if (string.IsNullOrEmpty(checkDirectory)) if (string.IsNullOrEmpty(checkDirectory))
continue; continue;
checkFileExtension = record.FilePath.ExtensionLowered == jpeg ? jpg : record.FilePath.ExtensionLowered; 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(); jsonFileSubDirectory = Path.GetDirectoryName(Path.GetDirectoryName(record.JsonFile)) ?? throw new Exception();
checkFile = Path.Combine(checkDirectory, $"{paddedId}{checkFileExtension}"); checkFile = Path.Combine(checkDirectory, $"{paddedId}{checkFileExtension}");
if (checkFile == record.FilePath.FullName) if (checkFile == record.FilePath.FullName)
@ -478,7 +477,7 @@ public partial class Rename : IRename, IDisposable
{ {
if (record.ExifDirectory.Id is null) if (record.ExifDirectory.Id is null)
continue; 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)); 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); string json = JsonSerializer.Serialize(identifiers.OrderBy(l => l.PaddedId).ToArray(), IdentifierCollectionSourceGenerationContext.Default.IdentifierArray);

View File

@ -10,7 +10,8 @@ public record FilePath(long CreationTicks,
string FileNameFirstSegment, string FileNameFirstSegment,
string FullName, string FullName,
int? Id, int? Id,
bool? IsIgnore, bool? HasIgnoreKeyword,
bool? HasDateTimeOriginal,
bool IsIntelligentIdFormat, bool IsIntelligentIdFormat,
long LastWriteTicks, long LastWriteTicks,
long Length, long Length,
@ -44,7 +45,8 @@ public record FilePath(long CreationTicks,
bool isIntelligentIdFormat = IId.NameWithoutExtensionIsIntelligentIdFormat(metadataConfiguration, fileNameFirstSegment); bool isIntelligentIdFormat = IId.NameWithoutExtensionIsIntelligentIdFormat(metadataConfiguration, fileNameFirstSegment);
bool isPaddedIntelligentIdFormat = IId.NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataConfiguration, sortOrderOnlyLengthIndex, fileNameFirstSegment); bool isPaddedIntelligentIdFormat = IId.NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataConfiguration, sortOrderOnlyLengthIndex, fileNameFirstSegment);
bool fileNameFirstSegmentIsIdFormat = !isPaddedIntelligentIdFormat && !isIntelligentIdFormat && IId.NameWithoutExtensionIsIdFormat(metadataConfiguration, fileHolder); 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) if (!fileNameFirstSegmentIsIdFormat && !isIntelligentIdFormat && !isPaddedIntelligentIdFormat)
(id, sortOder) = (null, null); (id, sortOder) = (null, null);
else if (isIntelligentIdFormat) else if (isIntelligentIdFormat)
@ -72,7 +74,8 @@ public record FilePath(long CreationTicks,
fileNameFirstSegment, fileNameFirstSegment,
fileHolder.FullName, fileHolder.FullName,
id, id,
isIgnore, hasIgnoreKeyword,
hasDateTimeOriginal,
isIntelligentIdFormat, isIntelligentIdFormat,
fileHolder.LastWriteTime.Value.Ticks, fileHolder.LastWriteTime.Value.Ticks,
fileHolder.Length.Value, fileHolder.Length.Value,

View File

@ -36,7 +36,7 @@ internal abstract class Id
return result; 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; string result;
StringBuilder stringBuilder = new(); StringBuilder stringBuilder = new();
@ -47,12 +47,12 @@ internal abstract class Id
List<char> resultAllInOneSubdirectoryChars = []; List<char> resultAllInOneSubdirectoryChars = [];
if (id > -1) 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'); value = id.ToString().PadLeft(metadataConfiguration.IntMinValueLength, '0');
} }
else 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'); value = id.ToString()[1..].PadLeft(metadataConfiguration.IntMinValueLength, '0');
} }
for (int i = value.Length - metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength - 1; i > -1; i--) for (int i = value.Length - metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength - 1; i > -1; i--)
@ -63,14 +63,14 @@ internal abstract class Id
return result; 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; string result;
if (metadataConfiguration.Offset < 0) if (metadataConfiguration.Offset < 0)
result = Guid.NewGuid().ToString(); result = Guid.NewGuid().ToString();
else else
{ {
string intelligentId = GetIntelligentId(metadataConfiguration, id, ignore); string intelligentId = GetIntelligentId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal);
int check = GetId(metadataConfiguration, intelligentId); int check = GetId(metadataConfiguration, intelligentId);
if (check != id) if (check != id)
throw new NotSupportedException(); throw new NotSupportedException();

View File

@ -8,20 +8,20 @@ public interface IId
static bool IsOffsetDeterministicHashCode(MetadataConfiguration metadataConfiguration) => static bool IsOffsetDeterministicHashCode(MetadataConfiguration metadataConfiguration) =>
metadataConfiguration.Offset == DeterministicHashCode; metadataConfiguration.Offset == DeterministicHashCode;
string TestStatic_GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool ignore) => string TestStatic_GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) =>
GetIntelligentId(metadataConfiguration, id, ignore); GetIntelligentId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal);
static string GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool ignore) => static string GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) =>
Id.GetIntelligentId(metadataConfiguration, id, ignore); Id.GetIntelligentId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal);
int TestStatic_GetId(MetadataConfiguration metadataConfiguration, string intelligentId) => int TestStatic_GetId(MetadataConfiguration metadataConfiguration, string intelligentId) =>
GetId(metadataConfiguration, intelligentId); GetId(metadataConfiguration, intelligentId);
static int GetId(MetadataConfiguration metadataConfiguration, string intelligentId) => static int GetId(MetadataConfiguration metadataConfiguration, string intelligentId) =>
Id.GetId(metadataConfiguration, intelligentId); Id.GetId(metadataConfiguration, intelligentId);
string TestStatic_GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? ignore, int? index) => string TestStatic_GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) =>
GetPaddedId(metadataConfiguration, id, ignore, index); GetPaddedId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal, index);
static string GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? ignore, int? index) => static string GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) =>
Id.GetPaddedId(metadataConfiguration, id, ignore, index); Id.GetPaddedId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal, index);
string TestStatic_GetIgnoreFullPath(FilePath filePath, FileHolder fileHolder) => string TestStatic_GetIgnoreFullPath(FilePath filePath, FileHolder fileHolder) =>
GetIgnoreFullPath(filePath, fileHolder); GetIgnoreFullPath(filePath, fileHolder);