This commit is contained in:
Mike Phares 2023-12-22 16:22:08 -07:00
parent 96c479e639
commit 82de27ce61
3 changed files with 38 additions and 8 deletions

View File

@ -61,7 +61,7 @@ public class Rename : IRename
results.AddRange(Directory.GetFiles(filePath.DirectoryName, $"{filePath.Name}-*.jpg", SearchOption.TopDirectoryOnly));
if (results.Count == 0)
throw new Exception();
result = IId.GetFilePath(renameConfiguration.MetadataConfiguration, results[0]);
result = IId.GetFilePath(renameConfiguration.MetadataConfiguration, results[0], index: null);
if (!result.Name.EndsWith("-0001.jpg"))
throw new Exception();
isValidImageFormatExtension = renameConfiguration.ValidImageFormatExtensions.Contains(result.ExtensionLowered);
@ -111,6 +111,7 @@ public class Rename : IRename
private static void GetExifDirectoryCollection(IRename rename, RenameConfiguration renameConfiguration, List<(string, FileInfo, ExifDirectory)> exifDirectories, IEnumerable<string> files, A_Metadata metadata)
{
int index = -1;
FileInfo fileInfo;
FilePath filePath;
FilePath? ffmpegFilePath;
@ -119,8 +120,9 @@ public class Rename : IRename
DeterministicHashCode deterministicHashCode;
foreach (string file in files)
{
index += 1;
rename.Tick();
filePath = IId.GetFilePath(renameConfiguration.MetadataConfiguration, file);
filePath = IId.GetFilePath(renameConfiguration.MetadataConfiguration, file, index);
if (renameConfiguration.SkipIdFiles && filePath.Id is not null && (filePath.IsIntelligentIdFormat || filePath.SortOrder is not null))
continue;
(ffmpegFiles, ffmpegFilePath) = rename.ConvertAndGetFfmpegFiles(renameConfiguration, filePath);

View File

@ -6,6 +6,20 @@ namespace View_by_Distance.Shared.Models.Stateless;
internal abstract class Id
{
internal static bool NameWithoutExtensionIsIdFormat(string fileNameFirstSegment)
{
bool result;
int intMinValueLength = int.MinValue.ToString().Length;
if (fileNameFirstSegment.Length < 5 || fileNameFirstSegment.Length > intMinValueLength)
result = false;
else
{
bool skipOneAllAreNumbers = fileNameFirstSegment[1..].All(l => char.IsNumber(l));
result = (skipOneAllAreNumbers && fileNameFirstSegment[0] == '-') || (skipOneAllAreNumbers && char.IsNumber(fileNameFirstSegment[0]));
}
return result;
}
private static int GetId(MetadataConfiguration metadataConfiguration, string intelligentId)
{
int result;
@ -62,7 +76,7 @@ internal abstract class Id
return result;
}
internal static FilePath GetFilePath(MetadataConfiguration metadataConfiguration, string file)
internal static FilePath GetFilePath(MetadataConfiguration metadataConfiguration, string file, int? index)
{
FilePath result;
int? id;
@ -76,7 +90,16 @@ internal abstract class Id
string fileNameFirstSegment = segments[0];
bool fileNameFirstSegmentIsIntelligentIdFormat = IId.NameWithoutExtensionIsIntelligentIdFormat(metadataConfiguration, fileNameFirstSegment);
bool fileNameFirstSegmentIsPaddedIntelligentIdFormat = IId.NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataConfiguration, sortOrderOnlyLengthIndex, fileNameFirstSegment);
if (!fileNameFirstSegmentIsIntelligentIdFormat && !fileNameFirstSegmentIsPaddedIntelligentIdFormat)
bool fileNameFirstSegmentIsIdFormat = !fileNameFirstSegmentIsPaddedIntelligentIdFormat && !fileNameFirstSegmentIsIntelligentIdFormat && IId.NameWithoutExtensionIsIdFormat(fileNameFirstSegment);
if (fileNameFirstSegmentIsIdFormat)
{
if (index is null)
throw new NullReferenceException(nameof(index));
if (!int.TryParse(fileNameFirstSegment, out int valueOfFileNameFirstSegment))
throw new NotSupportedException();
(id, sortOder) = (valueOfFileNameFirstSegment, metadataConfiguration.Offset + index);
}
else if (!fileNameFirstSegmentIsIntelligentIdFormat && !fileNameFirstSegmentIsPaddedIntelligentIdFormat)
(id, sortOder) = (null, null);
else if (fileNameFirstSegmentIsIntelligentIdFormat)
(id, sortOder) = (GetId(metadataConfiguration, fileNameFirstSegment), null);

View File

@ -25,15 +25,20 @@ public interface IId
&& fileNameFirstSegment[^1] is '1' or '2' or '8' or '9'
&& fileNameFirstSegment.All(char.IsNumber);
bool TestStatic_NameWithoutExtensionIsIdFormat(string fileNameFirstSegment) =>
NameWithoutExtensionIsIdFormat(fileNameFirstSegment);
static bool NameWithoutExtensionIsIdFormat(string fileNameFirstSegment) =>
Id.NameWithoutExtensionIsIdFormat(fileNameFirstSegment);
short TestStatic_GetSortOrderOnlyLengthIndex(MetadataConfiguration metadataConfiguration) =>
GetSortOrderOnlyLengthIndex(metadataConfiguration);
static short GetSortOrderOnlyLengthIndex(MetadataConfiguration metadataConfiguration) =>
(short)metadataConfiguration.Offset.ToString().Length;
FilePath TestStatic_GetFilePath(MetadataConfiguration metadataConfiguration, string file) =>
GetFilePath(metadataConfiguration, file);
static FilePath GetFilePath(MetadataConfiguration metadataConfiguration, string file) =>
Id.GetFilePath(metadataConfiguration, file);
FilePath TestStatic_GetFilePath(MetadataConfiguration metadataConfiguration, string file, int? index) =>
GetFilePath(metadataConfiguration, file, index);
static FilePath GetFilePath(MetadataConfiguration metadataConfiguration, string file, int? index) =>
Id.GetFilePath(metadataConfiguration, file, index);
int TestStatic_GetDeterministicHashCode(byte[] value) =>
GetDeterministicHashCode(value);