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

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);