Switch to ExifDirectory from Property

This commit is contained in:
2025-04-06 18:23:57 -07:00
parent 3f7affceef
commit c7ded16e50
50 changed files with 2647 additions and 1846 deletions

View File

@ -39,7 +39,6 @@
<ItemGroup>
<ProjectReference Include="..\BlurHash\BlurHash.csproj" />
<ProjectReference Include="..\Metadata\Metadata.csproj" />
<ProjectReference Include="..\Property\Property.csproj" />
<ProjectReference Include="..\Resize\Resize.csproj" />
<ProjectReference Include="..\Shared\View-by-Distance.Shared.csproj" />
</ItemGroup>

View File

@ -54,6 +54,55 @@ public partial class UnitTestHardCoded
_PropertyConfiguration = propertyConfiguration;
}
[TestMethod]
public void TestMethodId()
{
int id;
id = 748161839;
string imageTrueTruePositive = IId.GetPaddedId(_PropertyConfiguration, id, ".jpg", hasIgnoreKeyword: true, hasDateTimeOriginal: true, index: null);
Assert.AreEqual("816184700398", imageTrueTruePositive);
string imageTrueFalsePositive = IId.GetPaddedId(_PropertyConfiguration, id, ".jpg", hasIgnoreKeyword: true, hasDateTimeOriginal: false, index: null);
Assert.AreEqual("816184700398", imageTrueFalsePositive);
string imageFalseFalsePositive = IId.GetPaddedId(_PropertyConfiguration, id, ".jpg", hasIgnoreKeyword: false, hasDateTimeOriginal: false, index: null);
Assert.AreEqual("816184700397", imageFalseFalsePositive);
string imageFalseTruePositive = IId.GetPaddedId(_PropertyConfiguration, id, ".jpg", hasIgnoreKeyword: false, hasDateTimeOriginal: true, index: null);
Assert.AreEqual("816184700399", imageFalseTruePositive);
try
{ string videoTrueTruePositive = IId.GetPaddedId(_PropertyConfiguration, id, ".mov", hasIgnoreKeyword: true, hasDateTimeOriginal: true, index: null); }
catch (Exception)
{ }
try
{ string videoTrueFalsePositive = IId.GetPaddedId(_PropertyConfiguration, id, ".mov", hasIgnoreKeyword: true, hasDateTimeOriginal: false, index: null); }
catch (Exception)
{ }
string videoFalseFalsePositive = IId.GetPaddedId(_PropertyConfiguration, id, ".mov", hasIgnoreKeyword: false, hasDateTimeOriginal: false, index: null);
Assert.AreEqual("816184700395", videoFalseFalsePositive);
string videoFalseTruePositive = IId.GetPaddedId(_PropertyConfiguration, id, ".mov", hasIgnoreKeyword: false, hasDateTimeOriginal: true, index: null);
Assert.AreEqual("816184700396", videoFalseTruePositive);
id = -748161839;
string imageTrueTrueNegative = IId.GetPaddedId(_PropertyConfiguration, id, ".jpg", hasIgnoreKeyword: true, hasDateTimeOriginal: true, index: null);
Assert.AreEqual("816184700392", imageTrueTrueNegative);
string imageTrueFalseNegative = IId.GetPaddedId(_PropertyConfiguration, id, ".jpg", hasIgnoreKeyword: true, hasDateTimeOriginal: false, index: null);
Assert.AreEqual("816184700392", imageTrueFalseNegative);
string imageFalseFalseNegative = IId.GetPaddedId(_PropertyConfiguration, id, ".jpg", hasIgnoreKeyword: false, hasDateTimeOriginal: false, index: null);
Assert.AreEqual("816184700393", imageFalseFalseNegative);
string imageFalseTrueNegative = IId.GetPaddedId(_PropertyConfiguration, id, ".jpg", hasIgnoreKeyword: false, hasDateTimeOriginal: true, index: null);
Assert.AreEqual("816184700391", imageFalseTrueNegative);
try
{ string videoTrueTrueNegative = IId.GetPaddedId(_PropertyConfiguration, id, ".mov", hasIgnoreKeyword: true, hasDateTimeOriginal: true, index: null); }
catch (Exception)
{ }
try
{ string videoTrueFalseNegative = IId.GetPaddedId(_PropertyConfiguration, id, ".mov", hasIgnoreKeyword: true, hasDateTimeOriginal: false, index: null); }
catch (Exception)
{ }
string videoFalseFalseNegative = IId.GetPaddedId(_PropertyConfiguration, id, ".mov", hasIgnoreKeyword: false, hasDateTimeOriginal: false, index: null);
Assert.AreEqual("816184700390", videoFalseFalseNegative);
string videoFalseTrueNegative = IId.GetPaddedId(_PropertyConfiguration, id, ".mov", hasIgnoreKeyword: false, hasDateTimeOriginal: true, index: null);
Assert.AreEqual("816184700394", videoFalseTrueNegative);
NonThrowTryCatch();
}
private static void NonThrowTryCatch()
{
try
@ -61,18 +110,6 @@ public partial class UnitTestHardCoded
catch (Exception) { }
}
[TestMethod]
public void TestMethodNull()
{
Assert.IsFalse(_AppSettings is null);
Assert.IsFalse(_Configuration is null);
Assert.IsFalse(_IsEnvironment is null);
Assert.IsFalse(_WorkingDirectory is null);
Assert.IsFalse(_ConfigurationRoot is null);
Assert.IsFalse(_PropertyConfiguration is null);
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodDel()
{
@ -86,30 +123,6 @@ public partial class UnitTestHardCoded
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodGetApproximateYears()
{
string personDisplayDirectory = string.Concat($"D:/1-Images-A/Images-{_Git}-Results/A2)People/{_Git}", "/{}/^/Sydney Dupray^9");
if (Directory.Exists(Directory.GetDirectoryRoot(personDisplayDirectory)) && Directory.Exists(personDisplayDirectory))
{
char numberSign = '#';
string? minusOne = null;
char[] personCharacters = ['^'];
string personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory);
string personBirthdayFormat = _Configuration.PropertyConfiguration.PersonBirthdayFormat;
string[] personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly);
List<(string, PersonBirthday)> collection = IPersonBirthday.GetPersonBirthdays(personBirthdayFormat, personKeyDirectories, personDisplayDirectoryName);
int? approximateYears = IAge.GetApproximateYears(personCharacters, personDisplayDirectoryName);
if (approximateYears is null)
throw new NullReferenceException(nameof(approximateYears));
Assert.IsNotNull(approximateYears);
Assert.IsTrue(approximateYears.Value == 9);
string? change = IPersonContainer.VerifyAge(numberSign, personDisplayDirectory, minusOne, personDisplayDirectoryName, approximateYears, collection);
Assert.IsNull(change);
}
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodDel2()
{
@ -123,14 +136,35 @@ public partial class UnitTestHardCoded
NonThrowTryCatch();
}
private static (string?, string, string) Get(string[] segments)
[TestMethod]
public void TestMethodNull()
{
(string?, string, string) result;
if ((!segments[0].Contains('#') && (segments[3].Contains('~') || segments[3].Contains('#'))) || (segments[0].Contains('#') && !segments[3].Contains('#')))
result = new(null, segments[3], segments[4]);
else
result = new(segments[0], segments[3], segments[4]);
return result;
Assert.IsNotNull(_AppSettings);
Assert.IsNotNull(_Configuration);
Assert.IsNotNull(_IsEnvironment);
Assert.IsNotNull(_WorkingDirectory);
Assert.IsNotNull(_ConfigurationRoot);
Assert.IsNotNull(_PropertyConfiguration);
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodRename()
{
// string $directory = "D:/2-Images-B/Not-Copy-Copy-{_Git}";
string directory = $"D:/1-Images-A/Images-{_Git}";
// string $directory = "D:/2-Images-B/Not-Copy-Copy-{_Git}";
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
{
string[] directories = Directory.GetDirectories(directory, "*;*", SearchOption.AllDirectories);
foreach (string subDirectory in directories.OrderByDescending(l => l.Length - l.Replace(@"\", string.Empty).Length))
{
if (!subDirectory.EndsWith(";9"))
continue;
Directory.Move(subDirectory, $"{subDirectory[..^2]} !9");
}
}
NonThrowTryCatch();
}
[TestMethod]
@ -189,64 +223,14 @@ public partial class UnitTestHardCoded
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodRenameAbandoned()
private static (string?, string, string) Get(string[] segments)
{
string directory = string.Concat($"D:/1-Images-A/Images-{_Git}-Results/A2)People/{_Git}", "/{}/!/Abandoned");
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
{
string checkFile;
string[] files = Directory.GetFiles(directory, "*.abd", SearchOption.TopDirectoryOnly);
foreach (string file in files)
{
checkFile = file[..^4];
if (File.Exists(checkFile))
continue;
File.Move(file, checkFile);
}
Assert.IsTrue(true);
}
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodRenameDelete()
{
string directory = string.Concat($"D:/1-Images-A/Images-{_Git}-Results/A)Property/{_Git}", "/{}");
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
{
string checkFile;
string[] files = Directory.GetFiles(directory, "*.del", SearchOption.AllDirectories);
foreach (string file in files)
{
checkFile = file[..^4];
if (File.Exists(checkFile))
continue;
File.Move(file, checkFile);
}
Assert.IsTrue(true);
}
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodRenameOld()
{
string directory = $"D:/1-Images-A/Images-{_Git}-Results/E)Distance/{_Git}/()";
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
{
string checkFile;
string[] files = Directory.GetFiles(directory, "*.old", SearchOption.AllDirectories);
foreach (string file in files)
{
checkFile = file[..^4];
if (File.Exists(checkFile))
continue;
File.Move(file, checkFile);
}
Assert.IsTrue(true);
}
NonThrowTryCatch();
(string?, string, string) result;
if ((!segments[0].Contains('#') && (segments[3].Contains('~') || segments[3].Contains('#'))) || (segments[0].Contains('#') && !segments[3].Contains('#')))
result = new(null, segments[3], segments[4]);
else
result = new(segments[0], segments[3], segments[4]);
return result;
}
[TestMethod]
@ -285,33 +269,59 @@ public partial class UnitTestHardCoded
}
[TestMethod]
public void TestMethodRename()
public void TestMethodRenameOld()
{
// string $directory = "D:/2-Images-B/Not-Copy-Copy-{_Git}";
string directory = $"D:/1-Images-A/Images-{_Git}";
// string $directory = "D:/2-Images-B/Not-Copy-Copy-{_Git}";
string directory = $"D:/1-Images-A/Images-{_Git}-Results/E)Distance/{_Git}/()";
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
{
string[] directories = Directory.GetDirectories(directory, "*;*", SearchOption.AllDirectories);
foreach (string subDirectory in directories.OrderByDescending(l => l.Length - l.Replace(@"\", string.Empty).Length))
string checkFile;
string[] files = Directory.GetFiles(directory, "*.old", SearchOption.AllDirectories);
foreach (string file in files)
{
if (!subDirectory.EndsWith(";9"))
checkFile = file[..^4];
if (File.Exists(checkFile))
continue;
Directory.Move(subDirectory, $"{subDirectory[..^2]} !9");
File.Move(file, checkFile);
}
Assert.IsTrue(true);
}
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodRenameForUnknown()
public void TestMethodImmichAsset()
{
string directory = $"D:/1-Images-A/Images-{_Git}-Results/E)Distance/{_Git}/(RectInt-2023-06-19-less-0.99)";
if (!string.IsNullOrEmpty(_Configuration.ImmichAssetsFile) && File.Exists(_Configuration.ImmichAssetsFile))
{
Dictionary<string, ImmichAsset> keyValuePairs = [];
string json = File.ReadAllText(_Configuration.ImmichAssetsFile);
ImmichAsset[]? immichAssets = JsonSerializer.Deserialize(json, ImmichAssetCollectionSourceGenerationContext.Default.ImmichAssetArray);
if (immichAssets is not null)
{
foreach (ImmichAsset immichAsset in immichAssets)
keyValuePairs.Add(immichAsset.OriginalPath, immichAsset);
}
Assert.IsTrue(keyValuePairs.Count > 0);
}
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodRenameDelete()
{
string directory = string.Concat($"D:/1-Images-A/Images-{_Git}-Results/A)Property/{_Git}", "/{}");
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
{
string[] files = Directory.GetFiles(directory, "*.unk", SearchOption.AllDirectories);
string checkFile;
string[] files = Directory.GetFiles(directory, "*.del", SearchOption.AllDirectories);
foreach (string file in files)
File.Move(file, file[..^4]);
{
checkFile = file[..^4];
if (File.Exists(checkFile))
continue;
File.Move(file, checkFile);
}
Assert.IsTrue(true);
}
NonThrowTryCatch();
}
@ -347,19 +357,58 @@ public partial class UnitTestHardCoded
}
[TestMethod]
public void TestMethodImmichAsset()
public void TestMethodRenameAbandoned()
{
if (!string.IsNullOrEmpty(_Configuration.ImmichAssetsFile) && File.Exists(_Configuration.ImmichAssetsFile))
string directory = string.Concat($"D:/1-Images-A/Images-{_Git}-Results/A2)People/{_Git}", "/{}/!/Abandoned");
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
{
Dictionary<string, ImmichAsset> keyValuePairs = [];
string json = File.ReadAllText(_Configuration.ImmichAssetsFile);
ImmichAsset[]? immichAssets = JsonSerializer.Deserialize(json, ImmichAssetCollectionSourceGenerationContext.Default.ImmichAssetArray);
if (immichAssets is not null)
string checkFile;
string[] files = Directory.GetFiles(directory, "*.abd", SearchOption.TopDirectoryOnly);
foreach (string file in files)
{
foreach (ImmichAsset immichAsset in immichAssets)
keyValuePairs.Add(immichAsset.OriginalPath, immichAsset);
checkFile = file[..^4];
if (File.Exists(checkFile))
continue;
File.Move(file, checkFile);
}
Assert.IsTrue(keyValuePairs.Count > 0);
Assert.IsTrue(true);
}
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodRenameForUnknown()
{
string directory = $"D:/1-Images-A/Images-{_Git}-Results/E)Distance/{_Git}/(RectInt-2023-06-19-less-0.99)";
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
{
string[] files = Directory.GetFiles(directory, "*.unk", SearchOption.AllDirectories);
foreach (string file in files)
File.Move(file, file[..^4]);
}
NonThrowTryCatch();
}
[TestMethod]
public void TestMethodGetApproximateYears()
{
string personDisplayDirectory = string.Concat($"D:/1-Images-A/Images-{_Git}-Results/A2)People/{_Git}", "/{}/^/Sydney Dupray^9");
if (Directory.Exists(Directory.GetDirectoryRoot(personDisplayDirectory)) && Directory.Exists(personDisplayDirectory))
{
char numberSign = '#';
string? minusOne = null;
char[] personCharacters = ['^'];
string personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory);
string personBirthdayFormat = _Configuration.PropertyConfiguration.PersonBirthdayFormat;
string[] personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly);
List<(string, PersonBirthday)> collection = IPersonBirthday.GetPersonBirthdays(personBirthdayFormat, personKeyDirectories, personDisplayDirectoryName);
int? approximateYears = IAge.GetApproximateYears(personCharacters, personDisplayDirectoryName);
if (approximateYears is null)
throw new NullReferenceException(nameof(approximateYears));
Assert.IsNotNull(approximateYears);
Assert.AreEqual(9, approximateYears.Value);
string? change = IPersonContainer.VerifyAge(numberSign, personDisplayDirectory, minusOne, personDisplayDirectoryName, approximateYears, collection);
Assert.IsNull(change);
}
NonThrowTryCatch();
}

View File

@ -56,13 +56,6 @@ public class UnitTestResize
_PropertyConfiguration = propertyConfiguration;
}
private static void NonThrowTryCatch()
{
try
{ throw new Exception(); }
catch (Exception) { }
}
[TestMethod]
public void TestMethodNull()
{
@ -75,13 +68,80 @@ public class UnitTestResize
NonThrowTryCatch();
}
private A_Property GetPropertyLogic(bool reverse, string aResultsFullGroupDirectory)
private static void NonThrowTryCatch()
{
A_Property result;
if (_Configuration?.PropertyConfiguration is null)
throw new NullReferenceException(nameof(_PropertyConfiguration));
result = new(_AppSettings.MaxDegreeOfParallelism, _PropertyConfiguration, _Configuration.OutputExtension, reverse, aResultsFullGroupDirectory);
return result;
try
{ throw new Exception(); }
catch (Exception) { }
}
[TestMethod]
public void TestMethodResize()
{
if (_PropertyConfiguration.NumberOfJitters is null)
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfJitters));
if (_PropertyConfiguration.NumberOfTimesToUpsample is null)
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfTimesToUpsample));
// string sourceFileName = "100000507001158650387.jpg";
// string sourceDirectoryName = "Facebook/2023.2 Summer Facebook";
string sourceFileName = "105131603001106320328.jpg";
string sourceDirectoryName = "Mike iCloud Have Date Taken 2022 !9";
Item item;
bool reverse = false;
bool isArchive = false;
FileHolder resizedFileHolder;
long ticks = DateTime.Now.Ticks;
List<string> parseExceptions = [];
const bool isValidImageFormatExtension = true;
List<Tuple<string, DateTime>> subFileTuples = [];
int length = _PropertyConfiguration.RootDirectory.Length;
string[] changesFrom = [nameof(A_Property)];
string outputResolution = _Configuration.OutputResolutions[0];
bool outputResolutionHasNumber = outputResolution.Any(char.IsNumber);
(string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution);
(string aResultsFullGroupDirectory, string bResultsFullGroupDirectory) = GetResultsFullGroupDirectories();
Shared.Models.Methods.IBlurHasher blurHasher = new BlurHash.Models.C2_BlurHasher(_PropertyConfiguration);
A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory);
string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}");
if (!Directory.Exists(aPropertySingletonDirectory))
_ = Directory.CreateDirectory(aPropertySingletonDirectory);
(ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetTuple(_Configuration.OutputExtension, _Configuration.OutputQuality);
B_Metadata metadata = new(null, _PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, ticks, bResultsFullGroupDirectory);
_ = metadata.ToString();
C_Resize resize = new(_PropertyConfiguration, _Configuration.ForceResizeLastWriteTimeToCreationTime, _Configuration.OverrideForResizeImages, _Configuration.PropertiesChangedForResize, _Configuration.ValidResolutions, imageCodecInfo, encoderParameters, filenameExtension);
_ = resize.ToString();
bool isUniqueFileName = false;
bool? isNotUniqueAndNeedsReview = null;
FileHolder sourceDirectoryFileHolder = IFileHolder.Get(".json");
string sourceDirectory = Path.GetFullPath(Path.Combine(_PropertyConfiguration.RootDirectory, sourceDirectoryName));
FileHolder fileHolder = IFileHolder.Get(Path.Combine(sourceDirectory, sourceFileName));
FilePath filePath = FilePath.Get(_PropertyConfiguration, fileHolder, index: null);
Assert.IsNotNull(filePath.Id);
string relativePath = IPath.GetRelativePath(fileHolder.FullName, length);
ExifDirectory? exifDirectory = Metadata.Models.Stateless.Methods.IMetadata.GetExifDirectory(filePath);
string propertyLogicSourceDirectory = Path.GetFullPath(Path.Combine(aPropertySingletonDirectory, sourceDirectoryName));
propertyLogic.SetAngleBracketCollection(aResultsFullGroupDirectory, propertyLogicSourceDirectory);
if (outputResolutionHasNumber)
resize.SetAngleBracketCollection(cResultsFullGroupDirectory, sourceDirectory);
resize.Update(cResultsFullGroupDirectory);
blurHasher.Update(cResultsFullGroupDirectory);
item = Item.Get(filePath, sourceDirectoryFileHolder, relativePath, isArchive, isNotUniqueAndNeedsReview, isUniqueFileName, isValidImageFormatExtension, exifDirectory, false, false, false);
if (item.ExifDirectory is null)
throw new NullReferenceException(nameof(item.ExifDirectory));
resizedFileHolder = resize.GetResizedFileHolder(cResultsFullGroupDirectory, item, outputResolutionHasNumber, filePath.Id.Value);
item.SetResizedFileHolder(resize.FileNameExtension, resizedFileHolder);
MappingFromItem mappingFromItem = IMappingFromItem.GetMappingFromItem(item);
Dictionary<string, int[]> outputResolutionToResize = resize.GetResizeKeyValuePairs(_PropertyConfiguration, cResultsFullGroupDirectory, item.FilePath, subFileTuples, parseExceptions, item.ExifDirectory, mappingFromItem);
Assert.IsNotNull(mappingFromItem.ResizedFileHolder);
resize.SaveResizedSubfile(_PropertyConfiguration, outputResolution, cResultsFullGroupDirectory, subFileTuples, item, item.ExifDirectory, mappingFromItem, outputResolutionToResize);
string blurHash = blurHasher.Encode(resizedFileHolder);
Assert.IsNotNull(blurHash);
exifDirectory = metadata.GetMetadataCollection(item.FilePath, subFileTuples, parseExceptions, changesFrom, mappingFromItem);
string json = JsonSerializer.Serialize(exifDirectory, ExifDirectoryBaseSourceGenerationContext.Default.ExifDirectoryBase);
File.WriteAllText("../../../.json", json);
MetadataExtractor.GeoLocation? geoLocation = Metadata.Models.Stateless.Methods.IMetadata.GeoLocation(exifDirectory);
double? distance = geoLocation is null ? null : Metadata.Models.Stateless.Methods.IMetadata.GetDistance(1, 1, geoLocation.Latitude, geoLocation.Longitude);
NonThrowTryCatch();
}
private (string, string) GetResultsFullGroupDirectories()
@ -117,77 +177,13 @@ public class UnitTestResize
return new(cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory);
}
[TestMethod]
public void TestMethodResize()
private A_Property GetPropertyLogic(bool reverse, string aResultsFullGroupDirectory)
{
if (_PropertyConfiguration.NumberOfJitters is null)
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfJitters));
if (_PropertyConfiguration.NumberOfTimesToUpsample is null)
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfTimesToUpsample));
// string sourceFileName = "100000507001158650387.jpg";
// string sourceDirectoryName = "Facebook/2023.2 Summer Facebook";
string sourceFileName = "105131603001106320328.jpg";
string sourceDirectoryName = "Mike iCloud Have Date Taken 2022 !9";
Item item;
bool reverse = false;
bool isArchive = false;
FileHolder resizedFileHolder;
List<string> parseExceptions = [];
Shared.Models.Property? property = null;
const bool isValidImageFormatExtension = true;
List<Tuple<string, DateTime>> subFileTuples = [];
int length = _PropertyConfiguration.RootDirectory.Length;
string[] changesFrom = [nameof(A_Property)];
string outputResolution = _Configuration.OutputResolutions[0];
bool outputResolutionHasNumber = outputResolution.Any(char.IsNumber);
(string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution);
(string aResultsFullGroupDirectory, string bResultsFullGroupDirectory) = GetResultsFullGroupDirectories();
Shared.Models.Methods.IBlurHasher blurHasher = new BlurHash.Models.C2_BlurHasher(_PropertyConfiguration);
A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory);
string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}");
if (!Directory.Exists(aPropertySingletonDirectory))
_ = Directory.CreateDirectory(aPropertySingletonDirectory);
(ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetTuple(_Configuration.OutputExtension, _Configuration.OutputQuality);
B_Metadata metadata = new(_PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory);
_ = metadata.ToString();
C_Resize resize = new(_PropertyConfiguration, _Configuration.ForceResizeLastWriteTimeToCreationTime, _Configuration.OverrideForResizeImages, _Configuration.PropertiesChangedForResize, _Configuration.ValidResolutions, imageCodecInfo, encoderParameters, filenameExtension);
_ = resize.ToString();
bool isUniqueFileName = false;
bool? isNotUniqueAndNeedsReview = null;
FileHolder sourceDirectoryFileHolder = IFileHolder.Get(".json");
string sourceDirectory = Path.GetFullPath(Path.Combine(_PropertyConfiguration.RootDirectory, sourceDirectoryName));
FileHolder fileHolder = IFileHolder.Get(Path.Combine(sourceDirectory, sourceFileName));
FilePath filePath = FilePath.Get(_PropertyConfiguration, fileHolder, index: null);
Assert.IsNotNull(filePath.Id);
string relativePath = IPath.GetRelativePath(fileHolder.FullName, length);
string propertyLogicSourceDirectory = Path.GetFullPath(Path.Combine(aPropertySingletonDirectory, sourceDirectoryName));
propertyLogic.SetAngleBracketCollection(aResultsFullGroupDirectory, propertyLogicSourceDirectory);
if (outputResolutionHasNumber)
resize.SetAngleBracketCollection(cResultsFullGroupDirectory, sourceDirectory);
resize.Update(cResultsFullGroupDirectory);
blurHasher.Update(cResultsFullGroupDirectory);
item = Item.Get(filePath, sourceDirectoryFileHolder, relativePath, isArchive, isNotUniqueAndNeedsReview, isUniqueFileName, isValidImageFormatExtension, property, false, false, false);
if (item.Property is null)
{
property = propertyLogic.GetProperty(metadata, item, subFileTuples, parseExceptions);
item.Update(property);
}
if (property is null || item.Property is null)
throw new NullReferenceException(nameof(property));
resizedFileHolder = resize.GetResizedFileHolder(cResultsFullGroupDirectory, item, outputResolutionHasNumber, filePath.Id.Value);
item.SetResizedFileHolder(resize.FileNameExtension, resizedFileHolder);
MappingFromItem mappingFromItem = IMappingFromItem.GetMappingFromItem(item);
Dictionary<string, int[]> outputResolutionToResize = resize.GetResizeKeyValuePairs(_PropertyConfiguration, cResultsFullGroupDirectory, item.FilePath, subFileTuples, parseExceptions, item.Property, mappingFromItem);
Assert.IsNotNull(mappingFromItem.ResizedFileHolder);
resize.SaveResizedSubfile(_PropertyConfiguration, outputResolution, cResultsFullGroupDirectory, subFileTuples, item, item.Property, mappingFromItem, outputResolutionToResize);
string blurHash = blurHasher.Encode(resizedFileHolder);
Assert.IsNotNull(blurHash);
ExifDirectory exifDirectory = metadata.GetMetadataCollection(item.FilePath, subFileTuples, parseExceptions, changesFrom, mappingFromItem);
string json = JsonSerializer.Serialize(exifDirectory, ExifDirectoryBaseSourceGenerationContext.Default.ExifDirectoryBase);
File.WriteAllText("../../../.json", json);
MetadataExtractor.GeoLocation? geoLocation = Metadata.Models.Stateless.Methods.IMetadata.GeoLocation(exifDirectory);
double? distance = geoLocation is null ? null : Metadata.Models.Stateless.Methods.IMetadata.GetDistance(1, 1, geoLocation.Latitude, geoLocation.Longitude);
NonThrowTryCatch();
A_Property result;
if (_Configuration?.PropertyConfiguration is null)
throw new NullReferenceException(nameof(_PropertyConfiguration));
result = new(_AppSettings.MaxDegreeOfParallelism, _PropertyConfiguration, _Configuration.OutputExtension, reverse, aResultsFullGroupDirectory);
return result;
}
}