Removed IntelligentIdRecord

This commit is contained in:
Mike Phares 2023-12-24 08:59:45 -07:00
parent 1f00696bf3
commit 48eea2edbd
9 changed files with 110 additions and 121 deletions

View File

@ -144,9 +144,10 @@ public class A_Metadata
FileInfo fileInfo; FileInfo fileInfo;
FilePath? ffmpegFilePath; FilePath? ffmpegFilePath;
ExifDirectory exifDirectory; ExifDirectory exifDirectory;
FileHolder fileHolder = new(file);
ReadOnlyCollection<string> ffmpegFiles; ReadOnlyCollection<string> ffmpegFiles;
DeterministicHashCode deterministicHashCode; 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) if (!renameConfiguration.SkipIdFiles || filePath.Id is null || !filePath.IsIntelligentIdFormat && filePath.SortOrder is not null)
{ {
(ffmpegFiles, ffmpegFilePath) = rename.ConvertAndGetFfmpegFiles(renameConfiguration, filePath); (ffmpegFiles, ffmpegFilePath) = rename.ConvertAndGetFfmpegFiles(renameConfiguration, filePath);

View File

@ -61,7 +61,8 @@ public class Rename : IRename
results.AddRange(Directory.GetFiles(filePath.DirectoryName, $"{filePath.Name}-*.jpg", SearchOption.TopDirectoryOnly)); results.AddRange(Directory.GetFiles(filePath.DirectoryName, $"{filePath.Name}-*.jpg", SearchOption.TopDirectoryOnly));
if (results.Count == 0) if (results.Count == 0)
throw new Exception(); 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")) if (!result.Name.EndsWith("-0001.jpg"))
throw new Exception(); throw new Exception();
isValidImageFormatExtension = renameConfiguration.ValidImageFormatExtensions.Contains(result.ExtensionLowered); isValidImageFormatExtension = renameConfiguration.ValidImageFormatExtensions.Contains(result.ExtensionLowered);
@ -114,6 +115,7 @@ public class Rename : IRename
int index = -1; int index = -1;
FileInfo fileInfo; FileInfo fileInfo;
FilePath filePath; FilePath filePath;
FileHolder fileHolder;
FilePath? ffmpegFilePath; FilePath? ffmpegFilePath;
ExifDirectory exifDirectory; ExifDirectory exifDirectory;
ReadOnlyCollection<string> ffmpegFiles; ReadOnlyCollection<string> ffmpegFiles;
@ -122,7 +124,8 @@ public class Rename : IRename
{ {
index += 1; index += 1;
rename.Tick(); 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)) if (renameConfiguration.SkipIdFiles && filePath.Id is not null && (filePath.IsIntelligentIdFormat || filePath.SortOrder is not null))
continue; continue;
(ffmpegFiles, ffmpegFilePath) = rename.ConvertAndGetFfmpegFiles(renameConfiguration, filePath); (ffmpegFiles, ffmpegFilePath) = rename.ConvertAndGetFfmpegFiles(renameConfiguration, filePath);

View File

@ -1,14 +1,18 @@
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using View_by_Distance.Shared.Models.Stateless.Methods;
namespace View_by_Distance.Shared.Models; namespace View_by_Distance.Shared.Models;
public record FilePath(string DirectoryName, public record FilePath(long CreationTicks,
string DirectoryName,
string ExtensionLowered, string ExtensionLowered,
string FileNameFirstSegment, string FileNameFirstSegment,
string FullName, string FullName,
int? Id, int? Id,
bool IsIntelligentIdFormat, bool IsIntelligentIdFormat,
long LastWriteTicks,
long Length,
string Name, string Name,
string NameWithoutExtension, string NameWithoutExtension,
int? SortOrder) int? SortOrder)
@ -20,6 +24,59 @@ public record FilePath(string DirectoryName,
return result; 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)] [JsonSourceGenerationOptions(WriteIndented = true)]

View File

@ -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
{
}

View File

@ -1,33 +1,31 @@
using System.Text; using System.Text;
using View_by_Distance.Shared.Models.Stateless.Methods;
namespace View_by_Distance.Shared.Models.Stateless; namespace View_by_Distance.Shared.Models.Stateless;
internal abstract class Id internal abstract class Id
{ {
internal static bool NameWithoutExtensionIsIdFormat(string fileNameFirstSegment) internal static bool NameWithoutExtensionIsIdFormat(MetadataConfiguration metadataConfiguration, string fileNameFirstSegment)
{ {
bool result; bool result;
int intMinValueLength = int.MinValue.ToString().Length; if (fileNameFirstSegment.Length < 5 || fileNameFirstSegment.Length > metadataConfiguration.IntMinValueLength)
if (fileNameFirstSegment.Length < 5 || fileNameFirstSegment.Length > intMinValueLength)
result = false; result = false;
else 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])); result = (skipOneAllAreNumbers && fileNameFirstSegment[0] == '-') || (skipOneAllAreNumbers && char.IsNumber(fileNameFirstSegment[0]));
} }
return result; return result;
} }
private static int GetId(MetadataConfiguration metadataConfiguration, string intelligentId) internal static int GetId(MetadataConfiguration metadataConfiguration, string intelligentId)
{ {
int result; int result;
StringBuilder results = new(); StringBuilder results = new();
if (metadataConfiguration.IntMinValueLength < 4) if (metadataConfiguration.IntMinValueLength < (metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength + 2))
throw new NotSupportedException(); throw new NotSupportedException();
for (int j = intelligentId.Length - 4; j > -1; j--) for (int i = intelligentId.Length - (metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength + 2); i > -1; i--)
_ = results.Append(intelligentId[j]); _ = results.Append(intelligentId[i]);
_ = results.Append(intelligentId[^3]).Append(intelligentId[^2]); _ = results.Append(intelligentId[^3]).Append(intelligentId[^2]);
result = int.Parse(results.ToString()); result = int.Parse(results.ToString());
if (intelligentId[^1] is '1' or '2') if (intelligentId[^1] is '1' or '2')
@ -37,14 +35,15 @@ internal abstract class Id
return result; 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(); StringBuilder stringBuilder = new();
if (metadataConfiguration.IntMinValueLength < 4) if (metadataConfiguration.IntMinValueLength < (metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength + 2))
throw new NotSupportedException(); throw new NotSupportedException();
int key; int key;
string value; string value;
List<char> resultAllInOneSubdirectoryChars = [];
if (id > -1) if (id > -1)
{ {
key = ignore ? 8 : 9; key = ignore ? 8 : 9;
@ -55,20 +54,18 @@ internal abstract class Id
key = ignore ? 2 : 1; key = ignore ? 2 : 1;
value = id.ToString()[1..].PadLeft(metadataConfiguration.IntMinValueLength, '0'); value = id.ToString()[1..].PadLeft(metadataConfiguration.IntMinValueLength, '0');
} }
for (int j = value.Length - 3; j > -1; j--) for (int i = value.Length - metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength - 1; i > -1; i--)
_ = stringBuilder.Append(value[j]); _ = stringBuilder.Append(value[i]);
result = new(key, value[^2], value[^1], stringBuilder.ToString()); 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; 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) internal static string GetPaddedId(MetadataConfiguration metadataConfiguration, int index, int id)
{ {
string result; string result;
IntelligentIdRecord intelligentIdRecord = GetIntelligentIdRecord(metadataConfiguration, id, ignore: false); string intelligentId = GetIntelligentId(metadataConfiguration, id, ignore: false);
string intelligentId = GetIntelligentId(intelligentIdRecord);
int check = GetId(metadataConfiguration, intelligentId); int check = GetId(metadataConfiguration, intelligentId);
if (check != id) if (check != id)
throw new NotSupportedException(); throw new NotSupportedException();
@ -76,46 +73,6 @@ internal abstract class Id
return result; 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) internal static int GetDeterministicHashCode(byte[] value)
{ {
int result; int result;

View File

@ -3,10 +3,15 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
public interface IId public interface IId
{ {
string TestStatic_GetIntelligentId(IntelligentIdRecord intelligentId) => string TestStatic_GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool ignore) =>
GetIntelligentId(intelligentId); GetIntelligentId(metadataConfiguration, id, ignore);
static string GetIntelligentId(IntelligentIdRecord intelligentId) => static string GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool ignore) =>
$"{intelligentId.Reverse}{intelligentId.GroupChar2}{intelligentId.GroupChar1}{intelligentId.Key}"; 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) => string TestStatic_GetPaddedId(MetadataConfiguration metadataConfiguration, int index, int id) =>
GetPaddedId(metadataConfiguration, index, id); GetPaddedId(metadataConfiguration, index, id);
@ -18,27 +23,17 @@ public interface IId
static bool NameWithoutExtensionIsIntelligentIdFormat(MetadataConfiguration metadataConfiguration, string fileNameFirstSegment) => 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); 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); 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.Length == metadataConfiguration.IntMinValueLength + sortOrderOnlyLengthIndex + 1
&& fileNameFirstSegment[^1] is '1' or '2' or '8' or '9' && fileNameFirstSegment[^1] is '1' or '2' or '8' or '9'
&& fileNameFirstSegment.All(char.IsNumber); && fileNameFirstSegment.All(char.IsNumber);
bool TestStatic_NameWithoutExtensionIsIdFormat(string fileNameFirstSegment) => bool TestStatic_NameWithoutExtensionIsIdFormat(MetadataConfiguration metadataConfiguration, FileHolder fileHolder) =>
NameWithoutExtensionIsIdFormat(fileNameFirstSegment); NameWithoutExtensionIsIdFormat(metadataConfiguration, fileHolder);
static bool NameWithoutExtensionIsIdFormat(string fileNameFirstSegment) => static bool NameWithoutExtensionIsIdFormat(MetadataConfiguration metadataConfiguration, FileHolder fileHolder) =>
Id.NameWithoutExtensionIsIdFormat(fileNameFirstSegment); Id.NameWithoutExtensionIsIdFormat(metadataConfiguration, fileHolder.NameWithoutExtension.Split('.')[0]);
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);
int TestStatic_GetDeterministicHashCode(byte[] value) => int TestStatic_GetDeterministicHashCode(byte[] value) =>
GetDeterministicHashCode(value); GetDeterministicHashCode(value);

View File

@ -76,9 +76,9 @@ public interface IPath
static (string, int) GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, int id) => static (string, int) GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, int id) =>
XPath.GetDirectoryNameAndIndex(resultConfiguration, id); XPath.GetDirectoryNameAndIndex(resultConfiguration, id);
ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> TestStatic_GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? directories) => ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> TestStatic_GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) =>
GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, directories); GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, jsonGroups);
static ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? directories) => static ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) =>
XPath.GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, directories); XPath.GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, jsonGroups);
} }

View File

@ -324,7 +324,7 @@ internal abstract class XPath
return new(results); return new(results);
} }
internal static ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? directories) internal static ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups)
{ {
Dictionary<int, Dictionary<string, string[]>> results = []; Dictionary<int, Dictionary<string, string[]>> results = [];
string directory; string directory;
@ -339,16 +339,16 @@ internal abstract class XPath
results.Add(year, []); results.Add(year, []);
if (!results.TryGetValue(year, out keyValuePairs)) if (!results.TryGetValue(year, out keyValuePairs))
throw new NullReferenceException(nameof(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) if (resultsFullGroupDirectory is null)
continue; continue;
collection.Clear(); collection.Clear();
for (int i = 0; i < plusOne; i++) for (int i = 0; i < plusOne; i++)
{ {
if (string.IsNullOrEmpty(key)) if (string.IsNullOrEmpty(jsonGroup))
{ {
if (i == converted) if (i == converted)
checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, new('-', resultConfiguration.ResultAllInOneSubdirectoryLength))); checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, new('-', resultConfiguration.ResultAllInOneSubdirectoryLength)));
@ -357,7 +357,7 @@ internal abstract class XPath
} }
else else
{ {
directory = Path.Combine(resultsFullGroupDirectory, key, year.ToString()); directory = Path.Combine(resultsFullGroupDirectory, jsonGroup);
if (i == converted) if (i == converted)
checkDirectory = Path.GetFullPath(Path.Combine(directory, new('-', resultConfiguration.ResultAllInOneSubdirectoryLength))); checkDirectory = Path.GetFullPath(Path.Combine(directory, new('-', resultConfiguration.ResultAllInOneSubdirectoryLength)));
else else
@ -367,8 +367,8 @@ internal abstract class XPath
_ = Directory.CreateDirectory(checkDirectory); _ = Directory.CreateDirectory(checkDirectory);
collection.Add(checkDirectory); collection.Add(checkDirectory);
} }
if (!string.IsNullOrEmpty(key)) if (!string.IsNullOrEmpty(jsonGroup))
keyValuePairs.Add(key, collection.ToArray()); keyValuePairs.Add(jsonGroup, collection.ToArray());
else else
keyValuePairs.Add(year.ToString(), collection.ToArray()); keyValuePairs.Add(year.ToString(), collection.ToArray());
} }

View File

@ -25,13 +25,13 @@ internal abstract class XResult
return result; return result;
} }
private static void VerifyDirectories(ResultConfiguration resultConfiguration, string dateGroupDirectory, string key) private static void VerifyDirectories(ResultConfiguration resultConfiguration, string dateGroupDirectory, string jsonGroup)
{ {
string checkDirectory; string checkDirectory;
int currentYear = DateTime.Now.Year; int currentYear = DateTime.Now.Year;
for (int i = resultConfiguration.EpicYear; i < currentYear + 1; i++) 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)) if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory); _ = Directory.CreateDirectory(checkDirectory);
} }