AA.Compare Project to Match not runToDoCollectionFirst
Removed Layered AppSettings with Nested Objects at First Level
This commit is contained in:
44
Shared/Models/DistanceSettings.cs
Normal file
44
Shared/Models/DistanceSettings.cs
Normal file
@ -0,0 +1,44 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record DistanceSettings(bool DistanceMoveUnableToMatch,
|
||||
int FaceAreaPermyriad,
|
||||
int FaceConfidencePercent,
|
||||
int FaceDistancePermyriad,
|
||||
string FocusDirectory,
|
||||
string FocusModel,
|
||||
string LinkedAlpha,
|
||||
string LocationContainerDebugDirectory,
|
||||
string LocationContainerDirectoryPattern,
|
||||
int LocationDigits,
|
||||
int LocationFactor,
|
||||
string MappingDefaultName,
|
||||
int[] RangeDaysDeltaTolerance,
|
||||
float[] RangeDistanceTolerance,
|
||||
float[] RangeFaceAreaTolerance,
|
||||
float[] RangeFaceConfidence,
|
||||
bool ReMap,
|
||||
bool SaveIndividually,
|
||||
bool SaveSortingWithoutPerson,
|
||||
string[] SkipNotSkipDirectories,
|
||||
int SkipOlderThanDays,
|
||||
int SkipPersonWithMoreThen,
|
||||
int SortingMaximumPerFaceShouldBeHigh,
|
||||
bool UseExtraPersonKeyCheck)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, DistanceSettingsSourceGenerationContext.Default.DistanceSettings);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(DistanceSettings))]
|
||||
internal partial class DistanceSettingsSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
@ -4,15 +4,16 @@ using System.Text.Json.Serialization;
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record ExifDirectory(AviDirectory[] AviDirectories,
|
||||
object? Encoding,
|
||||
ExifDirectoryBase[] ExifBaseDirectories,
|
||||
FileMetadataDirectory[] FileMetadataDirectories,
|
||||
FilePath FilePath,
|
||||
GifHeaderDirectory[] GifHeaderDirectories,
|
||||
GpsDirectory[] GpsDirectories,
|
||||
int? Height,
|
||||
int? Id,
|
||||
JpegDirectory[] JpegDirectories,
|
||||
MakernoteDirectory[] MakernoteDirectories,
|
||||
string OriginalFileName,
|
||||
PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName? PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName,
|
||||
PhotoshopDirectory[] PhotoshopDirectories,
|
||||
PngDirectory[] PngDirectories,
|
||||
QuickTimeMovieHeaderDirectory[] QuickTimeMovieHeaderDirectories,
|
||||
@ -27,6 +28,25 @@ public record ExifDirectory(AviDirectory[] AviDirectories,
|
||||
return result;
|
||||
}
|
||||
|
||||
public static ExifDirectory Get(object encoding, ExifDirectory e) =>
|
||||
new(e.AviDirectories,
|
||||
encoding,
|
||||
e.ExifBaseDirectories,
|
||||
e.FileMetadataDirectories,
|
||||
e.FilePath,
|
||||
e.GifHeaderDirectories,
|
||||
e.GpsDirectories,
|
||||
e.Height,
|
||||
e.JpegDirectories,
|
||||
e.MakernoteDirectories,
|
||||
e.PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName,
|
||||
e.PhotoshopDirectories,
|
||||
e.PngDirectories,
|
||||
e.QuickTimeMovieHeaderDirectories,
|
||||
e.QuickTimeTrackHeaderDirectories,
|
||||
e.WebPDirectories,
|
||||
e.Width);
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
|
53
Shared/Models/FaceDistance.cs
Normal file
53
Shared/Models/FaceDistance.cs
Normal file
@ -0,0 +1,53 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record class FaceDistance : Properties.IFaceDistance
|
||||
{
|
||||
|
||||
public int? ConfidencePercent { init; get; }
|
||||
public DateTime DateTimeOriginalThenMinimumDateTime { init; get; }
|
||||
public object? Encoding { init; get; }
|
||||
public MappingFromFilterPost? MappingFromFilterPost { init; get; }
|
||||
public int? Id { init; get; }
|
||||
public bool? IsWrongYear { init; get; }
|
||||
public double? Length { init; get; }
|
||||
public int? WholePercentages { init; get; }
|
||||
|
||||
[JsonConstructor]
|
||||
public FaceDistance(int? confidencePercent, DateTime dateTimeOriginalThenMinimumDateTime, object? encoding, MappingFromFilterPost? mappingFromFilterPost, int? id, bool? isWrongYear, double? length, int? wholePercentages)
|
||||
{
|
||||
ConfidencePercent = confidencePercent;
|
||||
DateTimeOriginalThenMinimumDateTime = dateTimeOriginalThenMinimumDateTime;
|
||||
Encoding = encoding;
|
||||
MappingFromFilterPost = mappingFromFilterPost;
|
||||
Id = id;
|
||||
IsWrongYear = isWrongYear;
|
||||
Length = length;
|
||||
WholePercentages = wholePercentages;
|
||||
}
|
||||
|
||||
public FaceDistance(int? confidencePercent, DateTime dateTimeOriginalThenMinimumDateTime, object? encoding, MappingFromFilterPost? mappingFromFilterPost, int id, bool? isWrongYear, int? wholePercentages) :
|
||||
this(confidencePercent, dateTimeOriginalThenMinimumDateTime, encoding, mappingFromFilterPost, id, isWrongYear, null, wholePercentages)
|
||||
{ }
|
||||
|
||||
public FaceDistance(FaceDistance faceDistance, double length) :
|
||||
this(faceDistance.ConfidencePercent, faceDistance.DateTimeOriginalThenMinimumDateTime, null, faceDistance.MappingFromFilterPost, faceDistance.Id, faceDistance.IsWrongYear, length, faceDistance.WholePercentages)
|
||||
{ }
|
||||
|
||||
public FaceDistance(object encoding) => Encoding = encoding;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, FaceDistanceSourceGenerationContext.Default.FaceDistance);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(FaceDistance))]
|
||||
internal partial class FaceDistanceSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
22
Shared/Models/FacePartAndFacePointArray.cs
Normal file
22
Shared/Models/FacePartAndFacePointArray.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using View_by_Distance.Shared.Models.Stateless;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record FacePartAndFacePointArray(FacePart FacePart, FacePoint[] FacePoints)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, FacePartAndFacePointArraySourceGenerationContext.Default.FacePartAndFacePointArray);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
[JsonSerializable(typeof(FacePartAndFacePointArray))]
|
||||
public partial class FacePartAndFacePointArraySourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
22
Shared/Models/FaceRecognitionGroup.cs
Normal file
22
Shared/Models/FaceRecognitionGroup.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record FaceRecognitionGroup(Location Location, ReadOnlyCollection<FaceEncoding?> FaceEncodings, ReadOnlyCollection<ReadOnlyCollection<FacePartAndFacePointArray>> FaceParts)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, FaceRecognitionGroupSourceGenerationContext.Default.FaceRecognitionGroup);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
[JsonSerializable(typeof(FaceRecognitionGroup))]
|
||||
public partial class FaceRecognitionGroupSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
@ -51,7 +51,8 @@ public record FileHolder(DateTime? CreationTime,
|
||||
public static FileHolder Get(FilePath filePath, int? id)
|
||||
{
|
||||
FileHolder result;
|
||||
result = new(new(filePath.CreationTicks),
|
||||
DateTime dateTime = new(filePath.CreationTicks);
|
||||
result = new(dateTime,
|
||||
filePath.DirectoryFullPath,
|
||||
true,
|
||||
filePath.ExtensionLowered,
|
||||
|
@ -26,7 +26,7 @@ public record FilePath(long CreationTicks,
|
||||
return result;
|
||||
}
|
||||
|
||||
public static FilePath Get(MetadataConfiguration metadataConfiguration, FileHolder fileHolder, int? index)
|
||||
public static FilePath Get(ResultSettings resultSettings, MetadataSettings metadataSettings, FileHolder fileHolder, int? index)
|
||||
{
|
||||
if (fileHolder.CreationTime is null)
|
||||
fileHolder = FileHolder.Get(fileHolder);
|
||||
@ -40,23 +40,23 @@ public record FilePath(long CreationTicks,
|
||||
int? id;
|
||||
int? sortOder;
|
||||
string fileNameFirstSegment = fileHolder.Name.Split('.')[0];
|
||||
int sortOrderOnlyLengthIndex = metadataConfiguration.Offset.ToString().Length;
|
||||
int sortOrderOnlyLengthIndex = metadataSettings.Offset.ToString().Length;
|
||||
string fileDirectoryFullPath = fileHolder.DirectoryFullPath ?? throw new NullReferenceException();
|
||||
bool isIntelligentIdFormat = IId.NameWithoutExtensionIsIntelligentIdFormat(metadataConfiguration, fileNameFirstSegment);
|
||||
bool isPaddedIntelligentIdFormat = IId.NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataConfiguration, sortOrderOnlyLengthIndex, fileNameFirstSegment);
|
||||
bool fileNameFirstSegmentIsIdFormat = !isPaddedIntelligentIdFormat && !isIntelligentIdFormat && IId.NameWithoutExtensionIsIdFormat(metadataConfiguration, fileHolder);
|
||||
bool isIntelligentIdFormat = IId.NameWithoutExtensionIsIntelligentIdFormat(metadataSettings, fileNameFirstSegment);
|
||||
bool isPaddedIntelligentIdFormat = IId.NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataSettings, sortOrderOnlyLengthIndex, fileNameFirstSegment);
|
||||
bool fileNameFirstSegmentIsIdFormat = !isPaddedIntelligentIdFormat && !isIntelligentIdFormat && IId.NameWithoutExtensionIsIdFormat(metadataSettings, fileHolder);
|
||||
bool? hasIgnoreKeyword = !isIntelligentIdFormat && !isPaddedIntelligentIdFormat ? null : fileNameFirstSegment[^1] is '2' or '8';
|
||||
bool? hasDateTimeOriginal = !isIntelligentIdFormat && !isPaddedIntelligentIdFormat ? null : fileNameFirstSegment[^1] is '1' or '9';
|
||||
if (!fileNameFirstSegmentIsIdFormat && !isIntelligentIdFormat && !isPaddedIntelligentIdFormat)
|
||||
(id, sortOder) = (null, null);
|
||||
else if (isIntelligentIdFormat)
|
||||
(id, sortOder) = (IId.GetId(metadataConfiguration, fileNameFirstSegment), null);
|
||||
(id, sortOder) = (IId.GetId(resultSettings, metadataSettings, fileNameFirstSegment), null);
|
||||
else if (isPaddedIntelligentIdFormat)
|
||||
{
|
||||
if (!int.TryParse(fileNameFirstSegment[..sortOrderOnlyLengthIndex], out int absoluteValueOfSortOrder))
|
||||
(id, sortOder) = (null, null);
|
||||
else
|
||||
(id, sortOder) = (IId.GetId(metadataConfiguration, fileNameFirstSegment[sortOrderOnlyLengthIndex..]), absoluteValueOfSortOrder);
|
||||
(id, sortOder) = (IId.GetId(resultSettings, metadataSettings, fileNameFirstSegment[sortOrderOnlyLengthIndex..]), absoluteValueOfSortOrder);
|
||||
}
|
||||
else if (fileNameFirstSegmentIsIdFormat)
|
||||
{
|
||||
@ -64,7 +64,7 @@ public record FilePath(long CreationTicks,
|
||||
throw new NullReferenceException(nameof(index));
|
||||
if (!int.TryParse(fileNameFirstSegment, out int valueOfFileNameFirstSegment))
|
||||
throw new NotSupportedException();
|
||||
(id, sortOder) = (valueOfFileNameFirstSegment, metadataConfiguration.Offset + index);
|
||||
(id, sortOder) = (valueOfFileNameFirstSegment, metadataSettings.Offset + index);
|
||||
}
|
||||
else
|
||||
throw new NotSupportedException();
|
||||
|
21
Shared/Models/FilePathAndWholePercentages.cs
Normal file
21
Shared/Models/FilePathAndWholePercentages.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record FilePathAndWholePercentages(FilePath FilePath, int WholePercentages)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, FilePathAndWholePercentagesSourceGenerationContext.Default.FilePathAndWholePercentages);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(FilePathAndWholePercentages))]
|
||||
public partial class FilePathAndWholePercentagesSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
@ -39,4 +39,11 @@ public class Location(int bottom, double confidence, int left, int right, int to
|
||||
|
||||
public static bool operator !=(Location location1, Location location2) => !(location1 == location2);
|
||||
|
||||
public static Location Get(int bottom, double confidence, int height, int left, int right, int top, int width, int zCount)
|
||||
{
|
||||
Location result = new(bottom, confidence, left, right, top);
|
||||
_ = Stateless.Methods.Location.Check(bottom, height, left, right, top, width, zCount, throwException: true);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
49
Shared/Models/LocationContainer.cs
Normal file
49
Shared/Models/LocationContainer.cs
Normal file
@ -0,0 +1,49 @@
|
||||
using System.Drawing;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record LocationContainer(DateOnly? CreationDateOnly,
|
||||
ExifDirectory? ExifDirectory,
|
||||
object? Encoding,
|
||||
FaceFile? FaceFile,
|
||||
FilePath FilePath,
|
||||
int? LengthPermyriad,
|
||||
FilePath? LengthSource,
|
||||
PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName? PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName,
|
||||
RectangleF? Rectangle,
|
||||
int? WholePercentages)
|
||||
{
|
||||
|
||||
public static LocationContainer Get(LocationContainer locationContainer, object? encoding, bool keepExifDirectory)
|
||||
{
|
||||
LocationContainer result;
|
||||
result = new(locationContainer.CreationDateOnly,
|
||||
keepExifDirectory ? locationContainer.ExifDirectory : null,
|
||||
encoding,
|
||||
locationContainer.FaceFile,
|
||||
locationContainer.FilePath,
|
||||
locationContainer.LengthPermyriad,
|
||||
locationContainer.LengthSource,
|
||||
locationContainer.PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName,
|
||||
locationContainer.Rectangle,
|
||||
locationContainer.WholePercentages);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static LocationContainer Get(LocationContainer source, LocationContainer locationContainer, int lengthPermyriad, bool keepExifDirectory, bool keepEncoding)
|
||||
{
|
||||
LocationContainer result;
|
||||
result = new(locationContainer.CreationDateOnly,
|
||||
keepExifDirectory ? locationContainer.ExifDirectory : null,
|
||||
keepEncoding ? locationContainer.Encoding : null,
|
||||
locationContainer.FaceFile,
|
||||
locationContainer.FilePath,
|
||||
lengthPermyriad,
|
||||
source.FilePath,
|
||||
locationContainer.PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName,
|
||||
locationContainer.Rectangle,
|
||||
locationContainer.WholePercentages);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
23
Shared/Models/MappingFromFilterPost.cs
Normal file
23
Shared/Models/MappingFromFilterPost.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record MappingFromFilterPost(bool? CanReMap,
|
||||
bool? InSkipCollection,
|
||||
bool? IsFocusPerson)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, MappingFromFilterPostGenerationContext.Default.MappingFromFilterPost);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(MappingFromFilterPost))]
|
||||
public partial class MappingFromFilterPostGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record MetadataConfiguration(ResultConfiguration ResultConfiguration,
|
||||
bool ForceMetadataLastWriteTimeToCreationTime,
|
||||
string[] IgnoreRulesKeyWords,
|
||||
int IntMinValueLength,
|
||||
int Offset,
|
||||
bool PropertiesChangedForMetadata)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, MetadataConfigurationSourceGenerationContext.Default.MetadataConfiguration);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(MetadataConfiguration))]
|
||||
internal partial class MetadataConfigurationSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
22
Shared/Models/MetadataGroup.cs
Normal file
22
Shared/Models/MetadataGroup.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record MetadataGroup(bool FastForwardMovingPictureExpertsGroupUsed, FilePath FilePath, FileInfo FileInfo, ExifDirectory ExifDirectory, ReadOnlyCollection<FileHolder> SidecarFiles)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, MetadataGroupSourceGenerationContext.Default.MetadataGroup);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(MetadataGroup))]
|
||||
internal partial class MetadataGroupSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
25
Shared/Models/MetadataSettings.cs
Normal file
25
Shared/Models/MetadataSettings.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record MetadataSettings(bool ForceMetadataLastWriteTimeToCreationTime,
|
||||
string[] IgnoreRulesKeyWords,
|
||||
int IntMinValueLength,
|
||||
int Offset,
|
||||
bool PropertiesChangedForMetadata)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, MetadataSettingsSourceGenerationContext.Default.MetadataSettings);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(MetadataSettings))]
|
||||
internal partial class MetadataSettingsSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
24
Shared/Models/PeopleSettings.cs
Normal file
24
Shared/Models/PeopleSettings.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record PeopleSettings(string GenealogicalDataCommunicationFile,
|
||||
string[] JLinks,
|
||||
string PersonBirthdayFormat,
|
||||
string PersonCharacters)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, PeopleSettingsSourceGenerationContext.Default.PeopleSettings);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(PeopleSettings))]
|
||||
internal partial class PeopleSettingsSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
21
Shared/Models/PersonBirthday.cs
Normal file
21
Shared/Models/PersonBirthday.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record PersonBirthday(DateTime Value)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, PersonBirthdaySourceGenerationContext.Default.PersonBirthday);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
[JsonSerializable(typeof(PersonBirthday))]
|
||||
public partial class PersonBirthdaySourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
48
Shared/Models/PersonContainer.cs
Normal file
48
Shared/Models/PersonContainer.cs
Normal file
@ -0,0 +1,48 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record PersonContainer(int? ApproximateYears,
|
||||
PersonBirthday[]? Birthdays,
|
||||
ReadOnlyCollection<FilePath> DisplayDirectoryAllFilePaths,
|
||||
string DisplayDirectoryName,
|
||||
long? Key,
|
||||
PersonDirectory? PersonDirectory)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, PersonContainerSourceGenerationContext.Default.PersonContainer);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static PersonContainer Get(int? approximateYears, PersonBirthday[]? birthdays, ReadOnlyCollection<FilePath> displayDirectoryAllFilePaths, string displayDirectoryName, long? key, PersonDirectory? personDirectory) =>
|
||||
new(approximateYears, birthdays, displayDirectoryAllFilePaths, displayDirectoryName, key, personDirectory);
|
||||
|
||||
public static PersonContainer Get(char[] personCharacters, PersonBirthday birthday, string displayDirectoryName, PersonDirectory personDirectory) =>
|
||||
new(Stateless.Methods.IAge.GetApproximateYears(personCharacters, displayDirectoryName), [birthday], new([]), displayDirectoryName, birthday.Value.Ticks, personDirectory);
|
||||
|
||||
public static PersonContainer Get(int? approximateYears, PersonBirthday birthdays, string displayDirectoryName, long key) =>
|
||||
new(approximateYears, [birthdays], new([]), displayDirectoryName, key, null);
|
||||
|
||||
public static PersonContainer Get(int? approximateYears, PersonBirthday birthdays, PersonDirectory? personDirectory, string displayDirectoryName, long key) =>
|
||||
new(approximateYears, [birthdays], new([]), displayDirectoryName, key, personDirectory);
|
||||
|
||||
public static PersonContainer Get(int? approximateYears, ReadOnlyCollection<FilePath> displayDirectoryAllFilePaths, string displayDirectoryName, PersonDirectory? personDirectory) =>
|
||||
new(approximateYears, null, displayDirectoryAllFilePaths, displayDirectoryName, null, personDirectory);
|
||||
|
||||
public static PersonContainer Get(int? approximateYears, PersonBirthday[]? birthdays, ReadOnlyCollection<FilePath> displayDirectoryAllFilePaths, string displayDirectoryName, long? key) =>
|
||||
new(approximateYears, birthdays, displayDirectoryAllFilePaths, displayDirectoryName, key, null);
|
||||
|
||||
public static bool? IsKeyIsMaxBirthday(PersonContainer personContainer) =>
|
||||
personContainer.Birthdays is null || personContainer.Key is null ? null : personContainer.Key.Value == personContainer.Birthdays.First().Value.Ticks;
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
[JsonSerializable(typeof(PersonContainer))]
|
||||
public partial class PersonContainerSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
21
Shared/Models/PersonDirectory.cs
Normal file
21
Shared/Models/PersonDirectory.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record PersonDirectory(char Char, string Group, char Status, char Sex, char First)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, PersonDirectorySourceGenerationContext.Default.PersonDirectory);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
[JsonSerializable(typeof(PersonDirectory))]
|
||||
public partial class PersonDirectorySourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
21
Shared/Models/PersonKeyFormattedAndPersonBirthday.cs
Normal file
21
Shared/Models/PersonKeyFormattedAndPersonBirthday.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record PersonKeyFormattedAndPersonBirthday(string PersonKeyFormatted, PersonBirthday PersonBirthday)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, PersonKeyFormattedAndPersonBirthdaySourceGenerationContext.Default.PersonKeyFormattedAndPersonBirthday);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
[JsonSerializable(typeof(PersonKeyFormattedAndPersonBirthday))]
|
||||
public partial class PersonKeyFormattedAndPersonBirthdaySourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
21
Shared/Models/PersonKeyFormattedAndPersonKeyTicks.cs
Normal file
21
Shared/Models/PersonKeyFormattedAndPersonKeyTicks.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName(string KeyFormatted, long KeyTicks, string? DisplayDirectoryName)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, PersonKeyFormattedAndKeyTicksAndDisplayDirectoryNameSourceGenerationContext.Default.PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
[JsonSerializable(typeof(PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName))]
|
||||
public partial class PersonKeyFormattedAndKeyTicksAndDisplayDirectoryNameSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
14
Shared/Models/Properties/ICompareSettings.cs
Normal file
14
Shared/Models/Properties/ICompareSettings.cs
Normal file
@ -0,0 +1,14 @@
|
||||
namespace View_by_Distance.Shared.Models.Properties;
|
||||
|
||||
public interface ICompareSettings
|
||||
{
|
||||
|
||||
public string FacesFileNameExtension { init; get; }
|
||||
public string FacesHiddenFileNameExtension { init; get; }
|
||||
public string FacesPartsFileNameExtension { init; get; }
|
||||
public string[] IgnoreExtensions { init; get; }
|
||||
public int MaxDegreeOfParallelism { init; get; }
|
||||
public string[] ValidImageFormatExtensions { init; get; }
|
||||
public string[] ValidVideoFormatExtensions { init; get; }
|
||||
|
||||
}
|
15
Shared/Models/Properties/IFaceDistance.cs
Normal file
15
Shared/Models/Properties/IFaceDistance.cs
Normal file
@ -0,0 +1,15 @@
|
||||
namespace View_by_Distance.Shared.Models.Properties;
|
||||
|
||||
public interface IFaceDistance
|
||||
{
|
||||
|
||||
public int? ConfidencePercent { init; get; }
|
||||
public DateTime DateTimeOriginalThenMinimumDateTime { init; get; }
|
||||
public object? Encoding { init; get; }
|
||||
public MappingFromFilterPost? MappingFromFilterPost { init; get; }
|
||||
public int? Id { init; get; }
|
||||
public bool? IsWrongYear { init; get; }
|
||||
public double? Length { init; get; }
|
||||
public int? WholePercentages { init; get; }
|
||||
|
||||
}
|
@ -1,9 +1,8 @@
|
||||
namespace View_by_Distance.Shared.Models.Properties;
|
||||
|
||||
public interface IRenameConfiguration
|
||||
public interface IRenameSettings
|
||||
{
|
||||
|
||||
public MetadataConfiguration MetadataConfiguration { init; get; }
|
||||
public string[] IgnoreExtensions { init; get; }
|
||||
public bool SkipIdFiles { init; get; }
|
||||
public string[] ValidImageFormatExtensions { init; get; }
|
29
Shared/Models/ReadOnlyCollections.cs
Normal file
29
Shared/Models/ReadOnlyCollections.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record ReadOnlyCollections(ReadOnlyCollection<long> JLinkResolvedPersonKeys,
|
||||
ReadOnlyCollection<PersonContainer> PersonContainers,
|
||||
ReadOnlyCollection<string> PersonKeyFormattedCollection,
|
||||
ReadOnlyDictionary<string, string> PersonKeyFormattedToNewestPersonKeyFormatted,
|
||||
ReadOnlyCollection<long> PersonKeys,
|
||||
ReadOnlyDictionary<int, List<FilePathAndWholePercentages>> SkipCollection,
|
||||
ReadOnlyDictionary<int, List<FilePathAndWholePercentages>> SkipNotSkipCollection,
|
||||
ReadOnlyCollection<string> SkipNotSkipDirectories)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, ReadOnlyCollectionsSourceGenerationContext.Default.ReadOnlyCollections);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
[JsonSerializable(typeof(ReadOnlyCollections))]
|
||||
public partial class ReadOnlyCollectionsSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record ResultConfiguration(string DateGroup,
|
||||
int EpicYear,
|
||||
string? ModelName,
|
||||
int? NumberOfJitters,
|
||||
int? NumberOfTimesToUpsample,
|
||||
string? PredictorModelName,
|
||||
int ResultAllInOneSubdirectoryLength,
|
||||
string ResultCollection,
|
||||
string ResultContent,
|
||||
string ResultSingleton,
|
||||
string RootDirectory)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, ResultConfigurationSourceGenerationContext.Default.ResultConfiguration);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(ResultConfiguration))]
|
||||
internal partial class ResultConfigurationSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
31
Shared/Models/ResultSettings.cs
Normal file
31
Shared/Models/ResultSettings.cs
Normal file
@ -0,0 +1,31 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record ResultSettings(string DateGroup,
|
||||
int EpicYear,
|
||||
string ModelName,
|
||||
int NumberOfJitters,
|
||||
int NumberOfTimesToUpsample,
|
||||
string PredictorModelName,
|
||||
int ResultAllInOneSubdirectoryLength,
|
||||
string ResultCollection,
|
||||
string ResultContent,
|
||||
string ResultSingleton,
|
||||
string RootDirectory)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, ResultSettingsSourceGenerationContext.Default.ResultSettings);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(ResultSettings))]
|
||||
internal partial class ResultSettingsSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
45
Shared/Models/SaveContainer.cs
Normal file
45
Shared/Models/SaveContainer.cs
Normal file
@ -0,0 +1,45 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record SaveContainer(string CheckFile,
|
||||
string Directory,
|
||||
FileHolder? FaceFileHolder,
|
||||
FileHolder? HiddenFaceFileHolder,
|
||||
FileHolder? FacePartsFileHolder,
|
||||
bool MakeAllHidden,
|
||||
FileHolder? ResizedFileHolder,
|
||||
string ShortcutFile)
|
||||
{
|
||||
public static SaveContainer Get(string directory) =>
|
||||
new(string.Empty, directory, null, null, null, false, null, string.Empty);
|
||||
|
||||
public static SaveContainer Get(string directory, string locationContainersFile) =>
|
||||
new(string.Empty, directory, null, null, null, false, FileHolder.Get(locationContainersFile), Path.Combine(directory, $"{Path.GetFileName(locationContainersFile)}.lnk"));
|
||||
|
||||
public static SaveContainer Get(string directory, FileHolder? faceFileHolder, FileHolder? resizedFileHolder, string shortcutFile) =>
|
||||
new(string.Empty, directory, faceFileHolder, null, null, true, resizedFileHolder, shortcutFile);
|
||||
|
||||
public static SaveContainer Get(string checkFile, string directory, FileHolder faceFileHolder) =>
|
||||
new(checkFile, directory, faceFileHolder, null, null, false, null, string.Empty);
|
||||
|
||||
public static SaveContainer Get(FileHolder resizedFileHolder, string checkFile, string directory) =>
|
||||
new(checkFile, directory, null, null, null, false, resizedFileHolder, string.Empty);
|
||||
|
||||
public static SaveContainer Get(string checkFile, string directory, FileHolder? faceFileHolder, FileHolder? hiddenFaceFileHolder, FileHolder? facePartsFileHolder, FileHolder? resizedFileHolder, string shortcutFile) =>
|
||||
new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, false, resizedFileHolder, shortcutFile);
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, ResultSettingsSourceGenerationContext.Default.ResultSettings);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(SaveContainer))]
|
||||
internal partial class SaveContainerSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
14
Shared/Models/Stateless/IMapLogic.cs
Normal file
14
Shared/Models/Stateless/IMapLogic.cs
Normal file
@ -0,0 +1,14 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless;
|
||||
|
||||
public interface IMapLogic
|
||||
{ // ...
|
||||
|
||||
const int CopyNotMappedFaces = 5;
|
||||
const int ForceSingleImage = 3;
|
||||
const int Individually = 6;
|
||||
const int ManualCopy = 4;
|
||||
const int Mapping = 1;
|
||||
const int Sigma = 3;
|
||||
const int Sorting = 2;
|
||||
|
||||
}
|
@ -6,10 +6,10 @@ namespace View_by_Distance.Shared.Models.Stateless;
|
||||
internal abstract class Id
|
||||
{
|
||||
|
||||
internal static bool NameWithoutExtensionIsIdFormat(MetadataConfiguration metadataConfiguration, string fileNameFirstSegment)
|
||||
internal static bool NameWithoutExtensionIsIdFormat(MetadataSettings metadataSettings, string fileNameFirstSegment)
|
||||
{
|
||||
bool result;
|
||||
if (fileNameFirstSegment.Length < 5 || fileNameFirstSegment.Length > metadataConfiguration.IntMinValueLength)
|
||||
if (fileNameFirstSegment.Length < 5 || fileNameFirstSegment.Length > metadataSettings.IntMinValueLength)
|
||||
result = false;
|
||||
else
|
||||
{
|
||||
@ -19,13 +19,13 @@ internal abstract class Id
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static int GetId(MetadataConfiguration metadataConfiguration, string intelligentId)
|
||||
internal static int GetId(ResultSettings resultSettings, MetadataSettings metadataSettings, string intelligentId)
|
||||
{
|
||||
int result;
|
||||
StringBuilder results = new();
|
||||
if (metadataConfiguration.IntMinValueLength < (metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength + 2))
|
||||
if (metadataSettings.IntMinValueLength < (resultSettings.ResultAllInOneSubdirectoryLength + 2))
|
||||
throw new NotSupportedException();
|
||||
for (int i = intelligentId.Length - (metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength + 2); i > -1; i--)
|
||||
for (int i = intelligentId.Length - (resultSettings.ResultAllInOneSubdirectoryLength + 2); i > -1; i--)
|
||||
_ = results.Append(intelligentId[i]);
|
||||
_ = results.Append(intelligentId[^3]).Append(intelligentId[^2]);
|
||||
result = int.Parse(results.ToString());
|
||||
@ -37,12 +37,12 @@ internal abstract class Id
|
||||
}
|
||||
|
||||
#pragma warning disable IDE0060
|
||||
internal static string GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal)
|
||||
internal static string GetIntelligentId(ResultSettings resultSettings, MetadataSettings metadataSettings, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal)
|
||||
#pragma warning restore IDE0060
|
||||
{
|
||||
string result;
|
||||
StringBuilder stringBuilder = new();
|
||||
if (metadataConfiguration.IntMinValueLength < (metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength + 2))
|
||||
if (metadataSettings.IntMinValueLength < (resultSettings.ResultAllInOneSubdirectoryLength + 2))
|
||||
throw new NotSupportedException();
|
||||
int key;
|
||||
string value;
|
||||
@ -50,33 +50,33 @@ internal abstract class Id
|
||||
if (id > -1)
|
||||
{
|
||||
key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 8 : 9;
|
||||
value = id.ToString().PadLeft(metadataConfiguration.IntMinValueLength, '0');
|
||||
value = id.ToString().PadLeft(metadataSettings.IntMinValueLength, '0');
|
||||
}
|
||||
else
|
||||
{
|
||||
key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 2 : 1;
|
||||
value = id.ToString()[1..].PadLeft(metadataConfiguration.IntMinValueLength, '0');
|
||||
value = id.ToString()[1..].PadLeft(metadataSettings.IntMinValueLength, '0');
|
||||
}
|
||||
for (int i = value.Length - metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength - 1; i > -1; i--)
|
||||
for (int i = value.Length - resultSettings.ResultAllInOneSubdirectoryLength - 1; i > -1; i--)
|
||||
_ = stringBuilder.Append(value[i]);
|
||||
for (int i = value.Length - metadataConfiguration.ResultConfiguration.ResultAllInOneSubdirectoryLength; i < value.Length; i++)
|
||||
for (int i = value.Length - resultSettings.ResultAllInOneSubdirectoryLength; i < value.Length; i++)
|
||||
resultAllInOneSubdirectoryChars.Add(value[i]);
|
||||
result = $"{stringBuilder}{string.Join(string.Empty, resultAllInOneSubdirectoryChars)}{key}";
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static string GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index)
|
||||
internal static string GetPaddedId(ResultSettings resultSettings, MetadataSettings metadataSettings, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index)
|
||||
{
|
||||
string result;
|
||||
if (metadataConfiguration.Offset < 0)
|
||||
if (metadataSettings.Offset < 0)
|
||||
result = Guid.NewGuid().ToString();
|
||||
else
|
||||
{
|
||||
string intelligentId = GetIntelligentId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal);
|
||||
int check = GetId(metadataConfiguration, intelligentId);
|
||||
string intelligentId = GetIntelligentId(resultSettings, metadataSettings, id, hasIgnoreKeyword, hasDateTimeOriginal);
|
||||
int check = GetId(resultSettings, metadataSettings, intelligentId);
|
||||
if (check != id)
|
||||
throw new NotSupportedException();
|
||||
result = index is null || metadataConfiguration.Offset == IId.DeterministicHashCode ? intelligentId : $"{metadataConfiguration.Offset + index}{intelligentId}";
|
||||
result = index is null || metadataSettings.Offset == IId.DeterministicHashCode ? intelligentId : $"{metadataSettings.Offset + index}{intelligentId}";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
24
Shared/Models/Stateless/ImageFormat.cs
Normal file
24
Shared/Models/Stateless/ImageFormat.cs
Normal file
@ -0,0 +1,24 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless;
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the file format of the image.
|
||||
/// </summary>
|
||||
public enum ImageFormat
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Specifies that the bitmap (BMP) image format.
|
||||
/// </summary>
|
||||
Bmp,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies that the Joint Photographic Experts Group (JPEG) image format.
|
||||
/// </summary>
|
||||
Jpeg,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies that the W3C Portable Network Graphics (PNG) image format.
|
||||
/// </summary>
|
||||
Png,
|
||||
|
||||
}
|
46
Shared/Models/Stateless/Methods/Age.cs
Normal file
46
Shared/Models/Stateless/Methods/Age.cs
Normal file
@ -0,0 +1,46 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
internal abstract class Age
|
||||
{
|
||||
|
||||
internal static (int, TimeSpan) GetAge(long minuendTicks, long subtrahendTicks)
|
||||
{
|
||||
TimeSpan result;
|
||||
int years = 0;
|
||||
DateTime check = new(subtrahendTicks);
|
||||
for (int i = 0; i < int.MaxValue; i++)
|
||||
{
|
||||
check = check.AddYears(1);
|
||||
if (check.Ticks > minuendTicks)
|
||||
break;
|
||||
years += 1;
|
||||
}
|
||||
result = new(minuendTicks - check.AddYears(-1).Ticks);
|
||||
return (years, result);
|
||||
}
|
||||
|
||||
internal static (int, TimeSpan) GetAge(long minuendTicks, DateTime subtrahend)
|
||||
{
|
||||
(int years, TimeSpan result) = GetAge(minuendTicks, subtrahend.Ticks);
|
||||
return (years, result);
|
||||
}
|
||||
|
||||
internal static (int, TimeSpan) GetAge(DateTime minuend, DateTime subtrahend)
|
||||
{
|
||||
(int years, TimeSpan result) = GetAge(minuend.Ticks, subtrahend.Ticks);
|
||||
return (years, result);
|
||||
}
|
||||
|
||||
internal static int? GetApproximateYears(char[] personCharacters, string personDisplayDirectoryName)
|
||||
{
|
||||
int? result;
|
||||
const int zero = 0;
|
||||
string[] segments = personDisplayDirectoryName.Split(personCharacters);
|
||||
if (segments.Length == 1 || !int.TryParse(segments[1].Split('-')[zero], out int years))
|
||||
result = null;
|
||||
else
|
||||
result = years;
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
26
Shared/Models/Stateless/Methods/IAge.cs
Normal file
26
Shared/Models/Stateless/Methods/IAge.cs
Normal file
@ -0,0 +1,26 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
public interface IAge
|
||||
{ // ...
|
||||
|
||||
(int, TimeSpan) TestStatic_GetAge(long minuendTicks, long subtrahendTicks) =>
|
||||
GetAge(minuendTicks, subtrahendTicks);
|
||||
static (int, TimeSpan) GetAge(long minuendTicks, long subtrahendTicks) =>
|
||||
Age.GetAge(minuendTicks, subtrahendTicks);
|
||||
|
||||
(int, TimeSpan) TestStatic_GetAge(long minuendTicks, DateTime subtrahend) =>
|
||||
GetAge(minuendTicks, subtrahend);
|
||||
static (int, TimeSpan) GetAge(long minuendTicks, DateTime subtrahend) =>
|
||||
Age.GetAge(minuendTicks, subtrahend);
|
||||
|
||||
(int, TimeSpan) TestStatic_GetAge(DateTime minuend, DateTime subtrahend) =>
|
||||
GetAge(minuend, subtrahend);
|
||||
static (int, TimeSpan) GetAge(DateTime minuend, DateTime subtrahend) =>
|
||||
Age.GetAge(minuend, subtrahend);
|
||||
|
||||
int? TestStatic_GetApproximateYears(char[] personCharacters, string personDisplayDirectoryName) =>
|
||||
GetApproximateYears(personCharacters, personDisplayDirectoryName);
|
||||
static int? GetApproximateYears(char[] personCharacters, string personDisplayDirectoryName) =>
|
||||
Age.GetApproximateYears(personCharacters, personDisplayDirectoryName);
|
||||
|
||||
}
|
9
Shared/Models/Stateless/Methods/ICompare.cs
Normal file
9
Shared/Models/Stateless/Methods/ICompare.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
public interface ICompare
|
||||
{
|
||||
|
||||
void Tick();
|
||||
void ConstructProgressBar(int maxTicks, string message);
|
||||
|
||||
}
|
@ -5,23 +5,23 @@ public interface IId
|
||||
|
||||
const int DeterministicHashCode = 9876543;
|
||||
|
||||
static bool IsOffsetDeterministicHashCode(MetadataConfiguration metadataConfiguration) =>
|
||||
metadataConfiguration.Offset == DeterministicHashCode;
|
||||
static bool IsOffsetDeterministicHashCode(MetadataSettings metadataSettings) =>
|
||||
metadataSettings.Offset == DeterministicHashCode;
|
||||
|
||||
string TestStatic_GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) =>
|
||||
GetIntelligentId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal);
|
||||
static string GetIntelligentId(MetadataConfiguration metadataConfiguration, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) =>
|
||||
Id.GetIntelligentId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal);
|
||||
string TestStatic_GetIntelligentId(ResultSettings resultSettings, MetadataSettings metadataSettings, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) =>
|
||||
GetIntelligentId(resultSettings, metadataSettings, id, hasIgnoreKeyword, hasDateTimeOriginal);
|
||||
static string GetIntelligentId(ResultSettings resultSettings, MetadataSettings metadataSettings, long id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) =>
|
||||
Id.GetIntelligentId(resultSettings, metadataSettings, id, hasIgnoreKeyword, hasDateTimeOriginal);
|
||||
|
||||
int TestStatic_GetId(MetadataConfiguration metadataConfiguration, string intelligentId) =>
|
||||
GetId(metadataConfiguration, intelligentId);
|
||||
static int GetId(MetadataConfiguration metadataConfiguration, string intelligentId) =>
|
||||
Id.GetId(metadataConfiguration, intelligentId);
|
||||
int TestStatic_GetId(ResultSettings resultSettings, MetadataSettings metadataSettings, string intelligentId) =>
|
||||
GetId(resultSettings, metadataSettings, intelligentId);
|
||||
static int GetId(ResultSettings resultSettings, MetadataSettings metadataSettings, string intelligentId) =>
|
||||
Id.GetId(resultSettings, metadataSettings, intelligentId);
|
||||
|
||||
string TestStatic_GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) =>
|
||||
GetPaddedId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal, index);
|
||||
static string GetPaddedId(MetadataConfiguration metadataConfiguration, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) =>
|
||||
Id.GetPaddedId(metadataConfiguration, id, hasIgnoreKeyword, hasDateTimeOriginal, index);
|
||||
string TestStatic_GetPaddedId(ResultSettings resultSettings, MetadataSettings metadataSettings, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) =>
|
||||
GetPaddedId(resultSettings, metadataSettings, id, hasIgnoreKeyword, hasDateTimeOriginal, index);
|
||||
static string GetPaddedId(ResultSettings resultSettings, MetadataSettings metadataSettings, int id, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) =>
|
||||
Id.GetPaddedId(resultSettings, metadataSettings, id, hasIgnoreKeyword, hasDateTimeOriginal, index);
|
||||
|
||||
string TestStatic_GetIgnoreFullPath(FilePath filePath, FileHolder fileHolder) =>
|
||||
GetIgnoreFullPath(filePath, fileHolder);
|
||||
@ -36,22 +36,22 @@ public interface IId
|
||||
Path.Combine(fileHolder.DirectoryFullPath, $"{fileHolder.NameWithoutExtension[..^1]}2{fileHolder.ExtensionLowered}") :
|
||||
throw new NotSupportedException("Low");
|
||||
|
||||
bool TestStatic_NameWithoutExtensionIsIntelligentIdFormat(MetadataConfiguration metadataConfiguration, string fileNameFirstSegment) =>
|
||||
NameWithoutExtensionIsIntelligentIdFormat(metadataConfiguration, 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);
|
||||
bool TestStatic_NameWithoutExtensionIsIntelligentIdFormat(MetadataSettings metadataSettings, string fileNameFirstSegment) =>
|
||||
NameWithoutExtensionIsIntelligentIdFormat(metadataSettings, fileNameFirstSegment);
|
||||
static bool NameWithoutExtensionIsIntelligentIdFormat(MetadataSettings metadataSettings, string fileNameFirstSegment) =>
|
||||
fileNameFirstSegment.Length - 1 == metadataSettings.IntMinValueLength && fileNameFirstSegment[^1] is '1' or '2' or '8' or '9' && fileNameFirstSegment.All(char.IsNumber);
|
||||
|
||||
bool TestStatic_NameWithoutExtensionIsPaddedIntelligentIdFormat(MetadataConfiguration metadataConfiguration, int sortOrderOnlyLengthIndex, string fileNameFirstSegment) =>
|
||||
NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataConfiguration, sortOrderOnlyLengthIndex, fileNameFirstSegment);
|
||||
static bool NameWithoutExtensionIsPaddedIntelligentIdFormat(MetadataConfiguration metadataConfiguration, int sortOrderOnlyLengthIndex, string fileNameFirstSegment) =>
|
||||
fileNameFirstSegment.Length == metadataConfiguration.IntMinValueLength + sortOrderOnlyLengthIndex + 1
|
||||
bool TestStatic_NameWithoutExtensionIsPaddedIntelligentIdFormat(MetadataSettings metadataSettings, int sortOrderOnlyLengthIndex, string fileNameFirstSegment) =>
|
||||
NameWithoutExtensionIsPaddedIntelligentIdFormat(metadataSettings, sortOrderOnlyLengthIndex, fileNameFirstSegment);
|
||||
static bool NameWithoutExtensionIsPaddedIntelligentIdFormat(MetadataSettings metadataSettings, int sortOrderOnlyLengthIndex, string fileNameFirstSegment) =>
|
||||
fileNameFirstSegment.Length == metadataSettings.IntMinValueLength + sortOrderOnlyLengthIndex + 1
|
||||
&& fileNameFirstSegment[^1] is '1' or '2' or '8' or '9'
|
||||
&& fileNameFirstSegment.All(char.IsNumber);
|
||||
|
||||
bool TestStatic_NameWithoutExtensionIsIdFormat(MetadataConfiguration metadataConfiguration, FileHolder fileHolder) =>
|
||||
NameWithoutExtensionIsIdFormat(metadataConfiguration, fileHolder);
|
||||
static bool NameWithoutExtensionIsIdFormat(MetadataConfiguration metadataConfiguration, FileHolder fileHolder) =>
|
||||
Id.NameWithoutExtensionIsIdFormat(metadataConfiguration, fileHolder.NameWithoutExtension.Split('.')[0]);
|
||||
bool TestStatic_NameWithoutExtensionIsIdFormat(MetadataSettings metadataSettings, FileHolder fileHolder) =>
|
||||
NameWithoutExtensionIsIdFormat(metadataSettings, fileHolder);
|
||||
static bool NameWithoutExtensionIsIdFormat(MetadataSettings metadataSettings, FileHolder fileHolder) =>
|
||||
Id.NameWithoutExtensionIsIdFormat(metadataSettings, fileHolder.NameWithoutExtension.Split('.')[0]);
|
||||
|
||||
int TestStatic_GetDeterministicHashCode(byte[] value) =>
|
||||
GetDeterministicHashCode(value);
|
||||
|
25
Shared/Models/Stateless/Methods/ILocation.cs
Normal file
25
Shared/Models/Stateless/Methods/ILocation.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using System.Drawing;
|
||||
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
public interface ILocation
|
||||
{
|
||||
|
||||
RectangleF? TestStatic_GetPercentagesRectangle(DistanceSettings distanceSettings, int wholePercentages) =>
|
||||
GetPercentagesRectangle(distanceSettings, wholePercentages);
|
||||
static RectangleF? GetPercentagesRectangle(DistanceSettings distanceSettings, int wholePercentages) =>
|
||||
Location.GetPercentagesRectangle(distanceSettings, wholePercentages);
|
||||
|
||||
Models.Location TestStatic_GetTrimBound(double detectionConfidence, Rectangle rectangle, int width, int height, int facesCount) =>
|
||||
TrimBound(detectionConfidence, rectangle, width, height, facesCount);
|
||||
static Models.Location TrimBound(double detectionConfidence, Rectangle rectangle, int width, int height, int facesCount) =>
|
||||
Models.Location.Get(Math.Min(rectangle.Bottom, height),
|
||||
detectionConfidence,
|
||||
height,
|
||||
Math.Max(rectangle.Left, 0),
|
||||
Math.Min(rectangle.Right, width),
|
||||
Math.Max(rectangle.Top, 0),
|
||||
width,
|
||||
facesCount);
|
||||
|
||||
}
|
28
Shared/Models/Stateless/Methods/IMapping.cs
Normal file
28
Shared/Models/Stateless/Methods/IMapping.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using View_by_Distance.Shared.Models.Properties;
|
||||
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
public interface IMapping
|
||||
{ // ...
|
||||
|
||||
int TestStatic_GetAreaPermyriad(int faceAreaPermyriad, int height, Models.Location location, int width)
|
||||
=> GetAreaPermyriad(faceAreaPermyriad, height, location, width);
|
||||
static int GetAreaPermyriad(int faceAreaPermyriad, int height, Models.Location location, int width)
|
||||
=> Mapping.GetAreaPermyriad(faceAreaPermyriad, location.Bottom, height, location.Left, location.Right, location.Top, width);
|
||||
|
||||
int TestStatic_GetAreaPermyriad(int faceAreaPermyriad, int bottom, int height, int left, int right, int top, int width)
|
||||
=> GetAreaPermyriad(faceAreaPermyriad, bottom, height, left, right, top, width);
|
||||
static int GetAreaPermyriad(int faceAreaPermyriad, int bottom, int height, int left, int right, int top, int width)
|
||||
=> Mapping.GetAreaPermyriad(faceAreaPermyriad, bottom, height, left, right, top, width);
|
||||
|
||||
int TestStatic_GetAreaPermyriad(int faceAreaPermyriad, Models.Location location, OutputResolution outputResolution)
|
||||
=> GetAreaPermyriad(faceAreaPermyriad, location, outputResolution);
|
||||
static int GetAreaPermyriad(int faceAreaPermyriad, Models.Location location, OutputResolution outputResolution)
|
||||
=> Mapping.GetAreaPermyriad(faceAreaPermyriad, location.Bottom, outputResolution.Height, location.Left, location.Right, location.Top, outputResolution.Width);
|
||||
|
||||
int? TestStatic_GetWholePercentages(ICompareSettings compareSettings, FilePath filePath) =>
|
||||
GetWholePercentages(compareSettings, filePath);
|
||||
static int? GetWholePercentages(ICompareSettings compareSettings, FilePath filePath) =>
|
||||
Mapping.GetWholePercentages(compareSettings, filePath);
|
||||
|
||||
}
|
@ -61,24 +61,24 @@ public interface IPath
|
||||
static string GetDirectory(string sourceDirectory, int level, string directoryName) =>
|
||||
XPath.GetDirectory(sourceDirectory, level, directoryName);
|
||||
|
||||
(string, int) TestStatic_GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, FileHolder fileHolder) =>
|
||||
GetDirectoryNameAndIndex(resultConfiguration, fileHolder);
|
||||
static (string, int) GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, FileHolder fileHolder) =>
|
||||
XPath.GetDirectoryNameAndIndex(resultConfiguration, fileHolder);
|
||||
(string, int) TestStatic_GetDirectoryNameAndIndex(ResultSettings resultSettings, FileHolder fileHolder) =>
|
||||
GetDirectoryNameAndIndex(resultSettings, fileHolder);
|
||||
static (string, int) GetDirectoryNameAndIndex(ResultSettings resultSettings, FileHolder fileHolder) =>
|
||||
XPath.GetDirectoryNameAndIndex(resultSettings, fileHolder);
|
||||
|
||||
(string, int) TestStatic_GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, FilePath filePath) =>
|
||||
GetDirectoryNameAndIndex(resultConfiguration, filePath);
|
||||
static (string, int) GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, FilePath filePath) =>
|
||||
XPath.GetDirectoryNameAndIndex(resultConfiguration, filePath);
|
||||
(string, int) TestStatic_GetDirectoryNameAndIndex(ResultSettings resultSettings, FilePath filePath) =>
|
||||
GetDirectoryNameAndIndex(resultSettings, filePath);
|
||||
static (string, int) GetDirectoryNameAndIndex(ResultSettings resultSettings, FilePath filePath) =>
|
||||
XPath.GetDirectoryNameAndIndex(resultSettings, filePath);
|
||||
|
||||
(string, int) TestStatic_GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, int id) =>
|
||||
GetDirectoryNameAndIndex(resultConfiguration, id);
|
||||
static (string, int) GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, int id) =>
|
||||
XPath.GetDirectoryNameAndIndex(resultConfiguration, id);
|
||||
(string, int) TestStatic_GetDirectoryNameAndIndex(ResultSettings resultSettings, int id) =>
|
||||
GetDirectoryNameAndIndex(resultSettings, id);
|
||||
static (string, int) GetDirectoryNameAndIndex(ResultSettings resultSettings, int id) =>
|
||||
XPath.GetDirectoryNameAndIndex(resultSettings, id);
|
||||
|
||||
ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> TestStatic_GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) =>
|
||||
GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, jsonGroups);
|
||||
static ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) =>
|
||||
XPath.GetKeyValuePairs(resultConfiguration, resultsFullGroupDirectory, jsonGroups);
|
||||
ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> TestStatic_GetKeyValuePairs(ResultSettings resultSettings, string? resultsFullGroupDirectory, string[]? jsonGroups) =>
|
||||
GetKeyValuePairs(resultSettings, resultsFullGroupDirectory, jsonGroups);
|
||||
static ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> GetKeyValuePairs(ResultSettings resultSettings, string? resultsFullGroupDirectory, string[]? jsonGroups) =>
|
||||
XPath.GetKeyValuePairs(resultSettings, resultsFullGroupDirectory, jsonGroups);
|
||||
|
||||
}
|
55
Shared/Models/Stateless/Methods/IPerson.cs
Normal file
55
Shared/Models/Stateless/Methods/IPerson.cs
Normal file
@ -0,0 +1,55 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
public interface IPerson
|
||||
{
|
||||
|
||||
// ...
|
||||
|
||||
static (char, char, char) GetPersonHour(string? personDisplayDirectoryName, int hour) =>
|
||||
hour == 0 ? new('U', 'U', 'U') :
|
||||
hour == 1 ? new('U', 'U', 'U') :
|
||||
hour == 2 ? new('U', 'U', 'U') :
|
||||
hour == 3 ? new('A', 'U', 'Y') :
|
||||
hour == 4 ? new('A', 'F', 'Y') :
|
||||
hour == 5 ? new('A', 'M', 'Y') :
|
||||
hour == 6 ? new('A', 'F', 'N') :
|
||||
hour == 7 ? new('A', 'M', 'N') :
|
||||
hour == 13 ? new('D', 'U', 'Y') :
|
||||
hour == 14 ? new('D', 'F', 'Y') :
|
||||
hour == 15 ? new('D', 'M', 'Y') :
|
||||
hour == 16 ? new('D', 'F', 'N') :
|
||||
hour == 17 ? new('D', 'M', 'N') :
|
||||
throw new NotImplementedException(personDisplayDirectoryName);
|
||||
|
||||
static string GetHourGroup(string? personDisplayDirectoryName, int hour) =>
|
||||
hour == 0 ? "Unknown-Unknown-Unknown" :
|
||||
hour == 1 ? "Unknown-Unknown-Unknown" :
|
||||
hour == 2 ? "Unknown-Unknown-Unknown" :
|
||||
hour == 3 ? "Alive-Unknown-Yes" :
|
||||
hour == 4 ? "Alive-Female-Yes" :
|
||||
hour == 5 ? "Alive-Male-Yes" :
|
||||
hour == 6 ? "Alive-Female-No" :
|
||||
hour == 7 ? "Alive-Male-No" :
|
||||
hour == 13 ? "Dead-Unknown-Yes" :
|
||||
hour == 14 ? "Dead-Female-Yes" :
|
||||
hour == 15 ? "Dead-Male-Yes" :
|
||||
hour == 16 ? "Dead-Female-No" :
|
||||
hour == 17 ? "Dead-Male-No" :
|
||||
throw new NotImplementedException(personDisplayDirectoryName);
|
||||
|
||||
bool TestStatic_IsDefaultName(string personDisplayDirectoryName) =>
|
||||
IsDefaultName(personDisplayDirectoryName);
|
||||
static bool IsDefaultName(string personDisplayDirectoryName) =>
|
||||
personDisplayDirectoryName.Length > 1 && personDisplayDirectoryName[0] == 'X' && personDisplayDirectoryName[1] == '+';
|
||||
|
||||
bool TestStatic_IsDefaultName(Models.PersonContainer personContainer) =>
|
||||
IsDefaultName(personContainer);
|
||||
static bool IsDefaultName(Models.PersonContainer personContainer) =>
|
||||
personContainer.ApproximateYears is null || IsDefaultName(personContainer.DisplayDirectoryName);
|
||||
|
||||
bool TestStatic_IsDefaultName(MappingFromPerson mappingFromPerson) =>
|
||||
IsDefaultName(mappingFromPerson);
|
||||
static bool IsDefaultName(MappingFromPerson mappingFromPerson) =>
|
||||
mappingFromPerson.ApproximateYears is null || IsDefaultName(mappingFromPerson.DisplayDirectoryName);
|
||||
|
||||
}
|
116
Shared/Models/Stateless/Methods/IPersonBirthday.cs
Normal file
116
Shared/Models/Stateless/Methods/IPersonBirthday.cs
Normal file
@ -0,0 +1,116 @@
|
||||
using System.Globalization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
public interface IPersonBirthday
|
||||
{
|
||||
|
||||
DateTime TestStatic_GetDefaultValue() =>
|
||||
GetDefaultValue();
|
||||
|
||||
static DateTime GetDefaultValue() =>
|
||||
DateTime.MinValue; // {{1}}SingletonValue
|
||||
|
||||
// ...
|
||||
|
||||
static bool IsCounterPersonBirthday(Models.PersonBirthday personBirthday) =>
|
||||
personBirthday.Value.Year < 1809;
|
||||
|
||||
static bool IsCounterPersonYear(long personKey) =>
|
||||
new DateTime(personKey).Year < 1809;
|
||||
|
||||
static bool IsCounterPersonYear(int year) =>
|
||||
year < 1809;
|
||||
|
||||
static bool IsCounterPersonYear(string year) =>
|
||||
new string[] { year, "1809" }.Min() == year;
|
||||
|
||||
static bool IsWrongYearFilterOrCounterPersonBirthday(bool? isWrongYear, Models.PersonBirthday personBirthday) =>
|
||||
isWrongYear is null || isWrongYear.Value || IsCounterPersonBirthday(personBirthday);
|
||||
|
||||
string TestStatic_GetDateTime(string personKeyFormatted) =>
|
||||
GetDateTime(personKeyFormatted);
|
||||
static string GetDateTime(string personKeyFormatted) =>
|
||||
personKeyFormatted.Length < 5 || !personKeyFormatted.Contains('#') ? personKeyFormatted : personKeyFormatted[..2] == "19" ? $"1600{personKeyFormatted[4..]}" : $"1700{personKeyFormatted[4..]}";
|
||||
|
||||
double? TestStatic_GetAge(Models.PersonBirthday birthday) =>
|
||||
GetAge(birthday);
|
||||
static double? GetAge(Models.PersonBirthday birthday) =>
|
||||
PersonBirthday.GetAge(birthday);
|
||||
|
||||
int TestStatic_GetHour(bool alive, char sex) =>
|
||||
GetHour(alive, sex);
|
||||
static int GetHour(bool alive, char sex) =>
|
||||
alive ? sex is 'M' ? 5 : sex is 'F' ? 4 : sex is 'U' ? 2 : throw new NotImplementedException() : sex is 'M' ? 15 : sex is 'F' ? 14 : sex is 'U' ? 3 : throw new NotImplementedException();
|
||||
|
||||
int TestStatic_GetHour(bool alive, ConsoleKey consoleKey) =>
|
||||
GetHour(alive, consoleKey);
|
||||
static int GetHour(bool alive, ConsoleKey consoleKey) =>
|
||||
GetHour(alive, consoleKey.ToString()[0]);
|
||||
|
||||
Models.PersonBirthday TestStatic_GetPersonBirthday(long ticks) =>
|
||||
new(new DateTime(ticks));
|
||||
static Models.PersonBirthday GetPersonBirthday(long ticks) =>
|
||||
new(new DateTime(ticks));
|
||||
|
||||
DateTime? TestStatic_GetDate(string month, string day, string year) =>
|
||||
GetDate(month, day, year);
|
||||
static DateTime? GetDate(string month, string day, string year) =>
|
||||
PersonBirthday.GetDate(month, day, year);
|
||||
|
||||
string TestStatic_GetFileName(string personBirthdayFormat, Models.PersonBirthday personBirthday) =>
|
||||
GetFileName(personBirthdayFormat, personBirthday);
|
||||
static string GetFileName(string personBirthdayFormat, Models.PersonBirthday personBirthday) =>
|
||||
$"{personBirthday.Value.ToString(personBirthdayFormat)}.json";
|
||||
|
||||
(int, TimeSpan) TestStatic_GetAge(DateTime dateTime, Models.PersonBirthday birthday) =>
|
||||
GetAge(dateTime, birthday);
|
||||
static (int, TimeSpan) GetAge(DateTime dateTime, Models.PersonBirthday birthday) =>
|
||||
PersonBirthday.GetAge(dateTime, birthday);
|
||||
|
||||
(int, TimeSpan) TestStatic_GetAge(long dateTimeTicks, Models.PersonBirthday birthday) =>
|
||||
GetAge(dateTimeTicks, birthday);
|
||||
static (int, TimeSpan) GetAge(long dateTimeTicks, Models.PersonBirthday birthday) =>
|
||||
PersonBirthday.GetAge(dateTimeTicks, birthday);
|
||||
|
||||
string TestStatic_GetFormatted(string personBirthdayFormat, Models.PersonBirthday personBirthday) =>
|
||||
GetFormatted(personBirthdayFormat, personBirthday);
|
||||
static string GetFormatted(string personBirthdayFormat, Models.PersonBirthday personBirthday) =>
|
||||
personBirthday.Value.ToString(personBirthdayFormat);
|
||||
|
||||
string TestStatic_GetFormatted(string personBirthdayFormat, long personKey) =>
|
||||
GetFormatted(personBirthdayFormat, personKey);
|
||||
static string GetFormatted(string personBirthdayFormat, long personKey) =>
|
||||
GetFormatted(personBirthdayFormat, GetPersonBirthday(personKey));
|
||||
|
||||
TimeSpan? TestStatic_Get(DateTime minimumDateTime, Models.PersonBirthday personBirthday) =>
|
||||
GetTimeSpan(minimumDateTime, isWrongYear: false, personBirthday);
|
||||
static TimeSpan? GetTimeSpan(DateTime minimumDateTime, Models.PersonBirthday personBirthday) =>
|
||||
PersonBirthday.GetTimeSpan(minimumDateTime, isWrongYear: false, personBirthday);
|
||||
|
||||
Models.PersonBirthday? TestStatic_GetPersonBirthday(string personBirthdayFormat, string personKeyFormatted) =>
|
||||
GetPersonBirthday(personBirthdayFormat, personKeyFormatted);
|
||||
static Models.PersonBirthday? GetPersonBirthday(string personBirthdayFormat, string personKeyFormatted) =>
|
||||
PersonBirthday.GetPersonBirthday(personBirthdayFormat, personKeyFormatted);
|
||||
|
||||
TimeSpan? TestStatic_Get(long minimumDateTimeTicks, bool? isWrongYear, Models.PersonBirthday personBirthday) =>
|
||||
GetTimeSpan(minimumDateTimeTicks, isWrongYear, personBirthday);
|
||||
static TimeSpan? GetTimeSpan(long minimumDateTimeTicks, bool? isWrongYear, Models.PersonBirthday personBirthday) =>
|
||||
PersonBirthday.GetTimeSpan(minimumDateTimeTicks, isWrongYear, personBirthday);
|
||||
|
||||
TimeSpan? TestStatic_Get(DateTime minimumDateTime, bool? isWrongYear, Models.PersonBirthday personBirthday) =>
|
||||
GetTimeSpan(minimumDateTime, isWrongYear, personBirthday);
|
||||
static TimeSpan? GetTimeSpan(DateTime minimumDateTime, bool? isWrongYear, Models.PersonBirthday personBirthday) =>
|
||||
PersonBirthday.GetTimeSpan(minimumDateTime, isWrongYear, personBirthday);
|
||||
|
||||
DateTime? TestStatic_GetDateTime(string personBirthdayFormat, string personKeyFormatted) =>
|
||||
GetDateTime(personBirthdayFormat, personKeyFormatted);
|
||||
static DateTime? GetDateTime(string personBirthdayFormat, string personKeyFormatted) =>
|
||||
DateTime.TryParseExact(GetDateTime(personKeyFormatted), personBirthdayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime) ? dateTime : null;
|
||||
|
||||
List<PersonKeyFormattedAndPersonBirthday> TestStatic_GetPersonBirthdays(string personBirthdayFormat, string[] personKeyDirectories, string personDisplayDirectoryName) =>
|
||||
GetPersonBirthdays(personBirthdayFormat, personKeyDirectories, personDisplayDirectoryName);
|
||||
static List<PersonKeyFormattedAndPersonBirthday> GetPersonBirthdays(string personBirthdayFormat, string[] personKeyDirectories, string personDisplayDirectoryName) =>
|
||||
PersonBirthday.GetPersonBirthdays(personBirthdayFormat, personKeyDirectories, personDisplayDirectoryName);
|
||||
|
||||
}
|
@ -6,7 +6,7 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
public interface IRename
|
||||
{
|
||||
|
||||
ReadOnlyCollection<string> ConvertAndGetFastForwardMovingPictureExpertsGroupFiles(IRenameConfiguration renameConfiguration, FilePath filePath);
|
||||
ReadOnlyCollection<string> ConvertAndGetFastForwardMovingPictureExpertsGroupFiles(IRenameSettings renameSettings, FilePath filePath);
|
||||
DeterministicHashCode GetDeterministicHashCode(FilePath filePath);
|
||||
void Tick();
|
||||
|
||||
|
@ -3,44 +3,44 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
public interface IResult
|
||||
{
|
||||
|
||||
string TestStatic_GetRelativePath(ResultConfiguration resultConfiguration, string path) =>
|
||||
GetRelativePath(resultConfiguration, path);
|
||||
static string GetRelativePath(ResultConfiguration resultConfiguration, string path) =>
|
||||
XResult.GetRelativePath(resultConfiguration, path);
|
||||
string TestStatic_GetRelativePath(ResultSettings resultSettings, string path) =>
|
||||
GetRelativePath(resultSettings, path);
|
||||
static string GetRelativePath(ResultSettings resultSettings, string path) =>
|
||||
XResult.GetRelativePath(resultSettings, path);
|
||||
|
||||
string TestStatic_GetResultsGroupDirectory(ResultConfiguration resultConfiguration, string description, bool create) =>
|
||||
GetResultsGroupDirectory(resultConfiguration, description, create);
|
||||
static string GetResultsGroupDirectory(ResultConfiguration resultConfiguration, string description, bool create) =>
|
||||
XResult.GetResultsGroupDirectory(resultConfiguration, description, create);
|
||||
string TestStatic_GetResultsGroupDirectory(ResultSettings resultSettings, string description, bool create) =>
|
||||
GetResultsGroupDirectory(resultSettings, description, create);
|
||||
static string GetResultsGroupDirectory(ResultSettings resultSettings, string description, bool create) =>
|
||||
XResult.GetResultsGroupDirectory(resultSettings, description, create);
|
||||
|
||||
string TestStatic_GetResultsGroupDirectory(ResultConfiguration resultConfiguration, string description) =>
|
||||
GetResultsGroupDirectory(resultConfiguration, description);
|
||||
static string GetResultsGroupDirectory(ResultConfiguration resultConfiguration, string description) =>
|
||||
XResult.GetResultsGroupDirectory(resultConfiguration, description, create: true);
|
||||
string TestStatic_GetResultsGroupDirectory(ResultSettings resultSettings, string description) =>
|
||||
GetResultsGroupDirectory(resultSettings, description);
|
||||
static string GetResultsGroupDirectory(ResultSettings resultSettings, string description) =>
|
||||
XResult.GetResultsGroupDirectory(resultSettings, description, create: true);
|
||||
|
||||
string TestStatic_GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description) =>
|
||||
GetResultsDateGroupDirectory(resultConfiguration, description);
|
||||
static string GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description) =>
|
||||
XResult.GetResultsDateGroupDirectory(resultConfiguration, description);
|
||||
string TestStatic_GetResultsDateGroupDirectory(ResultSettings resultSettings, string description) =>
|
||||
GetResultsDateGroupDirectory(resultSettings, description);
|
||||
static string GetResultsDateGroupDirectory(ResultSettings resultSettings, string description) =>
|
||||
XResult.GetResultsDateGroupDirectory(resultSettings, description);
|
||||
|
||||
string TestStatic_GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description, string jsonGroup) =>
|
||||
GetResultsDateGroupDirectory(resultConfiguration, description, jsonGroup);
|
||||
static string GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description, string jsonGroup) =>
|
||||
XResult.GetResultsDateGroupDirectory(resultConfiguration, description, jsonGroup);
|
||||
string TestStatic_GetResultsDateGroupDirectory(ResultSettings resultSettings, string description, string jsonGroup) =>
|
||||
GetResultsDateGroupDirectory(resultSettings, description, jsonGroup);
|
||||
static string GetResultsDateGroupDirectory(ResultSettings resultSettings, string description, string jsonGroup) =>
|
||||
XResult.GetResultsDateGroupDirectory(resultSettings, description, jsonGroup);
|
||||
|
||||
List<string> TestStatic_GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) =>
|
||||
GetDirectoryInfoCollection(resultConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted);
|
||||
static List<string> GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) =>
|
||||
XResult.GetDirectoryInfoCollection(resultConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted);
|
||||
List<string> TestStatic_GetDirectoryInfoCollection(ResultSettings resultSettings, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) =>
|
||||
GetDirectoryInfoCollection(resultSettings, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted);
|
||||
static List<string> GetDirectoryInfoCollection(ResultSettings resultSettings, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) =>
|
||||
XResult.GetDirectoryInfoCollection(resultSettings, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted);
|
||||
|
||||
string TestStatic_GetResultsFullGroupDirectory(ResultConfiguration resultConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) =>
|
||||
GetResultsFullGroupDirectory(resultConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
|
||||
static string GetResultsFullGroupDirectory(ResultConfiguration resultConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) =>
|
||||
XResult.GetResultsFullGroupDirectory(resultConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
|
||||
string TestStatic_GetResultsFullGroupDirectory(ResultSettings resultSettings, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) =>
|
||||
GetResultsFullGroupDirectory(resultSettings, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
|
||||
static string GetResultsFullGroupDirectory(ResultSettings resultSettings, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) =>
|
||||
XResult.GetResultsFullGroupDirectory(resultSettings, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
|
||||
|
||||
List<string> TestStatic_GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) =>
|
||||
GetDirectoryInfoCollection(resultConfiguration, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription);
|
||||
static List<string> GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) =>
|
||||
XResult.GetDirectoryInfoCollection(resultConfiguration, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription);
|
||||
List<string> TestStatic_GetDirectoryInfoCollection(ResultSettings resultSettings, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) =>
|
||||
GetDirectoryInfoCollection(resultSettings, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription);
|
||||
static List<string> GetDirectoryInfoCollection(ResultSettings resultSettings, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) =>
|
||||
XResult.GetDirectoryInfoCollection(resultSettings, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription);
|
||||
|
||||
}
|
78
Shared/Models/Stateless/Methods/Location.cs
Normal file
78
Shared/Models/Stateless/Methods/Location.cs
Normal file
@ -0,0 +1,78 @@
|
||||
using System.Drawing;
|
||||
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
internal abstract class Location
|
||||
{
|
||||
|
||||
internal static bool Check(int bottom, int left, int right, int top, int zCount, bool throwException)
|
||||
{
|
||||
bool result = true;
|
||||
if (left < 0)
|
||||
result = false;
|
||||
if (right < 0)
|
||||
result = false;
|
||||
if (right < left)
|
||||
result = false;
|
||||
if (top < 0)
|
||||
result = false;
|
||||
if (bottom < 0)
|
||||
result = false;
|
||||
if (bottom < top)
|
||||
result = false;
|
||||
if (zCount < 0)
|
||||
result = false;
|
||||
if (throwException && !result)
|
||||
throw new Exception();
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static bool Check(int bottom, int height, int left, int right, int top, int width, int zCount, bool throwException)
|
||||
{
|
||||
bool result = true;
|
||||
if (bottom > height)
|
||||
result = false;
|
||||
if (left > width)
|
||||
result = false;
|
||||
if (right > width)
|
||||
result = false;
|
||||
if (top > height)
|
||||
result = false;
|
||||
if (zCount < 0)
|
||||
result = false;
|
||||
if (result)
|
||||
result = Check(bottom, left, right, top, zCount, throwException);
|
||||
if (throwException && !result)
|
||||
throw new Exception();
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static RectangleF? GetPercentagesRectangle(DistanceSettings distanceSettings, int wholePercentages)
|
||||
{
|
||||
RectangleF? result;
|
||||
string wp = wholePercentages.ToString();
|
||||
int length = (distanceSettings.LocationDigits - 1) / 4;
|
||||
string[] segments =
|
||||
[
|
||||
wp[..1],
|
||||
wp.Substring(1, length),
|
||||
wp.Substring(3, length),
|
||||
wp.Substring(5, length),
|
||||
wp.Substring(7, length)
|
||||
];
|
||||
if (string.Join(string.Empty, segments) != wp)
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
if (!int.TryParse(segments[1], out int xWholePercent) || !int.TryParse(segments[2], out int yWholePercent) || !int.TryParse(segments[3], out int wWholePercent) || !int.TryParse(segments[4], out int hWholePercent))
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
float factor = 100;
|
||||
result = new(xWholePercent / factor, yWholePercent / factor, wWholePercent / factor, hWholePercent / factor);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
61
Shared/Models/Stateless/Methods/Mapping.cs
Normal file
61
Shared/Models/Stateless/Methods/Mapping.cs
Normal file
@ -0,0 +1,61 @@
|
||||
using View_by_Distance.Shared.Models.Properties;
|
||||
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
internal abstract class Mapping
|
||||
{
|
||||
|
||||
internal static (string?, string?, bool?) GetSegments(string facesFileNameExtension, FilePath filePath)
|
||||
{
|
||||
string? extensionLowered;
|
||||
string? wholePercentages;
|
||||
bool? needsFacesFileNameExtension;
|
||||
string[] segments = filePath.Name.Split('.');
|
||||
if (segments.Length < 4 || $".{segments[3]}" != facesFileNameExtension)
|
||||
{
|
||||
extensionLowered = null;
|
||||
wholePercentages = null;
|
||||
needsFacesFileNameExtension = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
extensionLowered = $".{segments[2]}";
|
||||
wholePercentages = segments[1];
|
||||
needsFacesFileNameExtension = segments.Length == 3;
|
||||
}
|
||||
return new(wholePercentages, extensionLowered, needsFacesFileNameExtension);
|
||||
}
|
||||
|
||||
private static int? GetConvertedFromSegments(ICompareSettings compareSettings, FilePath filePath)
|
||||
{
|
||||
int? result;
|
||||
(string? WholePercentages, string? ExtensionLowered, bool? Check) segments = GetSegments(compareSettings.FacesFileNameExtension, filePath);
|
||||
if (string.IsNullOrEmpty(segments.WholePercentages) || string.IsNullOrEmpty(segments.ExtensionLowered) || segments.Check is null)
|
||||
result = null;
|
||||
else if (!int.TryParse(segments.WholePercentages, out int wholePercentages))
|
||||
result = null;
|
||||
else
|
||||
result = wholePercentages;
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static int? GetWholePercentages(ICompareSettings compareSettings, FilePath filePath)
|
||||
{
|
||||
int? wholePercentages;
|
||||
if (filePath.Name.Length < 2 || filePath.Name[1..].Contains('-'))
|
||||
wholePercentages = null;
|
||||
else
|
||||
wholePercentages = GetConvertedFromSegments(compareSettings, filePath);
|
||||
return wholePercentages;
|
||||
}
|
||||
|
||||
internal static int GetAreaPermyriad(int faceAreaPermyriad, int bottom, int height, int left, int right, int top, int width)
|
||||
{
|
||||
int result;
|
||||
double area = width * height;
|
||||
double locationArea = (right - left) * (bottom - top);
|
||||
result = (int)Math.Round(locationArea / area * faceAreaPermyriad, 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
187
Shared/Models/Stateless/Methods/PersonBirthday.cs
Normal file
187
Shared/Models/Stateless/Methods/PersonBirthday.cs
Normal file
@ -0,0 +1,187 @@
|
||||
using System.Globalization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
internal abstract class PersonBirthday
|
||||
{
|
||||
|
||||
// ...
|
||||
|
||||
internal static Models.PersonBirthday? GetPersonBirthday(string personBirthdayFormat, string personKeyFormatted)
|
||||
{
|
||||
Models.PersonBirthday? result;
|
||||
DateTime? dateTime;
|
||||
if (personKeyFormatted.Length != personBirthdayFormat.Length)
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
dateTime = IPersonBirthday.GetDateTime(personBirthdayFormat, personKeyFormatted);
|
||||
if (dateTime is null)
|
||||
result = null;
|
||||
else
|
||||
result = new(dateTime.Value);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static TimeSpan? GetTimeSpan(long minimumDateTimeTicks, bool? isWrongYear, Models.PersonBirthday personBirthday)
|
||||
{
|
||||
TimeSpan? timeSpan;
|
||||
bool isWrongYearFilterOrCounterPersonBirthday = IPersonBirthday.IsWrongYearFilterOrCounterPersonBirthday(isWrongYear, personBirthday);
|
||||
if (isWrongYearFilterOrCounterPersonBirthday)
|
||||
timeSpan = null;
|
||||
else
|
||||
timeSpan = new(minimumDateTimeTicks - personBirthday.Value.Ticks);
|
||||
return timeSpan;
|
||||
}
|
||||
|
||||
internal static TimeSpan? GetTimeSpan(DateTime minimumDateTime, bool? isWrongYear, Models.PersonBirthday personBirthday)
|
||||
{
|
||||
TimeSpan? timeSpan = GetTimeSpan(minimumDateTime.Ticks, isWrongYear, personBirthday);
|
||||
return timeSpan;
|
||||
}
|
||||
|
||||
internal static (int, TimeSpan) GetAge(long dateTimeTicks, Models.PersonBirthday birthday)
|
||||
{
|
||||
TimeSpan result;
|
||||
int years;
|
||||
if (birthday?.Value is null)
|
||||
throw new NullReferenceException(nameof(birthday.Value));
|
||||
(years, result) = Age.GetAge(dateTimeTicks, birthday.Value);
|
||||
return (years, result);
|
||||
}
|
||||
|
||||
internal static (int, TimeSpan) GetAge(DateTime dateTime, Models.PersonBirthday birthday)
|
||||
{
|
||||
TimeSpan result;
|
||||
int years;
|
||||
if (birthday?.Value is null)
|
||||
throw new NullReferenceException(nameof(birthday.Value));
|
||||
(years, result) = Age.GetAge(dateTime, birthday.Value);
|
||||
return (years, result);
|
||||
}
|
||||
|
||||
internal static (int, double) GetAge(DateTime dateTime, DateTime dayBeforeLeapDate, Models.PersonBirthday birthday)
|
||||
{
|
||||
double result;
|
||||
(int years, TimeSpan timeSpan) = GetAge(dateTime, birthday);
|
||||
if (!DateTime.IsLeapYear(dateTime.Year) || dateTime < dayBeforeLeapDate.AddDays(1))
|
||||
result = timeSpan.TotalDays / 365;
|
||||
else
|
||||
result = timeSpan.TotalDays / 366;
|
||||
return (years, result);
|
||||
}
|
||||
|
||||
internal static double? GetAge(Models.PersonBirthday birthday)
|
||||
{
|
||||
double? result;
|
||||
if (birthday is null)
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
DateTime dateTime = DateTime.Now;
|
||||
DateTime dayBeforeLeapDate = new(dateTime.Year, 2, 28);
|
||||
(int years, double r) = GetAge(dateTime, dayBeforeLeapDate, birthday);
|
||||
result = years + r;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static List<PersonKeyFormattedAndPersonBirthday> GetPersonBirthdays(string personBirthdayFormat, string[] personKeyDirectories, string personDisplayDirectoryName)
|
||||
{
|
||||
List<PersonKeyFormattedAndPersonBirthday> results = [];
|
||||
string personKeyFormatted;
|
||||
Models.PersonBirthday? personBirthday;
|
||||
PersonKeyFormattedAndPersonBirthday personKeyFormattedAndPersonBirthday;
|
||||
foreach (string personKeyDirectory in personKeyDirectories)
|
||||
{
|
||||
personKeyFormatted = Path.GetFileName(personKeyDirectory);
|
||||
if (!DateTime.TryParseExact(personKeyFormatted, "MM.dd.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime birthday))
|
||||
personBirthday = IPersonBirthday.GetPersonBirthday(personBirthdayFormat, personKeyFormatted);
|
||||
else
|
||||
// (personBirthday, personKeyFormatted) = Person.Get(personBirthdayFormat, personDisplayDirectory, personKeyDirectory, birthday);
|
||||
continue;
|
||||
if (personBirthday is null)
|
||||
continue;
|
||||
if (!IPersonBirthday.IsCounterPersonBirthday(personBirthday) && ((!personKeyDirectory.Contains('#') && (personDisplayDirectoryName.Contains('~') || personDisplayDirectoryName.Contains('#'))) || (personKeyDirectory.Contains('#') && !personDisplayDirectoryName.Contains('#'))))
|
||||
throw new NotSupportedException();
|
||||
personKeyFormattedAndPersonBirthday = new(personKeyFormatted, personBirthday);
|
||||
results.Add(personKeyFormattedAndPersonBirthday);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private static string? GetMonthShortForm(string month)
|
||||
{
|
||||
string? result = month.ToLower()[0] switch
|
||||
{
|
||||
// 'j' => "jan",
|
||||
'f' => "feb",
|
||||
// 'm' => "mar",
|
||||
// 'a' => "apr",
|
||||
// 'm' => "may",
|
||||
// 'j' => "jun",
|
||||
// 'j' => "jul",
|
||||
// 'a' => "aug",
|
||||
's' => "sep",
|
||||
'o' => "oct",
|
||||
'n' => "nov",
|
||||
'd' => "dec",
|
||||
_ => null
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static DateTime? GetDate(string month, string day, string year)
|
||||
{
|
||||
DateTime? result;
|
||||
DateTime dayDateTime;
|
||||
DateTime yearDateTime;
|
||||
DateTime monthDateTime;
|
||||
string? monthShortHand = string.IsNullOrEmpty(month) ? "x" : GetMonthShortForm(month);
|
||||
if (month.Length > 3)
|
||||
{
|
||||
if (!DateTime.TryParseExact($"{month},1,1500", "MMMM,d,yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out monthDateTime))
|
||||
monthDateTime = DateTime.MinValue;
|
||||
}
|
||||
else if (month.Length == 3)
|
||||
{
|
||||
if (!DateTime.TryParseExact($"{month},1,1500", "MMM,d,yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out monthDateTime))
|
||||
monthDateTime = DateTime.MinValue;
|
||||
}
|
||||
else if (month.Length == 1 && monthShortHand is not null)
|
||||
{
|
||||
if (!DateTime.TryParseExact($"{monthShortHand},1,1500", "MMM,d,yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out monthDateTime))
|
||||
monthDateTime = DateTime.MinValue;
|
||||
}
|
||||
else if (int.TryParse(month, out int _))
|
||||
{
|
||||
if (!DateTime.TryParseExact($"{month.PadLeft(2, '0')[..2]},1,1500", "MM,d,yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out monthDateTime))
|
||||
monthDateTime = DateTime.MinValue;
|
||||
}
|
||||
else
|
||||
monthDateTime = DateTime.MinValue;
|
||||
if (!int.TryParse(day, out int _))
|
||||
dayDateTime = DateTime.MinValue;
|
||||
else
|
||||
{
|
||||
if (!DateTime.TryParseExact($"01,{day.PadLeft(2, '0')[..2]},1500", "MM,d,yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dayDateTime))
|
||||
dayDateTime = DateTime.MinValue;
|
||||
}
|
||||
if (year.Length == 2 && int.TryParse(year, out int _))
|
||||
{
|
||||
if (!DateTime.TryParseExact($"01,01,{year.PadLeft(4, '0')[..4]}", "MM,dd,yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out yearDateTime))
|
||||
yearDateTime = DateTime.MinValue;
|
||||
}
|
||||
else if (year.Length == 4 && int.TryParse(year, out int _))
|
||||
{
|
||||
if (!DateTime.TryParseExact($"01,01,{year.PadLeft(4, '0')[..4]}", "MM,dd,yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out yearDateTime))
|
||||
yearDateTime = DateTime.MinValue;
|
||||
}
|
||||
else
|
||||
yearDateTime = DateTime.MinValue;
|
||||
result = monthDateTime == DateTime.MinValue ? null : dayDateTime == DateTime.MinValue ? null : yearDateTime == DateTime.MinValue ? null : new(yearDateTime.Year, monthDateTime.Month, dayDateTime.Day);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
19
Shared/Models/Stateless/Mode.cs
Normal file
19
Shared/Models/Stateless/Mode.cs
Normal file
@ -0,0 +1,19 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless;
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the image mode.
|
||||
/// </summary>
|
||||
public enum Mode
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Specifies that the rgb (8-bit Red, Green and Blue, 3 channels) image mode.
|
||||
/// </summary>
|
||||
Rgb,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies that the greyscale image mode.
|
||||
/// </summary>
|
||||
Greyscale
|
||||
|
||||
}
|
@ -7,6 +7,8 @@ namespace View_by_Distance.Shared.Models.Stateless;
|
||||
internal abstract class XDate
|
||||
{
|
||||
|
||||
private record Record(bool? IsWrongYear, string[] Years);
|
||||
|
||||
internal static (int Season, string seasonName) GetSeason(int dayOfYear)
|
||||
{
|
||||
(int Season, string seasonName) result = dayOfYear switch
|
||||
@ -23,9 +25,10 @@ internal abstract class XDate
|
||||
return result;
|
||||
}
|
||||
|
||||
private static (bool?, string[]) IsWrongYear(string[] segments, string year)
|
||||
private static Record IsWrongYear(string[] segments, string year)
|
||||
{
|
||||
bool? result;
|
||||
Record result;
|
||||
bool? check;
|
||||
string[] results = (
|
||||
from l
|
||||
in segments
|
||||
@ -48,10 +51,11 @@ internal abstract class XDate
|
||||
select l
|
||||
).ToArray();
|
||||
if (results.Length == 0)
|
||||
result = null;
|
||||
check = null;
|
||||
else
|
||||
result = matches.Length == 0;
|
||||
return new(result, results);
|
||||
check = matches.Length == 0;
|
||||
result = new(check, results);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static (bool?, string[]) IsWrongYear(FilePath filePath, ExifDirectory exifDirectory)
|
||||
@ -215,7 +219,7 @@ internal abstract class XDate
|
||||
}
|
||||
if (results.Count == 0)
|
||||
{
|
||||
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(exifDirectory.OriginalFileName);
|
||||
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(exifDirectory.FilePath.Name);
|
||||
DateTime? dateTime = GetDateTimeFromName(fileNameWithoutExtension);
|
||||
if (dateTime is not null)
|
||||
results.Add(dateTime.Value);
|
||||
@ -235,7 +239,7 @@ internal abstract class XDate
|
||||
results.Add(fileMetadataDirectory.FileModifiedDate.Value);
|
||||
}
|
||||
}
|
||||
return new(results);
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
||||
internal static DateTime GetMinimum(ExifDirectory exifDirectory)
|
||||
|
@ -284,36 +284,36 @@ internal abstract class XPath
|
||||
return (result, converted);
|
||||
}
|
||||
|
||||
internal static (string, int) GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, int id)
|
||||
internal static (string, int) GetDirectoryNameAndIndex(ResultSettings resultSettings, int id)
|
||||
{
|
||||
(string result, int converted) = GetDirectoryNameAndIndex(resultConfiguration.ResultAllInOneSubdirectoryLength, id.ToString());
|
||||
(string result, int converted) = GetDirectoryNameAndIndex(resultSettings.ResultAllInOneSubdirectoryLength, id.ToString());
|
||||
return (result, converted);
|
||||
}
|
||||
|
||||
internal static (string, int) GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, FileHolder fileHolder)
|
||||
internal static (string, int) GetDirectoryNameAndIndex(ResultSettings resultSettings, FileHolder fileHolder)
|
||||
{
|
||||
(string result, int converted) = GetDirectoryNameAndIndex(resultConfiguration.ResultAllInOneSubdirectoryLength, fileHolder.NameWithoutExtension);
|
||||
(string result, int converted) = GetDirectoryNameAndIndex(resultSettings.ResultAllInOneSubdirectoryLength, fileHolder.NameWithoutExtension);
|
||||
return (result, converted);
|
||||
}
|
||||
|
||||
internal static (string, int) GetDirectoryNameAndIndex(ResultConfiguration resultConfiguration, FilePath filePath)
|
||||
internal static (string, int) GetDirectoryNameAndIndex(ResultSettings resultSettings, FilePath filePath)
|
||||
{
|
||||
string result;
|
||||
int converted;
|
||||
if (filePath.Id is not null)
|
||||
(result, converted) = GetDirectoryNameAndIndex(resultConfiguration.ResultAllInOneSubdirectoryLength, filePath.Id.Value.ToString());
|
||||
(result, converted) = GetDirectoryNameAndIndex(resultSettings.ResultAllInOneSubdirectoryLength, filePath.Id.Value.ToString());
|
||||
else
|
||||
(result, converted) = GetDirectoryNameAndIndex(resultConfiguration.ResultAllInOneSubdirectoryLength, filePath.NameWithoutExtension);
|
||||
(result, converted) = GetDirectoryNameAndIndex(resultSettings.ResultAllInOneSubdirectoryLength, filePath.NameWithoutExtension);
|
||||
return (result, converted);
|
||||
}
|
||||
|
||||
private static ReadOnlyCollection<int> GetYears(ResultConfiguration resultConfiguration)
|
||||
private static ReadOnlyCollection<int> GetYears(ResultSettings resultSettings)
|
||||
{
|
||||
List<int> results = [];
|
||||
int currentYear = DateTime.Now.Year;
|
||||
for (int i = resultConfiguration.EpicYear; i < currentYear + 1; i++)
|
||||
for (int i = resultSettings.EpicYear; i < currentYear + 1; i++)
|
||||
results.Add(i);
|
||||
return new(results);
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
||||
private static ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> Convert(Dictionary<int, Dictionary<string, string[]>> collection)
|
||||
@ -321,17 +321,17 @@ internal abstract class XPath
|
||||
Dictionary<int, ReadOnlyDictionary<string, string[]>> results = [];
|
||||
foreach (KeyValuePair<int, Dictionary<string, string[]>> keyValuePair in collection)
|
||||
results.Add(keyValuePair.Key, new(keyValuePair.Value));
|
||||
return new(results);
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
||||
internal static ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> GetKeyValuePairs(ResultConfiguration resultConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups)
|
||||
internal static ReadOnlyDictionary<int, ReadOnlyDictionary<string, string[]>> GetKeyValuePairs(ResultSettings resultSettings, string? resultsFullGroupDirectory, string[]? jsonGroups)
|
||||
{
|
||||
Dictionary<int, Dictionary<string, string[]>> results = [];
|
||||
string directory;
|
||||
string checkDirectory;
|
||||
Dictionary<string, string[]>? keyValuePairs;
|
||||
ReadOnlyCollection<int> years = GetYears(resultConfiguration);
|
||||
int converted = int.Parse($"1{new string('0', resultConfiguration.ResultAllInOneSubdirectoryLength)}");
|
||||
ReadOnlyCollection<int> years = GetYears(resultSettings);
|
||||
int converted = int.Parse($"1{new string('0', resultSettings.ResultAllInOneSubdirectoryLength)}");
|
||||
int plusOne = converted + 1;
|
||||
List<string> collection = [];
|
||||
foreach (int year in years)
|
||||
@ -351,17 +351,17 @@ internal abstract class XPath
|
||||
if (string.IsNullOrEmpty(jsonGroup))
|
||||
{
|
||||
if (i == converted)
|
||||
checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, new('-', resultConfiguration.ResultAllInOneSubdirectoryLength)));
|
||||
checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, new('-', resultSettings.ResultAllInOneSubdirectoryLength)));
|
||||
else
|
||||
checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, i.ToString().PadLeft(resultConfiguration.ResultAllInOneSubdirectoryLength, '0')));
|
||||
checkDirectory = Path.GetFullPath(Path.Combine(resultsFullGroupDirectory, i.ToString().PadLeft(resultSettings.ResultAllInOneSubdirectoryLength, '0')));
|
||||
}
|
||||
else
|
||||
{
|
||||
directory = Path.Combine(resultsFullGroupDirectory, jsonGroup);
|
||||
if (i == converted)
|
||||
checkDirectory = Path.GetFullPath(Path.Combine(directory, new('-', resultConfiguration.ResultAllInOneSubdirectoryLength)));
|
||||
checkDirectory = Path.GetFullPath(Path.Combine(directory, new('-', resultSettings.ResultAllInOneSubdirectoryLength)));
|
||||
else
|
||||
checkDirectory = Path.GetFullPath(Path.Combine(directory, i.ToString().PadLeft(resultConfiguration.ResultAllInOneSubdirectoryLength, '0')));
|
||||
checkDirectory = Path.GetFullPath(Path.Combine(directory, i.ToString().PadLeft(resultSettings.ResultAllInOneSubdirectoryLength, '0')));
|
||||
}
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
|
@ -3,33 +3,33 @@ namespace View_by_Distance.Shared.Models.Stateless;
|
||||
internal abstract class XResult
|
||||
{
|
||||
|
||||
internal static string GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description, string jsonGroup)
|
||||
internal static string GetResultsDateGroupDirectory(ResultSettings resultSettings, string description, string jsonGroup)
|
||||
{
|
||||
string result = Path.Combine(GetResultsDateGroupDirectory(resultConfiguration, description), jsonGroup);
|
||||
string result = Path.Combine(GetResultsDateGroupDirectory(resultSettings, description), jsonGroup);
|
||||
if (!Directory.Exists(result))
|
||||
_ = Directory.CreateDirectory(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static string GetResultsDateGroupDirectory(ResultConfiguration resultConfiguration, string description)
|
||||
internal static string GetResultsDateGroupDirectory(ResultSettings resultSettings, string description)
|
||||
{
|
||||
string result = Path.Combine(GetResultsGroupDirectory(resultConfiguration, description, create: true), resultConfiguration.DateGroup);
|
||||
string result = Path.Combine(GetResultsGroupDirectory(resultSettings, description, create: true), resultSettings.DateGroup);
|
||||
if (!Directory.Exists(result))
|
||||
_ = Directory.CreateDirectory(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static string GetRelativePath(ResultConfiguration resultConfiguration, string path)
|
||||
internal static string GetRelativePath(ResultSettings resultSettings, string path)
|
||||
{
|
||||
string result = Methods.IPath.GetRelativePath(path, resultConfiguration.RootDirectory.Length);
|
||||
string result = Methods.IPath.GetRelativePath(path, resultSettings.RootDirectory.Length);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void VerifyDirectories(ResultConfiguration resultConfiguration, string dateGroupDirectory, string jsonGroup)
|
||||
private static void VerifyDirectories(ResultSettings resultSettings, string dateGroupDirectory, string jsonGroup)
|
||||
{
|
||||
string checkDirectory;
|
||||
int currentYear = DateTime.Now.Year;
|
||||
for (int i = resultConfiguration.EpicYear; i < currentYear + 1; i++)
|
||||
for (int i = resultSettings.EpicYear; i < currentYear + 1; i++)
|
||||
{
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, jsonGroup, i.ToString());
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
@ -37,10 +37,10 @@ internal abstract class XResult
|
||||
}
|
||||
}
|
||||
|
||||
private static void CheckContent(ResultConfiguration resultConfiguration, string dateGroupDirectory, string contentDescription, string result)
|
||||
private static void CheckContent(ResultSettings resultSettings, string dateGroupDirectory, string contentDescription, string result)
|
||||
{
|
||||
VerifyDirectories(resultConfiguration, dateGroupDirectory, resultConfiguration.ResultContent);
|
||||
string contentDirectory = new(result.Replace("<>", resultConfiguration.ResultContent));
|
||||
VerifyDirectories(resultSettings, dateGroupDirectory, resultSettings.ResultContent);
|
||||
string contentDirectory = new(result.Replace("<>", resultSettings.ResultContent));
|
||||
if (!Directory.Exists(contentDirectory))
|
||||
_ = Directory.CreateDirectory(contentDirectory);
|
||||
string checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("() - ", contentDescription));
|
||||
@ -48,12 +48,12 @@ internal abstract class XResult
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
|
||||
private static void CheckSingleton(ResultConfiguration resultConfiguration, string dateGroupDirectory, string singletonDescription, bool converted, string result)
|
||||
private static void CheckSingleton(ResultSettings resultSettings, string dateGroupDirectory, string singletonDescription, bool converted, string result)
|
||||
{
|
||||
VerifyDirectories(resultConfiguration, dateGroupDirectory, resultConfiguration.ResultSingleton);
|
||||
VerifyDirectories(resultSettings, dateGroupDirectory, resultSettings.ResultSingleton);
|
||||
if (!converted)
|
||||
{
|
||||
string singletonDirectory = new(result.Replace("<>", resultConfiguration.ResultSingleton));
|
||||
string singletonDirectory = new(result.Replace("<>", resultSettings.ResultSingleton));
|
||||
if (!Directory.Exists(singletonDirectory))
|
||||
_ = Directory.CreateDirectory(singletonDirectory);
|
||||
}
|
||||
@ -62,12 +62,12 @@ internal abstract class XResult
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
|
||||
private static void CheckCollection(ResultConfiguration resultConfiguration, string dateGroupDirectory, string collectionDescription, bool converted, string result)
|
||||
private static void CheckCollection(ResultSettings resultSettings, string dateGroupDirectory, string collectionDescription, bool converted, string result)
|
||||
{
|
||||
VerifyDirectories(resultConfiguration, dateGroupDirectory, resultConfiguration.ResultCollection);
|
||||
VerifyDirectories(resultSettings, dateGroupDirectory, resultSettings.ResultCollection);
|
||||
if (!converted)
|
||||
{
|
||||
string collectionDirectory = new(result.Replace("<>", resultConfiguration.ResultCollection));
|
||||
string collectionDirectory = new(result.Replace("<>", resultSettings.ResultCollection));
|
||||
if (!Directory.Exists(collectionDirectory))
|
||||
_ = Directory.CreateDirectory(collectionDirectory);
|
||||
}
|
||||
@ -76,24 +76,24 @@ internal abstract class XResult
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
|
||||
internal static string GetResultsFullGroupDirectory(ResultConfiguration resultConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel)
|
||||
internal static string GetResultsFullGroupDirectory(ResultSettings resultSettings, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel)
|
||||
{
|
||||
string result = GetResultsDateGroupDirectory(resultConfiguration, description);
|
||||
string result = GetResultsDateGroupDirectory(resultSettings, description);
|
||||
if (includeResizeGroup)
|
||||
result = Path.Combine(result, outputResolution);
|
||||
if (includeModel && includePredictorModel)
|
||||
{
|
||||
string modelName;
|
||||
string predictorModelName;
|
||||
if (resultConfiguration.ModelName is null)
|
||||
if (resultSettings.ModelName is null)
|
||||
modelName = Model.Hog.ToString();
|
||||
else
|
||||
modelName = resultConfiguration.ModelName;
|
||||
if (resultConfiguration.PredictorModelName is null)
|
||||
modelName = resultSettings.ModelName;
|
||||
if (resultSettings.PredictorModelName is null)
|
||||
predictorModelName = PredictorModel.Large.ToString();
|
||||
else
|
||||
predictorModelName = resultConfiguration.PredictorModelName;
|
||||
string dateGroupDirectory = string.Concat(outputResolution.Replace(" ", string.Empty), "-", modelName, "-", predictorModelName, "-", resultConfiguration.NumberOfJitters, "-", resultConfiguration.NumberOfTimesToUpsample);
|
||||
predictorModelName = resultSettings.PredictorModelName;
|
||||
string dateGroupDirectory = string.Concat(outputResolution.Replace(" ", string.Empty), "-", modelName, "-", predictorModelName, "-", resultSettings.NumberOfJitters, "-", resultSettings.NumberOfTimesToUpsample);
|
||||
result = Path.Combine(result, dateGroupDirectory);
|
||||
}
|
||||
else if (includeModel)
|
||||
@ -105,35 +105,35 @@ internal abstract class XResult
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static List<string> GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted)
|
||||
internal static List<string> GetDirectoryInfoCollection(ResultSettings resultSettings, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted)
|
||||
{
|
||||
List<string> results = [];
|
||||
string sourceDirectorySegment = GetRelativePath(resultConfiguration, sourceDirectory);
|
||||
string sourceDirectorySegment = GetRelativePath(resultSettings, sourceDirectory);
|
||||
string result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
|
||||
if (!string.IsNullOrEmpty(contentDescription))
|
||||
CheckContent(resultConfiguration, dateGroupDirectory, contentDescription, result);
|
||||
CheckContent(resultSettings, dateGroupDirectory, contentDescription, result);
|
||||
if (!string.IsNullOrEmpty(singletonDescription))
|
||||
CheckSingleton(resultConfiguration, dateGroupDirectory, singletonDescription, converted, result);
|
||||
CheckSingleton(resultSettings, dateGroupDirectory, singletonDescription, converted, result);
|
||||
if (!string.IsNullOrEmpty(collectionDescription))
|
||||
CheckCollection(resultConfiguration, dateGroupDirectory, collectionDescription, converted, result);
|
||||
CheckCollection(resultSettings, dateGroupDirectory, collectionDescription, converted, result);
|
||||
results.Add(result);
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static string GetResultsGroupDirectory(ResultConfiguration resultConfiguration, string description, bool create)
|
||||
internal static string GetResultsGroupDirectory(ResultSettings resultSettings, string description, bool create)
|
||||
{
|
||||
string result = Path.Combine($"{resultConfiguration.RootDirectory}-Results", description.Replace('_', ')'));
|
||||
string result = Path.Combine($"{resultSettings.RootDirectory}-Results", description.Replace('_', ')'));
|
||||
if (create && !Directory.Exists(result))
|
||||
_ = Directory.CreateDirectory(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static List<string> GetDirectoryInfoCollection(ResultConfiguration resultConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription)
|
||||
internal static List<string> GetDirectoryInfoCollection(ResultSettings resultSettings, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription)
|
||||
{
|
||||
List<string> results;
|
||||
bool converted = false;
|
||||
string dateGroupDirectory = GetResultsFullGroupDirectory(resultConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
|
||||
results = GetDirectoryInfoCollection(resultConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted);
|
||||
string dateGroupDirectory = GetResultsFullGroupDirectory(resultSettings, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
|
||||
results = GetDirectoryInfoCollection(resultSettings, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted);
|
||||
return results;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user