From 1ede3ebcdb2d4dfb740b024a8a803f25bbd76135 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Sat, 5 Jul 2025 19:54:45 -0700 Subject: [PATCH] House Cleaning --- Compare/appsettings.Development.json | 28 ++++++++- Compare/appsettings.json | 26 ++++++++- Copy-Distinct/appsettings.json | 26 ++++++++- Date-Group/appsettings.json | 26 ++++++++- Delete-By-Distinct/appsettings.json | 26 ++++++++- Delete-By-Relative/appsettings.json | 26 ++++++++- Duplicate-Search/appsettings.json | 26 ++++++++- Face/Models/_D_Face.cs | 4 +- Instance/DlibDotNet.cs | 4 +- Map/Models/Stateless/FaceFileLogic.cs | 57 +++++++++---------- Map/Models/Stateless/MapLogic.cs | 40 +++++++------ Metadata-Query/appsettings.json | 26 ++++++++- Mirror-Length/appsettings.json | 26 ++++++++- Offset-Date-Time-Original/appsettings.json | 26 ++++++++- PrepareForOld/appsettings.Development.json | 26 ++++++++- Rename/.vscode/appsettings.example.json | 26 ++++++++- Set-Created-Date/appsettings.json | 26 ++++++++- Shared/Models/Location.cs | 8 +-- Shared/Models/LocationContainer.cs | 57 +++++++++---------- .../Models/Stateless/Methods/IDlibDotNet.cs | 1 + Shared/Models/Stateless/Methods/ILocation.cs | 18 +++--- Shared/Models/Stateless/Methods/Id.cs | 40 +++++++------ Shared/Models/Stateless/Methods/Location.cs | 5 +- Shared/Models/Stateless/Methods/XDirectory.cs | 8 ++- Tests/UnitTestCalculations.cs | 8 +-- 25 files changed, 445 insertions(+), 145 deletions(-) diff --git a/Compare/appsettings.Development.json b/Compare/appsettings.Development.json index 0a88493..43b661b 100644 --- a/Compare/appsettings.Development.json +++ b/Compare/appsettings.Development.json @@ -89,10 +89,32 @@ "PropertiesChangedForProperty": false, "RootDirectory": "C:/Tmp/Phares/Compare/Images-dd514b88", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", + ".nef", + ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "PropertyContentCollectionFiles": [ "/Images-ec5a909 - Results/A) Property/2022-12-30/[()]/637869381676042455.json", @@ -117,7 +139,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ], "VerifyToSeason": [ ". 2000", diff --git a/Compare/appsettings.json b/Compare/appsettings.json index bddb6d5..be1ffdc 100644 --- a/Compare/appsettings.json +++ b/Compare/appsettings.json @@ -90,12 +90,32 @@ "/zzz Phares Slides/Slides 2015-06-10/Magazine 01" ], "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "PropertyContentCollectionFiles": [ "/Images-ec5a909 - Results/A) Property/2022-12-30/[()]/637869381676042455.json", @@ -120,7 +140,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ], "VerifyToSeason": [ ". 2000", diff --git a/Copy-Distinct/appsettings.json b/Copy-Distinct/appsettings.json index c8ca0f8..243e329 100644 --- a/Copy-Distinct/appsettings.json +++ b/Copy-Distinct/appsettings.json @@ -71,12 +71,32 @@ "ResultSingleton": "{}", "RootDirectory": "D:/Images", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "ValidImageFormatExtensions": [ ".bmp", @@ -92,7 +112,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ] } } diff --git a/Date-Group/appsettings.json b/Date-Group/appsettings.json index 4629be4..bfd94d0 100644 --- a/Date-Group/appsettings.json +++ b/Date-Group/appsettings.json @@ -70,12 +70,32 @@ "ResultSingleton": "{}", "RootDirectory": "C:/Tmp/phares/Pictures", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "PropertyContentCollectionFiles": [], "ValidImageFormatExtensions": [ @@ -92,7 +112,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ], "VerifyToSeason": [ ". 2000", diff --git a/Delete-By-Distinct/appsettings.json b/Delete-By-Distinct/appsettings.json index c0bf764..80b016d 100644 --- a/Delete-By-Distinct/appsettings.json +++ b/Delete-By-Distinct/appsettings.json @@ -72,12 +72,32 @@ "ResultSingleton": "{}", "RootDirectory": "C:/Tmp/Phares/Compare/Images-dd514b88", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "ValidImageFormatExtensions": [ ".bmp", @@ -93,7 +113,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ] } } diff --git a/Delete-By-Relative/appsettings.json b/Delete-By-Relative/appsettings.json index a9a0ba6..91633a8 100644 --- a/Delete-By-Relative/appsettings.json +++ b/Delete-By-Relative/appsettings.json @@ -67,12 +67,32 @@ "ResultSingleton": "{}", "RootDirectory": "C:/Tmp/Phares/Compare/Images-dd514b88", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "ValidImageFormatExtensions": [ ".bmp", @@ -88,7 +108,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ] } } diff --git a/Duplicate-Search/appsettings.json b/Duplicate-Search/appsettings.json index e5b1778..4a12e84 100644 --- a/Duplicate-Search/appsettings.json +++ b/Duplicate-Search/appsettings.json @@ -68,12 +68,32 @@ "ResultSingleton": "{}", "RootDirectory": "C:/Tmp/Phares/Compare/Images-dd514b88", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "ValidImageFormatExtensions": [ ".bmp", @@ -89,7 +109,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ] } } diff --git a/Face/Models/_D_Face.cs b/Face/Models/_D_Face.cs index 232e5cf..bbeec19 100644 --- a/Face/Models/_D_Face.cs +++ b/Face/Models/_D_Face.cs @@ -475,7 +475,7 @@ public class D_Face : IFaceD dFace.ReSaveFace(exifDirectory, filePath, face, mappedFile: false); continue; } - location = Shared.Models.Stateless.Methods.ILocation.GetLocation(face.Location, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, source.Height, source.Width, collection.Count); + location = Shared.Models.Stateless.Methods.ILocation.GetLocation(face.Location, source.Height, source.Width, collection.Count); if (location is null) continue; width = location.Right - location.Left; @@ -506,7 +506,7 @@ public class D_Face : IFaceD } if (File.Exists(fileName)) File.Delete(fileName); - location = Shared.Models.Stateless.Methods.ILocation.GetLocation(_FaceDistanceHiddenImageFactor, face.Location, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, source.Height, source.Width, collection.Count); + location = Shared.Models.Stateless.Methods.ILocation.GetLocation(_FaceDistanceHiddenImageFactor, face.Location, source.Height, source.Width, collection.Count); if (location is null) continue; width = location.Right - location.Left; diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index bfc4fa5..fe2a3e4 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -31,6 +31,8 @@ public partial class DlibDotNet : IDlibDotNet, IDisposable ReadOnlyCollection> FilePathsCollection, ReadOnlyDictionary? SplatNineIdentifiers); + public int? CurrentTick => + _ProgressBar?.CurrentTick; public long Ticks { get; init; } private readonly D_Face _Faces; @@ -1314,7 +1316,7 @@ public partial class DlibDotNet : IDlibDotNet, IDisposable } } if (items.Count > 0) - throw new Exception($"{items.Count} item(s) of {count} item(s) are not setup!"); + throw new Exception($"{items.Count} item(s) of {count} item(s) are not setup!{Environment.NewLine}{string.Join(Environment.NewLine, items.Select(l => l.FilePath.FileNameFirstSegment))}"); } private Record GetFilesCollectionThenCopyOrMove(IDlibDotNet dlibDotNet, B_Metadata metadata, string fileSearchFilter, string directorySearchFilter, string bResultsFullGroupDirectory, string outputResolution) diff --git a/Map/Models/Stateless/FaceFileLogic.cs b/Map/Models/Stateless/FaceFileLogic.cs index 28a2f00..5c8bac1 100644 --- a/Map/Models/Stateless/FaceFileLogic.cs +++ b/Map/Models/Stateless/FaceFileLogic.cs @@ -64,20 +64,19 @@ internal abstract class FaceFileLogic exifDirectory = Metadata.Models.Stateless.Methods.IMetadata.GetExifDirectory(mappedFile.FilePath); RectangleF? rectangle = ILocation.GetPercentagesRectangle(configuration.LocationDigits, wholePercentages.Value); personDisplayDirectoryName = mappedFile.PersonDisplayDirectoryName is null ? configuration.MappingDefaultName : mappedFile.PersonDisplayDirectoryName; - LocationContainer locationContainer = new(dateOnly, - exifDirectory, - mappedFile.DirectoryNumber, - personDisplayDirectoryName, - null, - null, - mappedFile.FilePath, - fromDistanceContent, - id.Value, - null, - null, - mappedFile.PersonKey, - rectangle, - wholePercentages.Value); + LocationContainer locationContainer = new(CreationDateOnly: dateOnly, + ExifDirectory: exifDirectory, + DirectoryNumber: mappedFile.DirectoryNumber, + DisplayDirectoryName: personDisplayDirectoryName, + Encoding: null, + FaceFile: null, + FilePath: mappedFile.FilePath, + FromDistanceContent: fromDistanceContent, + Id: id.Value, + LengthPermyriad: null, + LengthSource: null, + PersonKey: mappedFile.PersonKey, + WholePercentages: wholePercentages.Value); lock (locationContainers) locationContainers.Add(locationContainer); } @@ -167,23 +166,19 @@ internal abstract class FaceFileLogic MoveUnableToMatch(filePath); return; } - RectangleF? rectangle = ILocation.GetPercentagesRectangle(configuration.LocationDigits, wholePercentages.Value); - if (rectangle is null) - return; - LocationContainer locationContainer = new(dateOnly, - exifDirectory, - null, - null, - null, - faceFile, - filePath, - fromDistanceContent, - filePath.Id.Value, - null, - null, - null, - rectangle, - wholePercentages.Value); + LocationContainer locationContainer = new(CreationDateOnly: dateOnly, + ExifDirectory: exifDirectory, + DirectoryNumber: null, + DisplayDirectoryName: null, + Encoding: null, + FaceFile: faceFile, + FilePath: filePath, + FromDistanceContent: fromDistanceContent, + Id: filePath.Id.Value, + LengthPermyriad: null, + LengthSource: null, + PersonKey: null, + WholePercentages: wholePercentages.Value); lock (locationContainers) locationContainers.Add(locationContainer); } diff --git a/Map/Models/Stateless/MapLogic.cs b/Map/Models/Stateless/MapLogic.cs index af68af6..5161e53 100644 --- a/Map/Models/Stateless/MapLogic.cs +++ b/Map/Models/Stateless/MapLogic.cs @@ -1152,22 +1152,20 @@ internal abstract class MapLogic exifDirectory = null; else exifDirectory = Metadata.Models.Stateless.Methods.IMetadata.GetExifDirectory(mappedFile.FilePath); - RectangleF? rectangle = ILocation.GetPercentagesRectangle(configuration.LocationDigits, wholePercentages.Value); personDisplayDirectoryName = mappedFile.PersonDisplayDirectoryName is null ? configuration.MappingDefaultName : mappedFile.PersonDisplayDirectoryName; - LocationContainer locationContainer = new(dateOnly, - exifDirectory, - mappedFile.DirectoryNumber, - personDisplayDirectoryName, - null, - null, - mappedFile.FilePath, - fromDistanceContent, - id.Value, - null, - null, - mappedFile.PersonKey, - rectangle, - wholePercentages.Value); + LocationContainer locationContainer = new(CreationDateOnly: dateOnly, + ExifDirectory: exifDirectory, + DirectoryNumber: mappedFile.DirectoryNumber, + DisplayDirectoryName: personDisplayDirectoryName, + Encoding: null, + FaceFile: null, + FilePath: mappedFile.FilePath, + FromDistanceContent: fromDistanceContent, + Id: id.Value, + LengthPermyriad: null, + LengthSource: null, + PersonKey: mappedFile.PersonKey, + WholePercentages: wholePercentages.Value); lock (locationContainers) locationContainers.Add(locationContainer); } @@ -1192,12 +1190,18 @@ internal abstract class MapLogic if (item.WholePercentages == locationContainer.WholePercentages) continue; itemPercentagesRectangle = ILocation.GetPercentagesRectangle(configuration.LocationDigits, item.WholePercentages); - if (itemPercentagesRectangle is null || locationContainer.Rectangle is null) + if (itemPercentagesRectangle is null) percent = null; else { - itemPercentagesArea = itemPercentagesRectangle.Value.Width * itemPercentagesRectangle.Value.Height; - percent = ILocation.GetIntersectPercent(itemPercentagesRectangle.Value, itemPercentagesArea, locationContainer.Rectangle.Value); + RectangleF? rectangle = ILocation.GetPercentagesRectangle(configuration.LocationDigits, item.WholePercentages); + if (rectangle is null) + percent = null; + else + { + itemPercentagesArea = itemPercentagesRectangle.Value.Width * itemPercentagesRectangle.Value.Height; + percent = ILocation.GetIntersectPercent(itemPercentagesRectangle.Value, itemPercentagesArea, rectangle.Value); + } } delete.Add(item.FilePath); delete.Add(locationContainer.FilePath); diff --git a/Metadata-Query/appsettings.json b/Metadata-Query/appsettings.json index 086a176..2651c3e 100644 --- a/Metadata-Query/appsettings.json +++ b/Metadata-Query/appsettings.json @@ -68,12 +68,32 @@ "ResultSingleton": "{}", "RootDirectory": "D:/Images", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "ValidImageFormatExtensions": [ ".bmp", @@ -89,7 +109,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ] } } diff --git a/Mirror-Length/appsettings.json b/Mirror-Length/appsettings.json index 086a176..2651c3e 100644 --- a/Mirror-Length/appsettings.json +++ b/Mirror-Length/appsettings.json @@ -68,12 +68,32 @@ "ResultSingleton": "{}", "RootDirectory": "D:/Images", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "ValidImageFormatExtensions": [ ".bmp", @@ -89,7 +109,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ] } } diff --git a/Offset-Date-Time-Original/appsettings.json b/Offset-Date-Time-Original/appsettings.json index e733c41..a582db7 100644 --- a/Offset-Date-Time-Original/appsettings.json +++ b/Offset-Date-Time-Original/appsettings.json @@ -67,12 +67,32 @@ "ResultSingleton": "{}", "RootDirectory": "D:/Images", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "ValidImageFormatExtensions": [ ".bmp", @@ -88,7 +108,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ] } } diff --git a/PrepareForOld/appsettings.Development.json b/PrepareForOld/appsettings.Development.json index a709607..436bc23 100644 --- a/PrepareForOld/appsettings.Development.json +++ b/PrepareForOld/appsettings.Development.json @@ -60,12 +60,32 @@ "PropertiesChangedForProperty": false, "RootDirectory": "C:/Tmp/Phares/Pictures", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "PropertyContentCollectionFiles": [], "Spelling": [ @@ -108,7 +128,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ], "VerifyToSeason": [ ". 2000", diff --git a/Rename/.vscode/appsettings.example.json b/Rename/.vscode/appsettings.example.json index d3fe436..9d50c13 100644 --- a/Rename/.vscode/appsettings.example.json +++ b/Rename/.vscode/appsettings.example.json @@ -82,12 +82,32 @@ "xxxRootDirectory": "D:/1-Images-A/Images-dd514b88/Facebook/2023.3 Facebook", "RootDirectory": "D:/7-Question/California", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "ValidImageFormatExtensions": [ ".bmp", @@ -103,7 +123,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ] } }, diff --git a/Set-Created-Date/appsettings.json b/Set-Created-Date/appsettings.json index bafa145..a6fbde1 100644 --- a/Set-Created-Date/appsettings.json +++ b/Set-Created-Date/appsettings.json @@ -69,12 +69,32 @@ "ResultSingleton": "{}", "RootDirectory": "D:/Images", "IgnoreExtensions": [ + ".ffs_db", + ".FFS_DB", ".gif", ".GIF", + ".html", + ".HTML", + ".ico", + ".ICO", + ".json", + ".JSON", + ".lnk", + ".LNK", + ".lsv", + ".LSV", ".nef", ".NEF", ".pdf", - ".PDF" + ".PDF", + ".ts", + ".TS", + ".txt", + ".TXT", + ".webp", + ".WEBP", + ".xmp", + ".XMP" ], "ValidImageFormatExtensions": [ ".bmp", @@ -90,7 +110,9 @@ ".tiff", ".TIFF", ".tif", - ".TIF" + ".TIF", + ".webp", + ".WEBP" ] } } diff --git a/Shared/Models/Location.cs b/Shared/Models/Location.cs index bff202c..bfe6ac1 100644 --- a/Shared/Models/Location.cs +++ b/Shared/Models/Location.cs @@ -23,7 +23,7 @@ public class Location : Properties.ILocation, IEquatable _ = Stateless.Methods.Location.Check(bottom, left, right, top, zCount: 1, throwException: true); } - public Location(double confidence, int height, Location location, int locationDigits, int locationFactor, int width, int zCount) : + public Location(double confidence, int height, Location location, int width, int zCount) : this( location.Bottom, confidence, @@ -32,7 +32,7 @@ public class Location : Properties.ILocation, IEquatable location.Top) => Stateless.Methods.Location.Check(Bottom, height, Left, Right, Top, width, zCount, throwException: true); - public Location(int bottom, double confidence, int height, int left, int locationDigits, int locationFactor, int right, int top, int width, int zCount) : + public Location(int bottom, double confidence, int height, int left, int right, int top, int width, int zCount) : this( bottom, confidence, @@ -41,7 +41,7 @@ public class Location : Properties.ILocation, IEquatable top) => Stateless.Methods.Location.Check(Bottom, height, Left, Right, Top, width, zCount, throwException: true); - public Location(int height, Location location, int locationDigits, int locationFactor, int width, int zCount) : + public Location(int height, Location location, int width, int zCount) : this( location.Bottom, location.Confidence, @@ -50,7 +50,7 @@ public class Location : Properties.ILocation, IEquatable location.Top) => Stateless.Methods.Location.Check(Bottom, height, Left, Right, Top, width, zCount, throwException: true); - public Location(double confidence, int factor, int height, Location location, int locationDigits, int locationFactor, int width, int zCount) + public Location(double confidence, int factor, int height, Location location, int width, int zCount) { int x = (location.Right - location.Left) / factor; int y = (location.Bottom - location.Top) / factor; diff --git a/Shared/Models/LocationContainer.cs b/Shared/Models/LocationContainer.cs index 8918861..7dfef97 100644 --- a/Shared/Models/LocationContainer.cs +++ b/Shared/Models/LocationContainer.cs @@ -1,5 +1,3 @@ -using System.Drawing; - namespace View_by_Distance.Shared.Models; public record LocationContainer(DateOnly CreationDateOnly, @@ -14,47 +12,44 @@ public record LocationContainer(DateOnly CreationDateOnly, int? LengthPermyriad, FilePath? LengthSource, long? PersonKey, - RectangleF? Rectangle, int WholePercentages) { public static LocationContainer Get(LocationContainer locationContainer, object? encoding, bool keepExifDirectory) { LocationContainer result; - result = new(locationContainer.CreationDateOnly, - keepExifDirectory ? locationContainer.ExifDirectory : null, - locationContainer.DirectoryNumber, - locationContainer.DisplayDirectoryName, - encoding, - locationContainer.FaceFile, - locationContainer.FilePath, - locationContainer.FromDistanceContent, - locationContainer.Id, - locationContainer.LengthPermyriad, - locationContainer.LengthSource, - locationContainer.PersonKey, - locationContainer.Rectangle, - locationContainer.WholePercentages); + result = new(CreationDateOnly: locationContainer.CreationDateOnly, + ExifDirectory: keepExifDirectory ? locationContainer.ExifDirectory : null, + DirectoryNumber: locationContainer.DirectoryNumber, + DisplayDirectoryName: locationContainer.DisplayDirectoryName, + Encoding: encoding, + FaceFile: locationContainer.FaceFile, + FilePath: locationContainer.FilePath, + FromDistanceContent: locationContainer.FromDistanceContent, + Id: locationContainer.Id, + LengthPermyriad: locationContainer.LengthPermyriad, + LengthSource: locationContainer.LengthSource, + PersonKey: locationContainer.PersonKey, + WholePercentages: 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, - locationContainer.DirectoryNumber, - locationContainer.DisplayDirectoryName, - keepEncoding ? locationContainer.Encoding : null, - locationContainer.FaceFile, - locationContainer.FilePath, - locationContainer.FromDistanceContent, - locationContainer.Id, - lengthPermyriad, - source.FilePath, - locationContainer.PersonKey, - locationContainer.Rectangle, - locationContainer.WholePercentages); + result = new(CreationDateOnly: locationContainer.CreationDateOnly, + ExifDirectory: keepExifDirectory ? locationContainer.ExifDirectory : null, + DirectoryNumber: locationContainer.DirectoryNumber, + DisplayDirectoryName: locationContainer.DisplayDirectoryName, + Encoding: keepEncoding ? locationContainer.Encoding : null, + FaceFile: locationContainer.FaceFile, + FilePath: locationContainer.FilePath, + FromDistanceContent: locationContainer.FromDistanceContent, + Id: locationContainer.Id, + LengthPermyriad: lengthPermyriad, + LengthSource: source.FilePath, + PersonKey: locationContainer.PersonKey, + WholePercentages: locationContainer.WholePercentages); return result; } diff --git a/Shared/Models/Stateless/Methods/IDlibDotNet.cs b/Shared/Models/Stateless/Methods/IDlibDotNet.cs index a1fe46c..0b869b2 100644 --- a/Shared/Models/Stateless/Methods/IDlibDotNet.cs +++ b/Shared/Models/Stateless/Methods/IDlibDotNet.cs @@ -5,6 +5,7 @@ public interface IDlibDotNet void Tick(); long Ticks { get; } + int? CurrentTick { get; } (string, string) GetResultsFullGroupDirectories(); void ConstructProgressBar(int maxTicks, string message); (string, string, string, string) GetResultsFullGroupDirectories(string outputResolution); diff --git a/Shared/Models/Stateless/Methods/ILocation.cs b/Shared/Models/Stateless/Methods/ILocation.cs index 8c27447..14d562c 100644 --- a/Shared/Models/Stateless/Methods/ILocation.cs +++ b/Shared/Models/Stateless/Methods/ILocation.cs @@ -55,15 +55,15 @@ public interface ILocation static string GetLeftPadded(int locationDigits, int value) => GetLeftPadded(locationDigits, value.ToString()); - Models.Location? TestStatic_GetLocation(Models.Location? location, int locationDigits, int locationFactor, int height, int width, int zCount) => - GetLocation(location, locationDigits, locationFactor, height, width, zCount); - static Models.Location? GetLocation(Models.Location? location, int locationDigits, int locationFactor, int height, int width, int zCount) => - location is null ? null : new(location.Confidence, height, location, locationDigits, locationFactor, width, zCount); + Models.Location? TestStatic_GetLocation(Models.Location? location, int height, int width, int zCount) => + GetLocation(location, height, width, zCount); + static Models.Location? GetLocation(Models.Location? location, int height, int width, int zCount) => + location is null ? null : new(location.Confidence, height, location, width, zCount); - Models.Location? TestStatic_GetLocation(int factor, Models.Location? location, int locationDigits, int locationFactor, int height, int width, int zCount) => - GetLocation(factor, location, locationDigits, locationFactor, height, width, zCount); - static Models.Location? GetLocation(int factor, Models.Location? location, int locationDigits, int locationFactor, int height, int width, int zCount) => - location is null ? null : new(location.Confidence, factor, height, location, locationDigits, locationFactor, width, zCount); + Models.Location? TestStatic_GetLocation(int factor, Models.Location? location, int height, int width, int zCount) => + GetLocation(factor, location, height, width, zCount); + static Models.Location? GetLocation(int factor, Models.Location? location, int height, int width, int zCount) => + location is null ? null : new(location.Confidence, factor, height, location, width, zCount); (decimal?, decimal?, decimal?, decimal?) TestStatic_GetHeightLeftTopWidth(int bottom, int height, int left, int right, int top, int width) => GetHeightLeftTopWidth(bottom, height, left, right, top, width); @@ -107,8 +107,6 @@ public interface ILocation detectionConfidence, height, Math.Max(rectangle.Left, 0), - Stateless.ILocation.Digits, - Stateless.ILocation.Factor, Math.Min(rectangle.Right, width), Math.Max(rectangle.Top, 0), width, diff --git a/Shared/Models/Stateless/Methods/Id.cs b/Shared/Models/Stateless/Methods/Id.cs index 3c75879..5729bec 100644 --- a/Shared/Models/Stateless/Methods/Id.cs +++ b/Shared/Models/Stateless/Methods/Id.cs @@ -1,4 +1,5 @@ using System.Text; +using View_by_Distance.Shared.Models.Properties; namespace View_by_Distance.Shared.Models.Stateless.Methods; @@ -27,7 +28,20 @@ internal abstract class Id internal static byte GetHasIgnoreKeyword(FilePath filePath) => (byte)(filePath.Id > -1 ? 8 : 2); - internal static int GetId(Properties.IPropertyConfiguration propertyConfiguration, string intelligentId) + internal static byte GetHasDateTimeOriginal(IPropertyConfiguration propertyConfiguration, FilePath filePath) => + (byte)(IsIgnoreOrValidVideoFormatExtension(propertyConfiguration, filePath) ? filePath.Id > -1 ? 6 : 4 : filePath.Id > -1 ? 9 : 1); + + private static bool IsIgnoreOrValidVideoFormatExtension(IPropertyConfiguration propertyConfiguration, FilePath filePath) => + IsIgnoreOrValidVideoFormatExtension(propertyConfiguration, filePath.ExtensionLowered); + + private static bool IsIgnoreOrValidVideoFormatExtension(IPropertyConfiguration propertyConfiguration, string extensionLowered) => + propertyConfiguration.IgnoreExtensions.Contains(extensionLowered) + || propertyConfiguration.ValidVideoFormatExtensions.Contains(extensionLowered); + + internal static byte GetMissingDateTimeOriginal(IPropertyConfiguration propertyConfiguration, FilePath filePath) => + (byte)(IsIgnoreOrValidVideoFormatExtension(propertyConfiguration, filePath) ? filePath.Id > -1 ? 5 : 0 : filePath.Id > -1 ? 7 : 3); + + internal static int GetId(IPropertyConfiguration propertyConfiguration, string intelligentId) { int result; StringBuilder results = new(); @@ -44,13 +58,7 @@ internal abstract class Id return result; } - internal static byte GetHasDateTimeOriginal(Properties.IPropertyConfiguration propertyConfiguration, FilePath filePath) => - (byte)(propertyConfiguration.IgnoreExtensions.Contains(filePath.ExtensionLowered) || propertyConfiguration.ValidVideoFormatExtensions.Contains(filePath.ExtensionLowered) ? filePath.Id > -1 ? 6 : 4 : filePath.Id > -1 ? 9 : 1); - - internal static byte GetMissingDateTimeOriginal(Properties.IPropertyConfiguration propertyConfiguration, FilePath filePath) => - (byte)(propertyConfiguration.IgnoreExtensions.Contains(filePath.ExtensionLowered) || propertyConfiguration.ValidVideoFormatExtensions.Contains(filePath.ExtensionLowered) ? filePath.Id > -1 ? 5 : 0 : filePath.Id > -1 ? 7 : 3); - - internal static bool NameWithoutExtensionIsIdFormat(Properties.IPropertyConfiguration propertyConfiguration, string fileNameWithoutExtension) + internal static bool NameWithoutExtensionIsIdFormat(IPropertyConfiguration propertyConfiguration, string fileNameWithoutExtension) { bool result; if (fileNameWithoutExtension.Length < 5 || fileNameWithoutExtension.Length > propertyConfiguration.IntMinValueLength) @@ -63,7 +71,7 @@ internal abstract class Id return result; } - internal static string GetIntelligentId(Properties.IPropertyConfiguration propertyConfiguration, long id, string extensionLowered, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) + internal static string GetIntelligentId(IPropertyConfiguration propertyConfiguration, long id, string extensionLowered, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal) { string result; StringBuilder stringBuilder = new(); @@ -79,18 +87,18 @@ internal abstract class Id } else if (id > -1) { - if (!propertyConfiguration.ValidVideoFormatExtensions.Contains(extensionLowered)) - key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 8 : hasDateTimeOriginal.Value ? 9 : 7; - else + if (IsIgnoreOrValidVideoFormatExtension(propertyConfiguration, extensionLowered)) key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? throw new NotImplementedException() : hasDateTimeOriginal.Value ? 6 : 5; + else + key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 8 : hasDateTimeOriginal.Value ? 9 : 7; value = id.ToString().PadLeft(propertyConfiguration.IntMinValueLength, '0'); } else { - if (!propertyConfiguration.ValidVideoFormatExtensions.Contains(extensionLowered)) - key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 2 : hasDateTimeOriginal.Value ? 1 : 3; - else + if (IsIgnoreOrValidVideoFormatExtension(propertyConfiguration, extensionLowered)) key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? throw new NotImplementedException() : hasDateTimeOriginal.Value ? 4 : 0; + else + key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 2 : hasDateTimeOriginal.Value ? 1 : 3; value = id.ToString()[1..].PadLeft(propertyConfiguration.IntMinValueLength, '0'); } for (int i = value.Length - propertyConfiguration.ResultAllInOneSubdirectoryLength - 1; i > -1; i--) @@ -101,7 +109,7 @@ internal abstract class Id return result; } - internal static string GetPaddedId(Properties.IPropertyConfiguration propertyConfiguration, int id, string extensionLowered, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) + internal static string GetPaddedId(IPropertyConfiguration propertyConfiguration, int id, string extensionLowered, bool? hasIgnoreKeyword, bool? hasDateTimeOriginal, int? index) { string result; if (propertyConfiguration.Offset < 0) diff --git a/Shared/Models/Stateless/Methods/Location.cs b/Shared/Models/Stateless/Methods/Location.cs index 2ee5801..b52f0d2 100644 --- a/Shared/Models/Stateless/Methods/Location.cs +++ b/Shared/Models/Stateless/Methods/Location.cs @@ -136,7 +136,10 @@ internal abstract class Location 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)) + 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 { diff --git a/Shared/Models/Stateless/Methods/XDirectory.cs b/Shared/Models/Stateless/Methods/XDirectory.cs index 580ac0f..92519e5 100644 --- a/Shared/Models/Stateless/Methods/XDirectory.cs +++ b/Shared/Models/Stateless/Methods/XDirectory.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using System.Diagnostics; namespace View_by_Distance.Shared.Models.Stateless.Methods; @@ -384,7 +385,12 @@ internal abstract partial class XDirectory else { if (filePath.Id is null) - throw new NullReferenceException(nameof(filePath.Id)); + { + if (Debugger.IsAttached) + continue; + else + throw new NullReferenceException(nameof(filePath.Id)); + } intelligentId = IId.GetIntelligentId(propertyConfiguration, filePath.Id.Value, filePath.ExtensionLowered, filePath.HasIgnoreKeyword, filePath.HasDateTimeOriginal); if (!isOffsetDeterministicHashCode) checkFile = Path.Combine(directory, $"{intelligentId}{filePath.ExtensionLowered}"); diff --git a/Tests/UnitTestCalculations.cs b/Tests/UnitTestCalculations.cs index 53d0212..9735f47 100644 --- a/Tests/UnitTestCalculations.cs +++ b/Tests/UnitTestCalculations.cs @@ -162,8 +162,8 @@ public partial class UnitTestCalculations width = 100; height = 100; Location location = new(bottom, confidence, left, right, top); - _ = new Location(confidence, height, location, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, width, 1); - _ = new Location(bottom, confidence, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); + _ = new Location(confidence, height, location, width, 1); + _ = new Location(bottom, confidence, height, left, right, top, width, 1); NonThrowTryCatch(); } @@ -188,7 +188,7 @@ public partial class UnitTestCalculations bottom = 50; width = 100; height = 100; - location = new(bottom, confidence, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); + location = new(bottom, confidence, height, left, right, top, width, 1); areaPermyriad = IMapping.GetAreaPermyriad(faceAreaPermyriad, height, location, width); Assert.IsTrue(areaPermyriad == 2500); left = 0; @@ -197,7 +197,7 @@ public partial class UnitTestCalculations bottom = 25; width = 100; height = 100; - location = new(bottom, confidence, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); + location = new(bottom, confidence, height, left, right, top, width, 1); OutputResolution outputResolution = new(height, 0, width); areaPermyriad = IMapping.GetAreaPermyriad(faceAreaPermyriad, location, outputResolution); Assert.IsTrue(areaPermyriad == 625);