From 48eea2edbd404ba6784946fd3da87fb055379fa9 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Sun, 24 Dec 2023 08:59:45 -0700 Subject: [PATCH] Removed IntelligentIdRecord --- Metadata/Models/A_Metadata.cs | 3 +- Rename/Rename.cs | 7 ++- Shared/Models/FilePath.cs | 59 +++++++++++++++++- Shared/Models/IntelligentIdRecord.cs | 24 -------- Shared/Models/Stateless/Id.cs | 77 ++++++------------------ Shared/Models/Stateless/Methods/IId.cs | 35 +++++------ Shared/Models/Stateless/Methods/IPath.cs | 8 +-- Shared/Models/Stateless/XPath.cs | 14 ++--- Shared/Models/Stateless/XResult.cs | 4 +- 9 files changed, 110 insertions(+), 121 deletions(-) delete mode 100644 Shared/Models/IntelligentIdRecord.cs diff --git a/Metadata/Models/A_Metadata.cs b/Metadata/Models/A_Metadata.cs index 9958d51..38fbb24 100644 --- a/Metadata/Models/A_Metadata.cs +++ b/Metadata/Models/A_Metadata.cs @@ -144,9 +144,10 @@ public class A_Metadata FileInfo fileInfo; FilePath? ffmpegFilePath; ExifDirectory exifDirectory; + FileHolder fileHolder = new(file); ReadOnlyCollection ffmpegFiles; DeterministicHashCode deterministicHashCode; - FilePath filePath = IId.GetFilePath(renameConfiguration.MetadataConfiguration, file, index: null); + FilePath filePath = FilePath.Get(renameConfiguration.MetadataConfiguration, fileHolder, index: null); if (!renameConfiguration.SkipIdFiles || filePath.Id is null || !filePath.IsIntelligentIdFormat && filePath.SortOrder is not null) { (ffmpegFiles, ffmpegFilePath) = rename.ConvertAndGetFfmpegFiles(renameConfiguration, filePath); diff --git a/Rename/Rename.cs b/Rename/Rename.cs index ec4dd06..94128a0 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -61,7 +61,8 @@ 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], index: null); + FileHolder fileHolder = new(results[0]); + result = FilePath.Get(renameConfiguration.MetadataConfiguration, fileHolder, index: null); if (!result.Name.EndsWith("-0001.jpg")) throw new Exception(); isValidImageFormatExtension = renameConfiguration.ValidImageFormatExtensions.Contains(result.ExtensionLowered); @@ -114,6 +115,7 @@ public class Rename : IRename int index = -1; FileInfo fileInfo; FilePath filePath; + FileHolder fileHolder; FilePath? ffmpegFilePath; ExifDirectory exifDirectory; ReadOnlyCollection ffmpegFiles; @@ -122,7 +124,8 @@ public class Rename : IRename { index += 1; rename.Tick(); - filePath = IId.GetFilePath(renameConfiguration.MetadataConfiguration, file, index); + fileHolder = new(file); + filePath = FilePath.Get(renameConfiguration.MetadataConfiguration, fileHolder, 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/FilePath.cs b/Shared/Models/FilePath.cs index ef43f1c..822f6d8 100644 --- a/Shared/Models/FilePath.cs +++ b/Shared/Models/FilePath.cs @@ -1,14 +1,18 @@ using System.Text.Json; using System.Text.Json.Serialization; +using View_by_Distance.Shared.Models.Stateless.Methods; namespace View_by_Distance.Shared.Models; -public record FilePath(string DirectoryName, +public record FilePath(long CreationTicks, + string DirectoryName, string ExtensionLowered, string FileNameFirstSegment, string FullName, int? Id, bool IsIntelligentIdFormat, + long LastWriteTicks, + long Length, string Name, string NameWithoutExtension, int? SortOrder) @@ -20,6 +24,59 @@ public record FilePath(string DirectoryName, return result; } + public static FilePath Get(MetadataConfiguration metadataConfiguration, FileHolder fileHolder, int? index) + { + if (fileHolder.CreationTime is null) + throw new NullReferenceException(nameof(fileHolder.CreationTime)); + if (fileHolder.LastWriteTime is null) + throw new NullReferenceException(nameof(fileHolder.LastWriteTime)); + if (fileHolder.Length is null) + throw new NullReferenceException(nameof(fileHolder.Length)); + FilePath result; + int? id; + int? sortOder; + string fileNameFirstSegment = fileHolder.Name.Split('.')[0]; + int sortOrderOnlyLengthIndex = metadataConfiguration.Offset.ToString().Length; + string fileDirectoryName = fileHolder.DirectoryName ?? throw new NullReferenceException(); + bool fileNameFirstSegmentIsIntelligentIdFormat = IId.NameWithoutExtensionIsIntelligentIdFormat(metadataConfiguration, fileNameFirstSegment); + bool fileNameFirstSegmentIsPaddedIntelligentIdFormat = IId.NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataConfiguration, sortOrderOnlyLengthIndex, fileNameFirstSegment); + bool fileNameFirstSegmentIsIdFormat = !fileNameFirstSegmentIsPaddedIntelligentIdFormat && !fileNameFirstSegmentIsIntelligentIdFormat && IId.NameWithoutExtensionIsIdFormat(metadataConfiguration, fileHolder); + if (!fileNameFirstSegmentIsIdFormat && !fileNameFirstSegmentIsIntelligentIdFormat && !fileNameFirstSegmentIsPaddedIntelligentIdFormat) + (id, sortOder) = (null, null); + else if (fileNameFirstSegmentIsIntelligentIdFormat) + (id, sortOder) = (IId.GetId(metadataConfiguration, fileNameFirstSegment), null); + else if (fileNameFirstSegmentIsPaddedIntelligentIdFormat) + { + if (!int.TryParse(fileNameFirstSegment[..sortOrderOnlyLengthIndex], out int absoluteValueOfSortOrder)) + (id, sortOder) = (null, null); + else + (id, sortOder) = (IId.GetId(metadataConfiguration, fileNameFirstSegment[sortOrderOnlyLengthIndex..]), absoluteValueOfSortOrder); + } + else 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 + throw new NotSupportedException(); + result = new(fileHolder.CreationTime.Value.Ticks, + fileDirectoryName, + fileHolder.ExtensionLowered, + fileNameFirstSegment, + fileHolder.FullName, + id, + fileNameFirstSegmentIsIntelligentIdFormat, + fileHolder.LastWriteTime.Value.Ticks, + fileHolder.Length.Value, + fileHolder.Name, + fileHolder.NameWithoutExtension, + sortOder); + return result; + } + } [JsonSourceGenerationOptions(WriteIndented = true)] diff --git a/Shared/Models/IntelligentIdRecord.cs b/Shared/Models/IntelligentIdRecord.cs deleted file mode 100644 index 35e7bb2..0000000 --- a/Shared/Models/IntelligentIdRecord.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace View_by_Distance.Shared.Models; - -public record IntelligentIdRecord(int Key, - char GroupChar2, - char GroupChar1, - string Reverse) -{ - - public override string ToString() - { - string result = JsonSerializer.Serialize(this, IntelligentIdRecordSourceGenerationContext.Default.IntelligentIdRecord); - return result; - } - -} - -[JsonSourceGenerationOptions(WriteIndented = true)] -[JsonSerializable(typeof(IntelligentIdRecord))] -internal partial class IntelligentIdRecordSourceGenerationContext : JsonSerializerContext -{ -} \ No newline at end of file diff --git a/Shared/Models/Stateless/Id.cs b/Shared/Models/Stateless/Id.cs index fda44b0..2b74513 100644 --- a/Shared/Models/Stateless/Id.cs +++ b/Shared/Models/Stateless/Id.cs @@ -1,33 +1,31 @@ using System.Text; -using View_by_Distance.Shared.Models.Stateless.Methods; namespace View_by_Distance.Shared.Models.Stateless; internal abstract class Id { - internal static bool NameWithoutExtensionIsIdFormat(string fileNameFirstSegment) + internal static bool NameWithoutExtensionIsIdFormat(MetadataConfiguration metadataConfiguration, string fileNameFirstSegment) { bool result; - int intMinValueLength = int.MinValue.ToString().Length; - if (fileNameFirstSegment.Length < 5 || fileNameFirstSegment.Length > intMinValueLength) + if (fileNameFirstSegment.Length < 5 || fileNameFirstSegment.Length > metadataConfiguration.IntMinValueLength) result = false; else { - bool skipOneAllAreNumbers = fileNameFirstSegment[1..].All(l => char.IsNumber(l)); + bool skipOneAllAreNumbers = fileNameFirstSegment[1..].All(char.IsNumber); result = (skipOneAllAreNumbers && fileNameFirstSegment[0] == '-') || (skipOneAllAreNumbers && char.IsNumber(fileNameFirstSegment[0])); } return result; } - private static int GetId(MetadataConfiguration metadataConfiguration, string intelligentId) + internal static int GetId(MetadataConfiguration metadataConfiguration, string intelligentId) { int result; StringBuilder results = new(); - if (metadataConfiguration.IntMinValueLength < 4) + if (metadataConfiguration.IntMinValueLength < (metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength + 2)) throw new NotSupportedException(); - for (int j = intelligentId.Length - 4; j > -1; j--) - _ = results.Append(intelligentId[j]); + for (int i = intelligentId.Length - (metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength + 2); i > -1; i--) + _ = results.Append(intelligentId[i]); _ = results.Append(intelligentId[^3]).Append(intelligentId[^2]); result = int.Parse(results.ToString()); if (intelligentId[^1] is '1' or '2') @@ -37,14 +35,15 @@ internal abstract class Id return result; } - private static IntelligentIdRecord GetIntelligentIdRecord(MetadataConfiguration metadataConfiguration, long id, bool ignore) + internal static string GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool ignore) { - IntelligentIdRecord result; + string result; StringBuilder stringBuilder = new(); - if (metadataConfiguration.IntMinValueLength < 4) + if (metadataConfiguration.IntMinValueLength < (metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength + 2)) throw new NotSupportedException(); int key; string value; + List resultAllInOneSubdirectoryChars = []; if (id > -1) { key = ignore ? 8 : 9; @@ -55,20 +54,18 @@ internal abstract class Id key = ignore ? 2 : 1; value = id.ToString()[1..].PadLeft(metadataConfiguration.IntMinValueLength, '0'); } - for (int j = value.Length - 3; j > -1; j--) - _ = stringBuilder.Append(value[j]); - result = new(key, value[^2], value[^1], stringBuilder.ToString()); + for (int i = value.Length - metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength - 1; i > -1; i--) + _ = stringBuilder.Append(value[i]); + for (int i = value.Length - metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength; i < value.Length; i++) + resultAllInOneSubdirectoryChars.Add(value[i]); + result = $"{stringBuilder}{string.Join(string.Empty, resultAllInOneSubdirectoryChars)}{key}"; return result; } - private static string GetIntelligentId(IntelligentIdRecord intelligentId) => - $"{intelligentId.Reverse}{intelligentId.GroupChar2}{intelligentId.GroupChar1}{intelligentId.Key}"; - internal static string GetPaddedId(MetadataConfiguration metadataConfiguration, int index, int id) { string result; - IntelligentIdRecord intelligentIdRecord = GetIntelligentIdRecord(metadataConfiguration, id, ignore: false); - string intelligentId = GetIntelligentId(intelligentIdRecord); + string intelligentId = GetIntelligentId(metadataConfiguration, id, ignore: false); int check = GetId(metadataConfiguration, intelligentId); if (check != id) throw new NotSupportedException(); @@ -76,46 +73,6 @@ internal abstract class Id return result; } - internal static FilePath GetFilePath(MetadataConfiguration metadataConfiguration, string file, int? index) - { - FilePath result; - int? id; - int? sortOder; - string fileName = Path.GetFileName(file); - string[] segments = Path.GetFileName(fileName).Split('.'); - string fileExtensionLowered = Path.GetExtension(file).ToLower(); - string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file); - string fileDirectoryName = Path.GetDirectoryName(file) ?? throw new NullReferenceException(); - short sortOrderOnlyLengthIndex = IId.GetSortOrderOnlyLengthIndex(metadataConfiguration); - string fileNameFirstSegment = segments[0]; - bool fileNameFirstSegmentIsIntelligentIdFormat = IId.NameWithoutExtensionIsIntelligentIdFormat(metadataConfiguration, fileNameFirstSegment); - bool fileNameFirstSegmentIsPaddedIntelligentIdFormat = IId.NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataConfiguration, sortOrderOnlyLengthIndex, fileNameFirstSegment); - 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); - else if (fileNameFirstSegmentIsPaddedIntelligentIdFormat) - { - if (!int.TryParse(fileNameFirstSegment[..sortOrderOnlyLengthIndex], out int absoluteValueOfSortOrder)) - (id, sortOder) = (null, null); - else - (id, sortOder) = (GetId(metadataConfiguration, fileNameFirstSegment[sortOrderOnlyLengthIndex..]), absoluteValueOfSortOrder); - } - else - throw new NotSupportedException(); - result = new(fileDirectoryName, fileExtensionLowered, fileNameFirstSegment, file, id, fileNameFirstSegmentIsIntelligentIdFormat, fileName, fileNameWithoutExtension, sortOder); - return result; - } - internal static int GetDeterministicHashCode(byte[] value) { int result; diff --git a/Shared/Models/Stateless/Methods/IId.cs b/Shared/Models/Stateless/Methods/IId.cs index 27f0418..f26d18c 100644 --- a/Shared/Models/Stateless/Methods/IId.cs +++ b/Shared/Models/Stateless/Methods/IId.cs @@ -3,10 +3,15 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods; public interface IId { - string TestStatic_GetIntelligentId(IntelligentIdRecord intelligentId) => - GetIntelligentId(intelligentId); - static string GetIntelligentId(IntelligentIdRecord intelligentId) => - $"{intelligentId.Reverse}{intelligentId.GroupChar2}{intelligentId.GroupChar1}{intelligentId.Key}"; + 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); + + 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 index, int id) => GetPaddedId(metadataConfiguration, index, id); @@ -18,27 +23,17 @@ public interface IId static bool NameWithoutExtensionIsIntelligentIdFormat(MetadataConfiguration metadataConfiguration, string fileNameFirstSegment) => fileNameFirstSegment.Length - 1 == metadataConfiguration.IntMinValueLength && fileNameFirstSegment[^1] is '1' or '2' or '8' or '9' && fileNameFirstSegment.All(char.IsNumber); - bool TestStatic_NameWithoutExtensionIsPaddedIntelligentIdFormat(MetadataConfiguration metadataConfiguration, short sortOrderOnlyLengthIndex, string fileNameFirstSegment) => + bool TestStatic_NameWithoutExtensionIsPaddedIntelligentIdFormat(MetadataConfiguration metadataConfiguration, int sortOrderOnlyLengthIndex, string fileNameFirstSegment) => NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataConfiguration, sortOrderOnlyLengthIndex, fileNameFirstSegment); - static bool NameWithoutExtensionIsPaddedIntelligentIdFormat(MetadataConfiguration metadataConfiguration, short sortOrderOnlyLengthIndex, string fileNameFirstSegment) => + static bool NameWithoutExtensionIsPaddedIntelligentIdFormat(MetadataConfiguration metadataConfiguration, int sortOrderOnlyLengthIndex, string fileNameFirstSegment) => fileNameFirstSegment.Length == metadataConfiguration.IntMinValueLength + sortOrderOnlyLengthIndex + 1 && 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, int? index) => - GetFilePath(metadataConfiguration, file, index); - static FilePath GetFilePath(MetadataConfiguration metadataConfiguration, string file, int? index) => - Id.GetFilePath(metadataConfiguration, file, index); + bool TestStatic_NameWithoutExtensionIsIdFormat(MetadataConfiguration metadataConfiguration, FileHolder fileHolder) => + NameWithoutExtensionIsIdFormat(metadataConfiguration, fileHolder); + static bool NameWithoutExtensionIsIdFormat(MetadataConfiguration metadataConfiguration, FileHolder fileHolder) => + Id.NameWithoutExtensionIsIdFormat(metadataConfiguration, fileHolder.NameWithoutExtension.Split('.')[0]); int TestStatic_GetDeterministicHashCode(byte[] value) => GetDeterministicHashCode(value); diff --git a/Shared/Models/Stateless/Methods/IPath.cs b/Shared/Models/Stateless/Methods/IPath.cs index 2437712..5b6ca45 100644 --- a/Shared/Models/Stateless/Methods/IPath.cs +++ b/Shared/Models/Stateless/Methods/IPath.cs @@ -76,9 +76,9 @@ public interface IPath static (string, int) GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, int id) => XPath.GetDirectoryNameAndIndex(resultConfiguration, id); - ReadOnlyDictionary> TestStatic_GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? directories) => - GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, directories); - static ReadOnlyDictionary> GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? directories) => - XPath.GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, directories); + ReadOnlyDictionary> TestStatic_GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) => + GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, jsonGroups); + static ReadOnlyDictionary> GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) => + XPath.GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, jsonGroups); } \ No newline at end of file diff --git a/Shared/Models/Stateless/XPath.cs b/Shared/Models/Stateless/XPath.cs index 0c3b8cc..69580ee 100644 --- a/Shared/Models/Stateless/XPath.cs +++ b/Shared/Models/Stateless/XPath.cs @@ -324,7 +324,7 @@ internal abstract class XPath return new(results); } - internal static ReadOnlyDictionary> GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? directories) + internal static ReadOnlyDictionary> GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) { Dictionary> results = []; string directory; @@ -339,16 +339,16 @@ internal abstract class XPath results.Add(year, []); if (!results.TryGetValue(year, out keyValuePairs)) throw new NullReferenceException(nameof(keyValuePairs)); - if (directories is not null) + if (jsonGroups is not null) { - foreach (string key in directories) + foreach (string jsonGroup in jsonGroups) { if (resultsFullGroupDirectory is null) continue; collection.Clear(); for (int i = 0; i < plusOne; i++) { - if (string.IsNullOrEmpty(key)) + if (string.IsNullOrEmpty(jsonGroup)) { if (i == converted) checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, new('-', resultConfiguration.ResultAllInOneSubdirectoryLength))); @@ -357,7 +357,7 @@ internal abstract class XPath } else { - directory = Path.Combine(resultsFullGroupDirectory, key, year.ToString()); + directory = Path.Combine(resultsFullGroupDirectory, jsonGroup); if (i == converted) checkDirectory = Path.GetFullPath(Path.Combine(directory, new('-', resultConfiguration.ResultAllInOneSubdirectoryLength))); else @@ -367,8 +367,8 @@ internal abstract class XPath _ = Directory.CreateDirectory(checkDirectory); collection.Add(checkDirectory); } - if (!string.IsNullOrEmpty(key)) - keyValuePairs.Add(key, collection.ToArray()); + if (!string.IsNullOrEmpty(jsonGroup)) + keyValuePairs.Add(jsonGroup, collection.ToArray()); else keyValuePairs.Add(year.ToString(), collection.ToArray()); } diff --git a/Shared/Models/Stateless/XResult.cs b/Shared/Models/Stateless/XResult.cs index 8ccca68..78ed76d 100644 --- a/Shared/Models/Stateless/XResult.cs +++ b/Shared/Models/Stateless/XResult.cs @@ -25,13 +25,13 @@ internal abstract class XResult return result; } - private static void VerifyDirectories(ResultConfiguration resultConfiguration, string dateGroupDirectory, string key) + private static void VerifyDirectories(ResultConfiguration resultConfiguration, string dateGroupDirectory, string jsonGroup) { string checkDirectory; int currentYear = DateTime.Now.Year; for (int i = resultConfiguration.EpicYear; i < currentYear + 1; i++) { - checkDirectory = Path.Combine(dateGroupDirectory, key, i.ToString()); + checkDirectory = Path.Combine(dateGroupDirectory, jsonGroup, i.ToString()); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); }