From 82de27ce61a32316d4a3ea8d8f588b2776e78728 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Fri, 22 Dec 2023 16:22:08 -0700 Subject: [PATCH] Videos --- Rename/Rename.cs | 6 ++++-- Shared/Models/Stateless/Id.cs | 27 ++++++++++++++++++++++++-- Shared/Models/Stateless/Methods/IId.cs | 13 +++++++++---- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/Rename/Rename.cs b/Rename/Rename.cs index 555b514..ec4dd06 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -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 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); diff --git a/Shared/Models/Stateless/Id.cs b/Shared/Models/Stateless/Id.cs index cb0fb61..fda44b0 100644 --- a/Shared/Models/Stateless/Id.cs +++ b/Shared/Models/Stateless/Id.cs @@ -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); diff --git a/Shared/Models/Stateless/Methods/IId.cs b/Shared/Models/Stateless/Methods/IId.cs index 80dc2b3..27f0418 100644 --- a/Shared/Models/Stateless/Methods/IId.cs +++ b/Shared/Models/Stateless/Methods/IId.cs @@ -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);