From a4a92aacd2c9ec898fc25536e3536d9977d786bc Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Fri, 20 Oct 2023 19:37:19 -0700 Subject: [PATCH] Rename editorconfig --- .editorconfig | 10 +- .vscode/settings.json | 3 + BlurHash.Core/Base83.cs | 2 +- BlurHash/Models/BlurHasher.cs | 4 +- Copy-Distinct/CopyDistinct.cs | 18 +-- Copy-Distinct/Program.cs | 2 +- Date-Group/DateGroup.cs | 40 +++---- Date-Group/Program.cs | 2 +- Delete-By-Distinct/DeleteByDistinct.cs | 22 ++-- Delete-By-Distinct/Program.cs | 2 +- Delete-By-Relative/DeleteByRelative.cs | 4 +- Delete-By-Relative/Program.cs | 2 +- Distance/Models/DistanceLimits.cs | 6 +- Distance/Models/_E_Distance.cs | 44 ++++---- Drag-Drop-Explorer/DragDropExplorer.cs | 8 +- Drag-Drop-Search/DragDropSearch.cs | 8 +- .../Models/Binder/Configuration.cs | 10 +- Drag-Drop-Search/Program.cs | 8 +- .../DragDropSetPropertyItem.cs | 12 +- Duplicate-Search/DuplicateSearch.cs | 20 ++-- Duplicate-Search/Program.cs | 2 +- Face/Models/_D_Face.cs | 20 ++-- FaceParts/Models/_D2_FaceParts.cs | 34 +++--- .../Dlib/Python/CnnFaceDetectionModelV1.cs | 8 +- .../Dlib/Python/FaceRecognitionModelV1.cs | 14 +-- .../Dlib/Python/SimpleObjectDetector.cs | 6 +- FaceRecognitionDotNet/FaceRecognition.cs | 30 +++-- Instance/DlibDotNet.cs | 43 ++++---- Instance/Models/Binder/Configuration.cs | 46 ++++---- Instance/Models/Binder/Place.cs | 2 +- Instance/Models/_F_Random.cs | 8 +- Instance/Program.cs | 2 +- Map/Models/MapLogic.cs | 74 ++++++------- Map/Models/Stateless/DistanceLogic.cs | 8 +- Map/Models/Stateless/LookForAbandonedLogic.cs | 2 +- Map/Models/Stateless/MapLogic.cs | 104 +++++++++--------- Map/Models/Stateless/RelationLogic.cs | 40 +++---- Metadata-Query/MetadataQuery.cs | 10 +- Metadata-Query/Program.cs | 2 +- Metadata/Models/A_Metadata.cs | 91 +++++++++++++++ Metadata/Models/B_Metadata.cs | 10 +- Metadata/Models/Stateless/Methods/Metadata.cs | 14 +-- Mirror-Length/MirrorLength.cs | 26 ++--- Mirror-Length/Program.cs | 2 +- Move-By-Id/MoveById.cs | 14 +-- Move-By-Id/Program.cs | 2 +- .../OffsetDateTimeOriginal.cs | 16 +-- Offset-Date-Time-Original/Program.cs | 2 +- PhotoPrism/Models/_F_PhotoPrism.cs | 22 ++-- PrepareForOld/Program.cs | 2 +- Property/Models/A_Property.cs | 26 ++--- Property/Models/Binder/Configuration.cs | 4 +- Property/Models/Stateless/Property.cs | 59 +++++----- Property/Models/Stateless/Result.cs | 2 +- Rename/Models/Binder/Configuration.cs | 26 ++--- Rename/Models/Configuration.cs | 6 +- Rename/Program.cs | 2 +- Rename/Rename.cs | 67 +++++++---- Resize/Models/_C_Resize.cs | 36 +++--- Set-Created-Date/Program.cs | 2 +- Set-Created-Date/SetCreatedDate.cs | 12 +- Shared/.vscode/mklink.md | 15 +++ Shared/Models/Stateless/Methods/XDirectory.cs | 2 +- Tests/Models/Binder/Configuration.cs | 46 ++++---- Tests/UnitTestHardCoded.cs | 4 +- Tests/UnitTestResize.cs | 8 +- .../Models/Binder/Configuration.cs | 46 ++++---- .../UnitTestFace.cs | 10 +- 68 files changed, 703 insertions(+), 553 deletions(-) create mode 100644 Metadata/Models/A_Metadata.cs create mode 100644 Shared/.vscode/mklink.md diff --git a/.editorconfig b/.editorconfig index cf34b68..3dfc1d0 100644 --- a/.editorconfig +++ b/.editorconfig @@ -88,14 +88,22 @@ dotnet_code_quality.CAXXXX.api_surface = private, internal dotnet_diagnostic.CA1825.severity = warning # CA1823: Avoid zero-length array allocations dotnet_diagnostic.CA1829.severity = warning # CA1829: Use Length/Count property instead of Count() when available dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable +dotnet_diagnostic.CA1860.severity = error # CA1860: Prefer comparing 'Count' to 0 rather than using 'Any()', both for clarity and for performance +dotnet_diagnostic.CA1869.severity = none # CA1869: Avoid creating a new 'JsonSerializerOptions' instance for every serialization operation. Cache and reuse instances instead. +dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template should not vary between calls to 'LoggerExtensions.LogInformation(ILogger, string?, params object?[])' dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name -dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant. dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2"); +dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant. dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary +dotnet_diagnostic.IDE0028.severity = error # IDE0028: Collection initialization can be simplified dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031) dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed dotnet_diagnostic.IDE0049.severity = warning # Use language keywords instead of framework type names for type references (IDE0049) dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter +dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [Distance]csharp(IDE0290) +dotnet_diagnostic.IDE0300.severity = error # IDE0300: Collection initialization can be simplified +dotnet_diagnostic.IDE0301.severity = error #IDE0301: Collection initialization can be simplified +dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method diff --git a/.vscode/settings.json b/.vscode/settings.json index 4656990..aad7716 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -14,9 +14,12 @@ "Dlib", "DSCN", "Exif", + "eyeα", "Getα", "Greyscale", "Hasher", + "Hmmss", + "Hmmssfff", "jfif", "JOSN", "mmod", diff --git a/BlurHash.Core/Base83.cs b/BlurHash.Core/Base83.cs index df8b728..502c8e0 100644 --- a/BlurHash.Core/Base83.cs +++ b/BlurHash.Core/Base83.cs @@ -12,7 +12,7 @@ internal static class Base83 static Base83() { // Build inverse lookup table for fast decoding - Dictionary charIndices = new(); + Dictionary charIndices = []; int index = 0; foreach (char c in _Charset) { diff --git a/BlurHash/Models/BlurHasher.cs b/BlurHash/Models/BlurHasher.cs index 6f44f16..4eb8b05 100644 --- a/BlurHash/Models/BlurHasher.cs +++ b/BlurHash/Models/BlurHasher.cs @@ -14,14 +14,14 @@ public class C2_BlurHasher : IBlurHasher public C2_BlurHasher(IPropertyConfiguration propertyConfiguration) { - _FileGroups = new(); + _FileGroups = []; _PropertyConfiguration = propertyConfiguration; } public void Update(string resultsFullGroupDirectory) { _FileGroups.Clear(); - Dictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, resultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultContent, _PropertyConfiguration.ResultSingleton }); + Dictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, resultsFullGroupDirectory, [_PropertyConfiguration.ResultContent, _PropertyConfiguration.ResultSingleton]); foreach (KeyValuePair keyValuePair in keyValuePairs) _FileGroups.Add(keyValuePair.Key, keyValuePair.Value); } diff --git a/Copy-Distinct/CopyDistinct.cs b/Copy-Distinct/CopyDistinct.cs index 95b5f3d..b50670b 100644 --- a/Copy-Distinct/CopyDistinct.cs +++ b/Copy-Distinct/CopyDistinct.cs @@ -35,9 +35,9 @@ public class CopyDistinct _Configuration = configuration; logger?.LogInformation(propertyConfiguration.RootDirectory); (bool move, List filesCollection, bool anyLenFiles, bool moveBack) = Verify(); - _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, appSettings.CopyTo, new string[] { appSettings.ResultDirectoryKey }); + _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, appSettings.CopyTo, [appSettings.ResultDirectoryKey]); List lines = CopyDistinctFilesInDirectories(logger, move, filesCollection, anyLenFiles, moveBack); - if (lines.Any()) + if (lines.Count != 0) File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory); } @@ -77,7 +77,7 @@ public class CopyDistinct moveBack = false; else { - if (!Directory.GetFiles(directory, "*", SearchOption.AllDirectories).Any()) + if (Directory.GetFiles(directory, "*", SearchOption.AllDirectories).Length == 0) moveBack = false; else { @@ -93,16 +93,16 @@ public class CopyDistinct private static (string[], List<(FileHolder, string?, string)>) GetMoveBackToDoCollection(List filesCollection) { - List<(FileHolder, string?, string)> results = new(); + List<(FileHolder, string?, string)> results = []; string key; string? value; string fileName; string? directory; string destinationFile; - List distinctFound = new(); - List distinctNeeded = new(); - List distinctDirectories = new(); - Dictionary nameToPath = new(); + List distinctFound = []; + List distinctNeeded = []; + List distinctDirectories = []; + Dictionary nameToPath = []; for (int i = 1; i < 3; i++) { foreach (string[] files in filesCollection) @@ -155,7 +155,7 @@ public class CopyDistinct private List CopyDistinctFilesInDirectories(ILogger? logger, bool move, List filesCollection, bool anyLenFiles, bool moveBack) { - List results = new(); + List results = []; ProgressBar progressBar; string[] distinctDirectories; ConsoleKey? consoleKey = null; diff --git a/Copy-Distinct/Program.cs b/Copy-Distinct/Program.cs index dd76229..887a825 100644 --- a/Copy-Distinct/Program.cs +++ b/Copy-Distinct/Program.cs @@ -60,7 +60,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Date-Group/DateGroup.cs b/Date-Group/DateGroup.cs index 35bd3b0..7fccccf 100644 --- a/Date-Group/DateGroup.cs +++ b/Date-Group/DateGroup.cs @@ -33,9 +33,9 @@ public class DateGroup _Logger = logger; _AppSettings = appSettings; _IsEnvironment = isEnvironment; - _Exceptions = new List(); - _FileKeyValuePairs = new List>(); - _FilePropertiesKeyValuePairs = new Dictionary>>(); + _Exceptions = []; + _FileKeyValuePairs = []; + _FilePropertiesKeyValuePairs = []; Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); Models.Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); _Logger?.LogInformation(propertyConfiguration.RootDirectory); @@ -59,12 +59,12 @@ public class DateGroup _ = Directory.CreateDirectory(aPropertySingletonDirectory); (int t, Container[] containers) = Shared.Models.Stateless.Methods.IContainer.GetContainers(propertyConfiguration, aPropertySingletonDirectory); A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory, aResultsFullGroupDirectory); - if (propertyLogic.ExceptionsDirectories.Any()) + if (propertyLogic.ExceptionsDirectories.Count != 0) throw new Exception(); if (propertyConfiguration.PopulatePropertyId && (configuration.ByCreateDateShortcut || configuration.ByHash) && Shared.Models.Stateless.Methods.IProperty.Any(containers)) { propertyLogic.SavePropertyParallelWork(ticks, metadata, t, containers); - if (propertyLogic.ExceptionsDirectories.Any()) + if (propertyLogic.ExceptionsDirectories.Count != 0) throw new Exception(); } if (configuration.ByCreateDateShortcut) @@ -130,7 +130,7 @@ public class DateGroup private List<(Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)> GetMoveFileCollection(string destinationDirectory, string topDirectory, Item[] filteredItems) { - List<(Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)> results = new(); + List<(Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)> results = []; char flag; string day; int season; @@ -150,8 +150,8 @@ public class DateGroup string[]? matches = null; string[] directorySegments; List destinationCollection; - List directoryNames = new(); - List topDirectorySegments = new(); + List directoryNames = []; + List topDirectorySegments = []; StringBuilder destinationDirectoryName = new(); Calendar calendar = new CultureInfo("en-US").Calendar; for (int z = 1; z < 3; z++) @@ -179,16 +179,16 @@ public class DateGroup directorySegments = directoryName.Split(' '); topDirectorySegments.AddRange(directorySegments); (_, matches) = Shared.Models.Stateless.Methods.IProperty.IsWrongYear(directorySegments, string.Empty); - if (matches.Any()) + if (matches.Length != 0) break; } - if (matches is not null && matches.Any()) + if (matches is not null && matches.Length != 0) break; } foreach (Item item in filteredItems) { directoryNames.Clear(); - destinationCollection = new(); + destinationCollection = []; _ = destinationDirectoryName.Clear(); if (item.Property is not null) dateTimes = item.Property.GetDateTimes(); @@ -196,7 +196,7 @@ public class DateGroup { if (item.ImageFileHolder.LastWriteTime is null) throw new Exception(); - dateTimes = new() { item.ImageFileHolder.LastWriteTime.Value }; + dateTimes = [item.ImageFileHolder.LastWriteTime.Value]; } if (item.Property is not null && item.Property.DateTimeOriginal is not null) dateTime = item.Property.DateTimeOriginal.Value; @@ -310,7 +310,7 @@ public class DateGroup private static Item[] GetFilterItems(Container container) { - List results = new(); + List results = []; foreach (Item item in container.Items) { if (item.ImageFileHolder is not null) @@ -326,11 +326,11 @@ public class DateGroup string? topDirectory; string? checkDirectory; string destinationDirectory; - List<(Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)> fileMoveCollection = new(); + List<(Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)> fileMoveCollection = []; List<(Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)> fileMoveCollectionDirectory; foreach (Container container in containers) { - if (!container.Items.Any()) + if (container.Items.Count == 0) continue; if (!_Configuration.KeepFullPath) destinationDirectory = destinationRoot; @@ -349,7 +349,7 @@ public class DateGroup continue; topDirectory = checkDirectory; filteredItems = GetFilterItems(container); - if (!filteredItems.Any()) + if (filteredItems.Length == 0) continue; fileMoveCollectionDirectory = GetMoveFileCollection(destinationDirectory, topDirectory, filteredItems); fileMoveCollection.AddRange(fileMoveCollectionDirectory); @@ -366,9 +366,9 @@ public class DateGroup string directoryName; WindowsShortcut windowsShortcut; string duplicate = "-Duplicates"; - List filesDistinct = new(); - List filesDuplicate = new(); - List directoriesDistinct = new(); + List filesDistinct = []; + List filesDuplicate = []; + List directoriesDistinct = []; (Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)[] fileMoveCollectionAll = GetFileMoveCollectionAll(configuration, destinationRoot, containers); foreach ((Item item, long lastWriteTimeTicks, long minimumDateTimeTicks, string[] destination) in fileMoveCollectionAll) { @@ -476,7 +476,7 @@ public class DateGroup string aPropertyContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(configuration, nameof(A_Property), "()"); foreach (Container container in containers) { - if (!container.Items.Any()) + if (container.Items.Count == 0) continue; selectedTotal = 0; threeStandardDeviationHigh = Shared.Models.Stateless.Methods.IProperty.GetThreeStandardDeviationHigh(minimum, container); diff --git a/Date-Group/Program.cs b/Date-Group/Program.cs index 27edf19..4be30f2 100644 --- a/Date-Group/Program.cs +++ b/Date-Group/Program.cs @@ -98,7 +98,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Delete-By-Distinct/DeleteByDistinct.cs b/Delete-By-Distinct/DeleteByDistinct.cs index 5781637..6defeb6 100644 --- a/Delete-By-Distinct/DeleteByDistinct.cs +++ b/Delete-By-Distinct/DeleteByDistinct.cs @@ -18,7 +18,7 @@ public class DeleteByDistinct if (console is null) { } long ticks = DateTime.Now.Ticks; - Dictionary> keyValuePairs = new(); + Dictionary> keyValuePairs = []; Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; logger?.LogInformation(configuration.RootDirectory); @@ -42,11 +42,11 @@ public class DeleteByDistinct List? fileNames; ProgressBar progressBar; ConsoleKey? consoleKey = null; - List deletedFiles = new(); + List deletedFiles = []; int pad = ticks.ToString().Length + 1; - List deletedDirectories = new(); - Dictionary> longToCollectionB = new(); - List<(string Source, string Destination)> renameFiles = new(); + List deletedDirectories = []; + Dictionary> longToCollectionB = []; + List<(string Source, string Destination)> renameFiles = []; logger?.LogInformation($"Gathering {appSettings.SearchPattern} files from <{directory}>"); (string directory, string[] files)[] leftCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(directory, appSettings.SearchPattern).ToArray(); totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); @@ -86,12 +86,12 @@ public class DeleteByDistinct throw new Exception(); if (!keyValuePairs.TryGetValue(check, out fileNames)) { - keyValuePairs.Add(check, new()); + keyValuePairs.Add(check, []); if (!keyValuePairs.TryGetValue(check, out fileNames)) throw new Exception(); } checkName = fileInfo.Name.ToLower().Replace(".jpeg", ".jpg"); - if (!fileNames.Any()) + if (fileNames.Count == 0) fileNames.Add(checkName); else if (!logOnly && appSettings.RenameToMatch && fileNames.Count == 1 && fileInfo.DirectoryName is not null && fileInfo.Name != fileNames.First()) renameFiles.Add((fileInfo.FullName, Path.Combine(fileInfo.DirectoryName, fileNames.First()))); @@ -108,7 +108,7 @@ public class DeleteByDistinct logFile = $"{ticks}-{variable}-Files-A.lsv"; if (!logOnly) File.WriteAllLines(Path.Combine(directory, logFile), deletedFiles); - if (deletedFiles.Any() && !logOnly) + if (deletedFiles.Count != 0 && !logOnly) { logger?.LogInformation($"Ready to delete {deletedFiles.Count} from {variable} {appSettings.SearchPattern} file(s)? See <{logFile}>"); for (int y = 0; y < int.MaxValue; y++) @@ -142,9 +142,9 @@ public class DeleteByDistinct for (int i = 1; i < 5; i++) { progressBar.Tick(); - List collection = new(); + List collection = []; Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(directory, collection); - if (!collection.Any()) + if (collection.Count == 0) break; deletedDirectories.AddRange(collection); } @@ -154,7 +154,7 @@ public class DeleteByDistinct File.WriteAllLines(Path.Combine(directory, logFile), deletedDirectories.Distinct()); } } - if (!logOnly && renameFiles.Any()) + if (!logOnly && renameFiles.Count != 0) { logFile = $"{ticks}-{variable}-Files-B.lsv"; File.WriteAllLines(Path.Combine(directory, logFile), renameFiles.Select(l => l.Source)); diff --git a/Delete-By-Distinct/Program.cs b/Delete-By-Distinct/Program.cs index 2606154..3ca8faa 100644 --- a/Delete-By-Distinct/Program.cs +++ b/Delete-By-Distinct/Program.cs @@ -60,7 +60,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Delete-By-Relative/DeleteByRelative.cs b/Delete-By-Relative/DeleteByRelative.cs index d0d1e32..bcc1399 100644 --- a/Delete-By-Relative/DeleteByRelative.cs +++ b/Delete-By-Relative/DeleteByRelative.cs @@ -26,7 +26,7 @@ public class DeleteByRelative if (string.IsNullOrEmpty(appSettings.CompareRootDirectory) || Path.GetFullPath(appSettings.CompareRootDirectory) == Path.GetFullPath(configuration.RootDirectory)) throw new Exception("Check AppSettings file!"); IEnumerable<(string directory, string[] files)> leftCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(configuration.RootDirectory, searchPattern); - List leftRelativeFiles = new(); + List leftRelativeFiles = []; foreach ((_, string[] files) in leftCollection) { foreach (string file in files) @@ -35,7 +35,7 @@ public class DeleteByRelative leftRelativeFiles.Add(Path.GetFullPath(string.Concat(appSettings.CompareRootDirectory, relativePath))); } } - List deleteFiles = new(); + List deleteFiles = []; IEnumerable<(string, string[])> rightCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(appSettings.CompareRootDirectory, searchPattern); foreach ((_, string[] files) in rightCollection) { diff --git a/Delete-By-Relative/Program.cs b/Delete-By-Relative/Program.cs index de85a29..7c5d12f 100644 --- a/Delete-By-Relative/Program.cs +++ b/Delete-By-Relative/Program.cs @@ -60,7 +60,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Distance/Models/DistanceLimits.cs b/Distance/Models/DistanceLimits.cs index 15ed434..1632175 100644 --- a/Distance/Models/DistanceLimits.cs +++ b/Distance/Models/DistanceLimits.cs @@ -46,11 +46,11 @@ public class DistanceLimits : IDistanceLimits string IDistanceLimits.GetCounts() { string result; - List<(int Value, string Name)> results = new() - { + List<(int Value, string Name)> results = + [ new(_Days, nameof(_Days)), new(_Distance, nameof(_Distance)) - }; + ]; result = string.Join(' ', from l in results orderby l.Value descending select $"{l.Name}_{l.Value};"); return result; } diff --git a/Distance/Models/_E_Distance.cs b/Distance/Models/_E_Distance.cs index aa59aed..d83390c 100644 --- a/Distance/Models/_E_Distance.cs +++ b/Distance/Models/_E_Distance.cs @@ -27,12 +27,12 @@ public partial class E_Distance : IDistance public E_Distance(bool distanceMoveUnableToMatch, bool distanceRenameToMatch, int faceConfidencePercent, float[] rangeDistanceTolerance, float[] rectangleIntersectMinimums) { - _Debug = new(); - _Moved = new(); - _Renamed = new(); - _AllMappedFaceFiles = new(); - _AllMappedFaceFileNames = new(); - _DuplicateMappedFaceFiles = new(); + _Debug = []; + _Moved = []; + _Renamed = []; + _AllMappedFaceFiles = []; + _AllMappedFaceFileNames = []; + _DuplicateMappedFaceFiles = []; _DistanceRenameToMatch = distanceRenameToMatch; _FaceConfidencePercent = faceConfidencePercent; _DistanceMoveUnableToMatch = distanceMoveUnableToMatch; @@ -54,7 +54,7 @@ public partial class E_Distance : IDistance int confidencePercent; FaceDistance faceDistance; FaceDistanceContainer faceDistanceContainer; - List collection = new(); + List collection = []; foreach (Face face in intersectFaces) { if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null) @@ -81,7 +81,7 @@ public partial class E_Distance : IDistance private static ReadOnlyCollection GetFaceDistanceEncodings(FaceDistanceContainer[] faceDistanceContainers) { - List faceDistanceEncodings = new(); + List faceDistanceEncodings = []; foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers) { if (faceDistanceContainer.FaceDistance.Encoding is null) @@ -93,7 +93,7 @@ public partial class E_Distance : IDistance private List<(Face Face, double? Length)> GetValues(MappingFromItem mappingFromItem, List intersectFaces, Shared.Models.FaceEncoding modelsFaceEncoding) { - List<(Face Face, double? Length)> results = new(); + List<(Face Face, double? Length)> results = []; Face face; FaceDistance faceDistanceLength; FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding = FaceRecognition.LoadFaceEncoding(modelsFaceEncoding.RawEncoding); @@ -134,7 +134,7 @@ public partial class E_Distance : IDistance private static List<(Face, double?)> GetMatchingFacesByFaceEncoding(Face[] filteredFaces, string? json) { - List<(Face, double?)> results = new(); + List<(Face, double?)> results = []; string check; foreach (Face face in filteredFaces) { @@ -178,7 +178,7 @@ public partial class E_Distance : IDistance { string checkFile; FileInfo fileInfo = new(file); - List<(long Length, string FullName)> collection = new(); + List<(long Length, string FullName)> collection = []; if (fileInfo.Exists) collection.Add(new(fileInfo.Length, fileInfo.FullName)); lock (_DuplicateMappedFaceFiles) @@ -208,7 +208,7 @@ public partial class E_Distance : IDistance string[] matches; FileInfo? fileInfo; List intersectFaces; - List<(Face, double?)> checkFaces = new(); + List<(Face, double?)> checkFaces = []; Shared.Models.FaceEncoding? modelsFaceEncoding; Face[] filteredFaces = (from l in faces where l.FaceEncoding is not null && l.Location is not null && l.OutputResolution is not null select l).ToArray(); if (filteredFaces.Length != faces.Count) @@ -326,7 +326,7 @@ public partial class E_Distance : IDistance public static void PreFilterSetFaceDistances(int maxDegreeOfParallelism, long ticks, ReadOnlyCollection distinctFilteredFaces) { - List faces = new(); + List faces = []; foreach (Face face in distinctFilteredFaces) { if (face.Mapping?.MappingFromFilterPre is null) @@ -362,7 +362,7 @@ public partial class E_Distance : IDistance private static List GetSortingContainers(Map.Models.Configuration mapConfiguration, IDistanceLimits distanceLimits, Face face, FaceDistance faceDistanceEncoding, List sortingCollection) { - List results = new(); + List results = []; SortingContainer sortingContainer; int days = 0, distance = 0; Sorting[] collection = Shared.Models.Stateless.Methods.ISorting.Sort(sortingCollection); @@ -404,7 +404,7 @@ public partial class E_Distance : IDistance ReadOnlyCollection results; FaceDistance faceDistance; FaceDistanceContainer faceDistanceContainer; - List collection = new(); + List collection = []; foreach (Face face in distinctFilteredFaces) { if (face.Mapping?.MappingFromLocation is null) @@ -421,7 +421,7 @@ public partial class E_Distance : IDistance public static FaceDistanceContainer[] FilteredPostLoadFaceDistanceContainers(Map.Models.MapLogic mapLogic, ReadOnlyCollection faceDistanceContainers, long? skipOlderThan, DistanceLimits distanceLimits) { - List results = new(); + List results = []; foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers) { if (faceDistanceContainer.FaceDistance is null || faceDistanceContainer.Face.Mapping?.MappingFromLocation is null) @@ -449,7 +449,7 @@ public partial class E_Distance : IDistance public static ReadOnlyCollection SetFaceMappingSortingCollectionThenGetSortedSortingContainers(int maxDegreeOfParallelism, Map.Models.Configuration mapConfiguration, long ticks, Map.Models.MapLogic mapLogic, IDistanceLimits distanceLimits, ReadOnlyCollection faceDistanceEncodings, FaceDistanceContainer[] filteredFaceDistanceContainers) { - List results = new(); + List results = []; int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism }; string message = $") {filteredFaceDistanceContainers.Length:000} Get Sorting Containers Then Set Face Mapping Sorting Collection - {totalSeconds} total second(s)"; @@ -479,16 +479,16 @@ public partial class E_Distance : IDistance private static ReadOnlyCollection GetRelationCollections(int faceDistancePermyriad, int locationContainerDistanceTake, float distanceTolerance, List records) { - List results = new(); + List results = []; string fileName; FileHolder fileHolder; int distancePermyriad; - List files = new(); + List files = []; long ticks = DateTime.Now.Ticks; FaceDistance? faceDistanceEncoding; List mappedRelations; List faceDistanceLengths; - List faceDistanceEncodings = new(); + List faceDistanceEncodings = []; foreach (Record record in records) { files.Add(record.File); @@ -496,7 +496,7 @@ public partial class E_Distance : IDistance } foreach (Record record in records) { - mappedRelations = new(); + mappedRelations = []; fileHolder = new(record.File); if (files.Count > 1) { @@ -526,7 +526,7 @@ public partial class E_Distance : IDistance { ReadOnlyCollection result; string? json; - List records = new(); + List records = []; Shared.Models.FaceEncoding? modelsFaceEncoding; FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding; foreach (LocationContainer locationContainer in locationContainers) diff --git a/Drag-Drop-Explorer/DragDropExplorer.cs b/Drag-Drop-Explorer/DragDropExplorer.cs index a70765b..7fcb7f2 100644 --- a/Drag-Drop-Explorer/DragDropExplorer.cs +++ b/Drag-Drop-Explorer/DragDropExplorer.cs @@ -126,9 +126,9 @@ public partial class DragDropExplorer : Form { string converted; FileInfo fileInfo; - List files = new(); + List files = []; DateTime dateTime = DateTime.Now; - List directories = new(); + List directories = []; _FirstTextBox.Text = GetConverted(paths[0]); string weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); string directory = Path.Combine(_WorkingDirectory, $"{dateTime.Year}_{weekOfYear}"); @@ -144,9 +144,7 @@ public partial class DragDropExplorer : Form else files.Add(new(fileInfo.Name, "File", fileInfo.LastWriteTime, fileInfo.Length, converted)); } - List collection = new(); - collection.AddRange(directories); - collection.AddRange(files); + List collection = [.. directories, .. files]; _JsonTextBox.Text = JsonSerializer.Serialize(collection, new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(_PathTextBox.Text, _JsonTextBox.Text); } diff --git a/Drag-Drop-Search/DragDropSearch.cs b/Drag-Drop-Search/DragDropSearch.cs index f1a61cf..c74017e 100644 --- a/Drag-Drop-Search/DragDropSearch.cs +++ b/Drag-Drop-Search/DragDropSearch.cs @@ -27,7 +27,7 @@ public partial class DragDropSearch : Form public DragDropSearch() { InitializeComponent(); - _IdToItem = new(); + _IdToItem = []; AppSettings appSettings; string workingDirectory; IsEnvironment isEnvironment; @@ -124,7 +124,7 @@ public partial class DragDropSearch : Form public static string? GetFaceEncoding(string file) { string? result; - List results = new(); + List results = []; const string comment = "Comment: "; if (File.Exists(file)) { @@ -143,7 +143,7 @@ public partial class DragDropSearch : Form } } } - result = results.Any() ? results[0][comment.Length..] : null; + result = results.Count != 0 ? results[0][comment.Length..] : null; return result; } @@ -156,7 +156,7 @@ public partial class DragDropSearch : Form name = Path.GetFileNameWithoutExtension(path); Text = name; segments = name.Split('.'); - if (!_IdToItem.Any()) + if (_IdToItem.Count == 0) LoadData(); if (int.TryParse(segments[0], out int id) && _IdToItem.TryGetValue(id, out Item? item)) { diff --git a/Drag-Drop-Search/Models/Binder/Configuration.cs b/Drag-Drop-Search/Models/Binder/Configuration.cs index cd3ee94..2a33d67 100644 --- a/Drag-Drop-Search/Models/Binder/Configuration.cs +++ b/Drag-Drop-Search/Models/Binder/Configuration.cs @@ -69,8 +69,8 @@ public class Configuration if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime)); if (configuration.ForceResizeLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceResizeLastWriteTimeToCreationTime)); if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); - configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ??= Array.Empty(); - configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ??= Array.Empty(); + configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ??= []; + configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ??= []; if (configuration.MixedYearRelativePaths is null) throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths)); if (configuration.NumberOfJitters is null) throw new NullReferenceException(nameof(configuration.NumberOfJitters)); if (configuration.NumberOfTimesToUpsample is null) throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample)); @@ -86,11 +86,11 @@ public class Configuration if (configuration.PropertiesChangedForMetadata is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata)); if (configuration.PropertiesChangedForResize is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize)); if (configuration.Reverse is null) throw new NullReferenceException(nameof(configuration.Reverse)); - configuration.SaveFaceLandmarkForOutputResolutions ??= Array.Empty(); + configuration.SaveFaceLandmarkForOutputResolutions ??= []; if (configuration.SaveFullYearOfRandomFiles is null) throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles)); - configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ??= Array.Empty(); + configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ??= []; if (configuration.SaveResizedSubfiles is null) throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles)); - configuration.SaveShortcutsForOutputResolutions ??= Array.Empty(); + configuration.SaveShortcutsForOutputResolutions ??= []; if (configuration.SkipSearch is null) throw new NullReferenceException(nameof(configuration.SkipSearch)); if (configuration.TestDistanceResults is null) throw new NullReferenceException(nameof(configuration.TestDistanceResults)); if (configuration.ValidResolutions is null) throw new NullReferenceException(nameof(configuration.ValidResolutions)); diff --git a/Drag-Drop-Search/Program.cs b/Drag-Drop-Search/Program.cs index 520dec1..fd1a286 100644 --- a/Drag-Drop-Search/Program.cs +++ b/Drag-Drop-Search/Program.cs @@ -16,7 +16,7 @@ public class Program private static Item[] GetFilterItems(Models.Configuration configuration, Container container) { - List results = new(); + List results = []; foreach (Item item in container.Items) { if (item.ImageFileHolder is not null @@ -29,14 +29,14 @@ public class Program public static List GetItemCollection(Models.Configuration configuration, Container[] containers) { - List results = new(); + List results = []; Item[] filteredItems; foreach (Container container in containers) { - if (!container.Items.Any()) + if (container.Items.Count == 0) continue; filteredItems = GetFilterItems(configuration, container); - if (!filteredItems.Any()) + if (filteredItems.Length == 0) continue; foreach (Item item in filteredItems) results.Add(item); diff --git a/Drag-Drop-Set-Property-Item/DragDropSetPropertyItem.cs b/Drag-Drop-Set-Property-Item/DragDropSetPropertyItem.cs index 5f27338..2de7855 100644 --- a/Drag-Drop-Set-Property-Item/DragDropSetPropertyItem.cs +++ b/Drag-Drop-Set-Property-Item/DragDropSetPropertyItem.cs @@ -103,7 +103,7 @@ public partial class DragDropSetPropertyItem : Form private List GetRecords(ASCIIEncoding asciiEncoding, int tagId, List files) { - List results = new(); + List results = []; int? id; string? value; string? message; @@ -179,9 +179,9 @@ public partial class DragDropSetPropertyItem : Form short type = 1; ASCIIEncoding asciiEncoding = new(); int xpKeywords = (int)IExif.Tags.XPKeywords; - ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty(), null) ?? throw new Exception(); + ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, [], null) ?? throw new Exception(); List records = GetRecords(asciiEncoding, xpKeywords, files); - if (!records.Any()) + if (records.Count == 0) SetMessage("No data"); else SetPropertyItem(setTo, xpKeywords, type, asciiEncoding, constructorInfo, records); @@ -190,7 +190,7 @@ public partial class DragDropSetPropertyItem : Form private void SetPropertyItem(string[] paths, string setTo) { FileInfo fileInfo; - List files = new(); + List files = []; foreach (string path in paths.OrderBy(l => l)) { fileInfo = new(path); @@ -203,7 +203,7 @@ public partial class DragDropSetPropertyItem : Form files.AddRange(Directory.GetFiles(path, "*", SearchOption.TopDirectoryOnly)); } } - if (!files.Any()) + if (files.Count == 0) SetMessage("No data"); else SetPropertyItem(setTo, files); @@ -221,7 +221,7 @@ public partial class DragDropSetPropertyItem : Form { try { - if (e.Data is not null && e.Data.GetData(DataFormats.FileDrop) is string[] paths && paths.Any()) + if (e.Data is not null && e.Data.GetData(DataFormats.FileDrop) is string[] paths && paths.Length != 0) SetPropertyItem(paths); else { diff --git a/Duplicate-Search/DuplicateSearch.cs b/Duplicate-Search/DuplicateSearch.cs index 2e26cf6..d930969 100644 --- a/Duplicate-Search/DuplicateSearch.cs +++ b/Duplicate-Search/DuplicateSearch.cs @@ -142,7 +142,7 @@ public class DuplicateSearch private static Dictionary> GetIdToCollection(string argZero, Configuration configuration, bool argZeroIsConfigurationRootDirectory, Container[] containers, string destinationRoot, List preloadIds) { - Dictionary> results = new(); + Dictionary> results = []; string directory; const int zero = 0; Item[] filteredItems; @@ -151,19 +151,19 @@ public class DuplicateSearch MappingFromItem? mappingFromItem; List? collection; const string duplicates = "-Duplicate(s)"; - if (containers.Any()) + if (containers.Length != 0) { foreach (int id in preloadIds) - results.Add(id, new() { null }); + results.Add(id, [null]); } foreach (Container container in containers) { - if (!container.Items.Any()) + if (container.Items.Count == 0) continue; if (!argZeroIsConfigurationRootDirectory && !container.SourceDirectory.StartsWith(argZero)) continue; filteredItems = Shared.Models.Stateless.Methods.IContainer.GetFilterItems(configuration, container); - if (!filteredItems.Any()) + if (filteredItems.Length == 0) continue; containerDateTimes = Shared.Models.Stateless.Methods.IContainer.GetContainerDateTimes(filteredItems); foreach (Item item in filteredItems) @@ -175,7 +175,7 @@ public class DuplicateSearch continue; } if (!results.TryGetValue(item.Property.Id.Value, out collection)) - results.Add(item.Property.Id.Value, new()); + results.Add(item.Property.Id.Value, []); if (collection is null && !results.TryGetValue(item.Property.Id.Value, out collection)) continue; if (collection.Count == 0) @@ -188,7 +188,7 @@ public class DuplicateSearch if (mappingFromItem is not null) { resizedFileHolder = new(mappingFromItem.ResizedFileHolder.FullName.Replace($"0{duplicates}", $"1{duplicates}")); - collection[0] = new(mappingFromItem.ContainerDateTimes, item.Property.DateTimeDigitized, item.Property.DateTimeOriginal, mappingFromItem.Id, mappingFromItem.ImageFileHolder, mappingFromItem.IsWrongYear, item.Property.Keywords ?? Array.Empty(), mappingFromItem.MinimumDateTime, item.Property.Model, mappingFromItem.RelativePath, resizedFileHolder); + collection[0] = new(mappingFromItem.ContainerDateTimes, item.Property.DateTimeDigitized, item.Property.DateTimeOriginal, mappingFromItem.Id, mappingFromItem.ImageFileHolder, mappingFromItem.IsWrongYear, item.Property.Keywords ?? [], mappingFromItem.MinimumDateTime, item.Property.Model, mappingFromItem.RelativePath, resizedFileHolder); } } resizedFileHolder = new(string.Concat(Path.Combine(destinationRoot, directory), item.RelativePath)); @@ -201,8 +201,8 @@ public class DuplicateSearch private static List<(FileHolder ImageFileHolder, string Destination)> GetCollectionAndCreateDirectories(Dictionary> idToCollection) { - List<(FileHolder ImageFileHolder, string Destination)> results = new(); - List collection = new(); + List<(FileHolder ImageFileHolder, string Destination)> results = []; + List collection = []; foreach (KeyValuePair> keyValuePair in idToCollection) { foreach (MappingFromItem? mappingFromItem in keyValuePair.Value) @@ -225,7 +225,7 @@ public class DuplicateSearch private static List GetPreloadIds(string destinationRoot) { - List results = new(); + List results = []; string[] lines; string preloadDirectory = Path.Combine(destinationRoot, "Preload"); if (!Directory.Exists(preloadDirectory)) diff --git a/Duplicate-Search/Program.cs b/Duplicate-Search/Program.cs index 067ce20..0656509 100644 --- a/Duplicate-Search/Program.cs +++ b/Duplicate-Search/Program.cs @@ -60,7 +60,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Face/Models/_D_Face.cs b/Face/Models/_D_Face.cs index 6d3bba4..22a3491 100644 --- a/Face/Models/_D_Face.cs +++ b/Face/Models/_D_Face.cs @@ -68,7 +68,7 @@ public class D_Face float[] rectangleIntersectMinimums) { _ArgZero = argZero; - _FileGroups = new(); + _FileGroups = []; _ImageCodecInfo = imageCodecInfo; _EncoderParameters = encoderParameters; _FileNameExtension = filenameExtension; @@ -87,7 +87,7 @@ public class D_Face _Model = model; _PredictorModel = predictorModel; _ModelParameter = modelParameter; - ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty(), null) ?? throw new Exception(); + ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, [], null) ?? throw new Exception(); _ConstructorInfo = constructorInfo; _WriteIndentedAndWhenWritingNull = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }; } @@ -101,7 +101,7 @@ public class D_Face public void Update(string dResultsFullGroupDirectory) { _FileGroups.Clear(); - Dictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultCollection, _PropertyConfiguration.ResultContent }); + Dictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, [_PropertyConfiguration.ResultCollection, _PropertyConfiguration.ResultContent]); foreach (KeyValuePair keyValuePair in keyValuePairs) _FileGroups.Add(keyValuePair.Key, keyValuePair.Value); } @@ -219,7 +219,7 @@ public class D_Face throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfJitters)); if (_PropertyConfiguration.NumberOfTimesToUpsample is null) throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfTimesToUpsample)); - List results = new(); + List results = []; FaceRecognitionDotNet.Image? unknownImage; try { unknownImage = FaceRecognition.LoadImageFile(mappingFromItem.ResizedFileHolder.FullName); } @@ -262,11 +262,11 @@ public class D_Face private static List> GetLocationContainers(string outputResolution, ReadOnlyCollection> locationContainers, Dictionary outputResolutionToResize, List faces) { - List> results = new(); + List> results = []; string? json; Location? location; Rectangle? rectangle; - List skip = new(); + List skip = []; OutputResolution? outputResolutionCheck = null; (int outputResolutionWidth, int outputResolutionHeight, int outputResolutionOrientation) = Resize.Models.Stateless.Methods.IResize.Get(outputResolution, outputResolutionToResize); foreach (Shared.Models.Face face in faces) @@ -323,7 +323,7 @@ public class D_Face throw new NullReferenceException(nameof(dResultsFullGroupDirectory)); string? json; List? locations; - string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize) }; + string[] changesFrom = [nameof(A_Property), nameof(B_Metadata), nameof(C_Resize)]; List dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList(); (_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.Name); FileInfo fileInfo = new(Path.Combine(_FileGroups[_PropertyConfiguration.ResultCollection][directoryIndex], $"{mappingFromItem.ImageFileHolder.NameWithoutExtension}{mappingFromItem.ImageFileHolder.ExtensionLowered}.json")); @@ -361,7 +361,7 @@ public class D_Face } List> collection; if (results is null || locationContainers is null) - collection = new(); + collection = []; else collection = GetLocationContainers(outputResolution, locationContainers, outputResolutionToResize, results); if (!_LoadPhotoPrismLocations || mappingFromPhotoPrismCollection is null || results is null) @@ -396,11 +396,11 @@ public class D_Face public List<(Shared.Models.Face, FileInfo?, string, bool)> SaveFaces(string f, string dResultsFullGroupDirectory, List> subFileTuples, List parseExceptions, MappingFromItem mappingFromItem, List faces) { - List<(Shared.Models.Face, FileInfo?, string, bool Save)> results = new(); + List<(Shared.Models.Face, FileInfo?, string, bool Save)> results = []; bool save; FileInfo fileInfo; string deterministicHashCodeKey; - string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize) }; + string[] changesFrom = [nameof(A_Property), nameof(B_Metadata), nameof(C_Resize)]; List dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList(); (_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.Name); string directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], mappingFromItem.ImageFileHolder.NameWithoutExtension); diff --git a/FaceParts/Models/_D2_FaceParts.cs b/FaceParts/Models/_D2_FaceParts.cs index feeb079..ef4e55d 100644 --- a/FaceParts/Models/_D2_FaceParts.cs +++ b/FaceParts/Models/_D2_FaceParts.cs @@ -32,11 +32,11 @@ public class D2_FaceParts public D2_FaceParts(IPropertyConfiguration propertyConfiguration, ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension, bool checkDFaceAndUpWriteDates, bool overrideForFaceLandmarkImages) { - _FileGroups = new(); + _FileGroups = []; _ImageCodecInfo = imageCodecInfo; _EncoderParameters = encoderParameters; _FileNameExtension = filenameExtension; - _AngleBracketCollection = new List(); + _AngleBracketCollection = []; _PropertyConfiguration = propertyConfiguration; _CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates; _OverrideForFaceLandmarkImages = overrideForFaceLandmarkImages; @@ -51,7 +51,7 @@ public class D2_FaceParts public void Update(string dResultsFullGroupDirectory) { _FileGroups.Clear(); - Dictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultContent }); + Dictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, [_PropertyConfiguration.ResultContent]); foreach (KeyValuePair keyValuePair in keyValuePairs) _FileGroups.Add(keyValuePair.Key, keyValuePair.Value); } @@ -71,7 +71,7 @@ public class D2_FaceParts public string GetFacePartsDirectory(Configuration configuration, string dResultsFullGroupDirectory, Item item, bool includeNameWithoutExtension) { string result; - bool angleBracketCollectionAny = _AngleBracketCollection.Any(); + bool angleBracketCollectionAny = _AngleBracketCollection.Count != 0; if (!angleBracketCollectionAny) { if (item.ImageFileHolder.DirectoryName is null) @@ -128,12 +128,12 @@ public class D2_FaceParts // Rotate the image's corners to see how big // it will be after rotation. PointF[] points = - { - new (0, 0), - new (bitmap.Width, 0), - new (bitmap.Width, bitmap.Height), - new (0, bitmap.Height), - }; + [ + new(0, 0), + new(bitmap.Width, 0), + new(bitmap.Width, bitmap.Height), + new(0, bitmap.Height), + ]; rotate_at_origin.TransformPoints(points); float xMinimum, xMaximum, yMinimum, yMaximum; GetPointBounds(points, out xMinimum, out xMaximum, out yMinimum, out yMaximum); @@ -199,7 +199,7 @@ public class D2_FaceParts using (Image image = Image.FromFile(resizedFileHolder.FullName)) { using Graphics graphic = Graphics.FromImage(image); - if (face.FaceParts is null || !face.FaceParts.Any()) + if (face.FaceParts is null || face.FaceParts.Count == 0) { if (face.Location is null) continue; @@ -254,8 +254,8 @@ public class D2_FaceParts long ticks = DateTime.Now.Ticks; string deterministicHashCodeKey; bool updateDateWhenMatches = false; - List<(Shared.Models.Face, string, string)> collection = new(); - string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize), nameof(D_Face) }; + List<(Shared.Models.Face, string, string)> collection = []; + string[] changesFrom = [nameof(A_Property), nameof(B_Metadata), nameof(C_Resize), nameof(D_Face)]; List dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList(); (_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.Name); string directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], mappingFromItem.ImageFileHolder.NameWithoutExtension); @@ -283,11 +283,11 @@ public class D2_FaceParts check = true; else if (saveRotated && !rotatedFileInfo.Exists) check = true; - else if (_CheckDFaceAndUpWriteDates && dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime) + else if (_CheckDFaceAndUpWriteDates && dateTimes.Count != 0 && dateTimes.Max() > fileInfo.LastWriteTime) check = true; if (check && !updateDateWhenMatches) { - updateDateWhenMatches = dateTimes.Any() && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime; + updateDateWhenMatches = dateTimes.Count != 0 && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime; dateTime = !updateDateWhenMatches ? null : dateTimes.Max(); } } @@ -308,7 +308,7 @@ public class D2_FaceParts using Graphics graphic = Graphics.FromImage(image); foreach ((Shared.Models.Face face, FileInfo? fileInfo, string _, bool _) in faceCollection) { - if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null || face.FaceParts is null || !face.FaceParts.Any()) + if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null || face.FaceParts is null || face.FaceParts.Count == 0) continue; pen = face.Mapping?.MappingFromPerson is null ? Pens.Red : Pens.GreenYellow; try @@ -363,7 +363,7 @@ public class D2_FaceParts { bool hasNotMapped = GetNotMapped(facePartsCollectionDirectory, faceCollection); string fileName = Path.Combine(facePartsCollectionDirectory, $"{mappingFromItem.ImageFileHolder.Name}{_FileNameExtension}"); - bool save = faceCollection.Any(l => l.Face.FaceEncoding is not null && l.Face.Location is not null && l.Face.OutputResolution is not null && l.Face.FaceParts is not null && l.Face.FaceParts.Any()); + bool save = faceCollection.Any(l => l.Face.FaceEncoding is not null && l.Face.Location is not null && l.Face.OutputResolution is not null && l.Face.FaceParts is not null && l.Face.FaceParts.Count != 0); FileInfo fileInfo = new(fileName); if (save && (!fileInfo.Exists || new TimeSpan(DateTime.Now.Ticks - fileInfo.LastWriteTime.Ticks).TotalDays > 10)) { diff --git a/FaceRecognitionDotNet/Dlib/Python/CnnFaceDetectionModelV1.cs b/FaceRecognitionDotNet/Dlib/Python/CnnFaceDetectionModelV1.cs index c4636a2..0cf15e8 100644 --- a/FaceRecognitionDotNet/Dlib/Python/CnnFaceDetectionModelV1.cs +++ b/FaceRecognitionDotNet/Dlib/Python/CnnFaceDetectionModelV1.cs @@ -12,7 +12,7 @@ internal sealed class CnnFaceDetectionModelV1 public static IEnumerable Detect(LossMmod net, Image image, int upsampleNumTimes) { using PyramidDown? pyr = new(2); - List? rects = new(); + List? rects = []; // Copy the data into dlib based objects using Matrix? matrix = new(); @@ -52,8 +52,8 @@ internal sealed class CnnFaceDetectionModelV1 public static IEnumerable> DetectMulti(LossMmod net, IEnumerable images, int upsampleNumTimes, int batchSize = 128) { - List>? destImages = new(); - List>? allRects = new(); + List>? destImages = []; + List>? allRects = []; try { @@ -86,7 +86,7 @@ internal sealed class CnnFaceDetectionModelV1 OutputLabels>? dets = net.Operator(destImages, (ulong)batchSize); foreach (IEnumerable? det in dets) { - List? rects = new(); + List? rects = []; foreach (MModRect? d in det) { DRectangle drect = pyr.RectDown(new DRectangle(d.Rect), (uint)upsampleNumTimes); diff --git a/FaceRecognitionDotNet/Dlib/Python/FaceRecognitionModelV1.cs b/FaceRecognitionDotNet/Dlib/Python/FaceRecognitionModelV1.cs index 5736a75..3f6d155 100644 --- a/FaceRecognitionDotNet/Dlib/Python/FaceRecognitionModelV1.cs +++ b/FaceRecognitionDotNet/Dlib/Python/FaceRecognitionModelV1.cs @@ -10,14 +10,14 @@ internal sealed class FaceRecognitionModelV1 public static Matrix ComputeFaceDescriptor(LossMetric net, Image img, FullObjectDetection face, int numberOfJitters) { - FullObjectDetection[]? faces = new[] { face }; + FullObjectDetection[]? faces = [face]; return ComputeFaceDescriptors(net, img, faces, numberOfJitters).First(); } public static IEnumerable> ComputeFaceDescriptors(LossMetric net, Image img, IEnumerable faces, int numberOfJitters) { - Image[]? batchImage = new[] { img }; - IEnumerable[]? batchFaces = new[] { faces }; + Image[]? batchImage = [img]; + IEnumerable[]? batchFaces = [faces]; return BatchComputeFaceDescriptors(net, batchImage, batchFaces, numberOfJitters).First(); } @@ -37,7 +37,7 @@ internal sealed class FaceRecognitionModelV1 } List>>? faceChipsArray = new(batchImages.Count); - List>? faceChips = new(); + List>? faceChips = []; for (int i = 0; i < batchImages.Count; ++i) { IEnumerable? faces = batchFaces[i]; @@ -56,9 +56,9 @@ internal sealed class FaceRecognitionModelV1 det.Dispose(); } - List>>? faceDescriptors = new(); + List>>? faceDescriptors = []; for (int i = 0, count = batchImages.Count; i < count; i++) - faceDescriptors.Add(new List>()); + faceDescriptors.Add([]); if (numberOfJitters <= 1) { @@ -115,7 +115,7 @@ internal sealed class FaceRecognitionModelV1 private static IEnumerable> JitterImage(Matrix img, int numberOfJitters) { - List>? crops = new(); + List>? crops = []; for (int i = 0; i < numberOfJitters; ++i) crops.Add(DlibDotNet.Dlib.JitterImage(img, _Rand)); diff --git a/FaceRecognitionDotNet/Dlib/Python/SimpleObjectDetector.cs b/FaceRecognitionDotNet/Dlib/Python/SimpleObjectDetector.cs index 75d96e7..4f6b544 100644 --- a/FaceRecognitionDotNet/Dlib/Python/SimpleObjectDetector.cs +++ b/FaceRecognitionDotNet/Dlib/Python/SimpleObjectDetector.cs @@ -15,7 +15,7 @@ internal sealed class SimpleObjectDetector List detectionConfidences, List weightIndices) { - List? rectangles = new(); + List? rectangles = []; if (img.Mode == Mode.Greyscale) { @@ -127,8 +127,8 @@ internal sealed class SimpleObjectDetector detector.ThrowIfDisposed(); image.ThrowIfDisposed(); - List? detectionConfidences = new(); - List? weightIndices = new(); + List? detectionConfidences = []; + List? weightIndices = []; const double adjustThreshold = 0.0; Rectangle[]? rects = RunDetectorWithUpscale1(detector, diff --git a/FaceRecognitionDotNet/FaceRecognition.cs b/FaceRecognitionDotNet/FaceRecognition.cs index 6569a70..44c5c2c 100644 --- a/FaceRecognitionDotNet/FaceRecognition.cs +++ b/FaceRecognitionDotNet/FaceRecognition.cs @@ -71,15 +71,13 @@ public class FaceRecognition : DisposableObject private static FacePoint[] Join(IEnumerable facePoints1, IEnumerable facePoints2) { - List results = new(); - results.AddRange(facePoints1); - results.AddRange(facePoints2); + List results = [.. facePoints1, .. facePoints2]; return results.ToArray(); } private List<(FacePart, FacePoint[])> GetFaceParts(FullObjectDetection fullObjectDetection) { - List<(FacePart, FacePoint[])> results = new(); + List<(FacePart, FacePoint[])> results = []; FacePoint[] facePoints = Enumerable.Range(0, (int)fullObjectDetection.Parts) .Select(index => new FacePoint(index, fullObjectDetection.GetPart((uint)index).X, fullObjectDetection.GetPart((uint)index).Y)) .ToArray(); @@ -141,7 +139,7 @@ public class FaceRecognition : DisposableObject throw new NullReferenceException(nameof(image)); image.ThrowIfDisposed(); ThrowIfDisposed(); - List results = new(); + List results = []; System.Drawing.Rectangle rectangle; IEnumerable mModRects = GetMModRects(image); foreach (MModRect? mModRect in mModRects) @@ -156,7 +154,7 @@ public class FaceRecognition : DisposableObject private List GetFullObjectDetections(Image image, List locations) { - List results = new(); + List results = []; if (_PredictorModel == PredictorModel.Custom) { if (CustomFaceLandmarkDetector is null) @@ -182,9 +180,9 @@ public class FaceRecognition : DisposableObject private List GetLocations(Image image) { - List results = new(); + List results = []; MModRect[] mModRects = GetMModRects(image); - if (mModRects.Any()) + if (mModRects.Length != 0) { Location location; System.Drawing.Rectangle rectangle; @@ -201,7 +199,7 @@ public class FaceRecognition : DisposableObject public List<(Location, FaceEncoding?, Dictionary?)> GetCollection(Image image, List? locations, bool includeFaceEncoding, bool includeFaceParts) { - List<(Location, FaceEncoding?, Dictionary?)> results = new(); + List<(Location, FaceEncoding?, Dictionary?)> results = []; if (image is null) throw new NullReferenceException(nameof(image)); image.ThrowIfDisposed(); @@ -210,14 +208,14 @@ public class FaceRecognition : DisposableObject throw new NotSupportedException("FaceRecognition.PredictorModel.Custom is not supported."); if (locations is null) locations = GetLocations(image); - else if (!locations.Any()) + else if (locations.Count == 0) locations.AddRange(GetLocations(image)); List fullObjectDetections = GetFullObjectDetections(image, locations); if (fullObjectDetections.Count != locations.Count) throw new Exception(); - List<(Location Location, List FaceEncodings, List> FaceParts)> collection = new(); + List<(Location Location, List FaceEncodings, List> FaceParts)> collection = []; foreach (Location location in locations) - collection.Add(new(location, new(), new())); + collection.Add(new(location, [], [])); if (locations.Count != collection.Count) throw new Exception(); if (!includeFaceEncoding) @@ -239,7 +237,7 @@ public class FaceRecognition : DisposableObject if (!includeFaceParts) { for (int i = 0; i < collection.Count; i++) - collection[i].FaceParts.Add(new()); + collection[i].FaceParts.Add([]); } else { @@ -258,11 +256,11 @@ public class FaceRecognition : DisposableObject { if (faceEncodings.Count != 1 || faceParts.Count != 1) continue; - if (!faceParts[indexZero].Any()) + if (faceParts[indexZero].Count == 0) results.Add(new(location, faceEncodings[indexZero], null)); else { - keyValuePairs = new(); + keyValuePairs = []; foreach ((FacePart facePart, FacePoint[] facePoints) in faceParts[indexZero]) keyValuePairs.Add(facePart, facePoints); results.Add(new(location, faceEncodings[indexZero], keyValuePairs)); @@ -412,7 +410,7 @@ public class FaceRecognition : DisposableObject public static List FaceDistances(ReadOnlyCollection faceDistances, FaceDistance faceDistanceToCompare) { - List results = new(); + List results = []; if (faceDistances is null) throw new NullReferenceException(nameof(faceDistances)); if (faceDistances.Count != 0) diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index 3b2cb04..c70dcc4 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -25,6 +25,9 @@ namespace View_by_Distance.Instance; public partial class DlibDotNet { + [GeneratedRegex(@"[\\,\/,\:,\*,\?,\"",\<,\>,\|]")] + private static partial Regex CameraRegex(); + private readonly D_Face _Faces; private readonly C_Resize _Resize; private readonly F_Random _Random; @@ -58,8 +61,8 @@ public partial class DlibDotNet _AppSettings = appSettings; _IsEnvironment = isEnvironment; long ticks = DateTime.Now.Ticks; - _Exceptions = new List(); - _JLinkResolvedDirectories = new(); + _Exceptions = []; + _JLinkResolvedDirectories = []; if (ticks.ToString().Last() == '0') ticks += 1; ReadOnlyCollection personContainers; @@ -203,7 +206,7 @@ public partial class DlibDotNet { string[] sourceDirectoryNames; if (args.Count == 0) - sourceDirectoryNames = Array.Empty(); + sourceDirectoryNames = []; else { string? century; @@ -325,7 +328,7 @@ public partial class DlibDotNet (t, containers) = Shared.Models.Stateless.Methods.IContainer.GetContainers(_Configuration.PropertyConfiguration, aPropertySingletonDirectory, filesCollectionRootDirectory, filesCollection); progressBar.Tick(); } - fileNameToCollection = !Directory.Exists(fPhotoPrismSingletonDirectory) ? fileNameToCollection = new() : F_PhotoPrism.GetFileNameToCollection(fPhotoPrismSingletonDirectory); + fileNameToCollection = !Directory.Exists(fPhotoPrismSingletonDirectory) ? fileNameToCollection = [] : F_PhotoPrism.GetFileNameToCollection(fPhotoPrismSingletonDirectory); B_Metadata metadata = new(_Configuration.PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory); mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, _Distance, personContainers, ticks, a2PeopleContentDirectory, a2PeopleSingletonDirectory, eDistanceContentDirectory); FullDoWork(argZero, propertyRoot, ticks, aResultsFullGroupDirectory, bResultsFullGroupDirectory, t, containers, propertyLogic, metadata, fileNameToCollection, mapLogic); @@ -395,13 +398,13 @@ public partial class DlibDotNet string eDistanceContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(E_Distance), _Configuration.PropertyConfiguration.ResultContent); (int season, string seasonName) = Shared.Models.Stateless.Methods.IProperty.GetSeason(dateTime.DayOfYear); FileSystemInfo fileSystemInfo = new DirectoryInfo(eDistanceContentDirectory); - string[] checkDirectories = new string[] - { + string[] checkDirectories = + [ Path.Combine(rootDirectory, "Ancestry"), Path.Combine(rootDirectory, "Facebook"), Path.Combine(rootDirectory, "LinkedIn"), rootDirectory, - }; + ]; foreach (string checkDirectory in checkDirectories) { if (checkDirectory == rootDirectory) @@ -487,7 +490,7 @@ public partial class DlibDotNet string c2ResultsFullGroupDirectory; string d2ResultsFullGroupDirectory; int containersLength = containers.Length; - List> sourceDirectoryChanges = new(); + List> sourceDirectoryChanges = []; int maxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism; string dResultsDateGroupDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(D_Face)); foreach (string outputResolution in _Configuration.OutputResolutions) @@ -565,11 +568,11 @@ public partial class DlibDotNet bool anyValidFaces; string focusRelativePath; bool? isFocusRelativePath; - List distinct = new(); + List distinct = []; DateTime[] containerDateTimes; IEnumerable filteredItems; MappingFromItem mappingFromItem; - List mappingCollection = new(); + List mappingCollection = []; foreach (Container container in containers) { if (container.Items.Count == 0) @@ -641,9 +644,9 @@ public partial class DlibDotNet string directory; bool? isWrongYear; List dateTimes; - List distinct = new(); + List distinct = []; WindowsShortcut windowsShortcut; - List<(string, string, string)> collection = new(); + List<(string, string, string)> collection = []; foreach (Item item in distinctFilteredItems) { if (item.Property?.Id is null || item.ImageFileHolder.LastWriteTime is null) @@ -666,7 +669,7 @@ public partial class DlibDotNet if (isWrongYear is null || !isWrongYear.Value) continue; // Remove-Item -LiteralPath "\\?\D:\Tmp\a\EX-Z70 " - model = string.IsNullOrEmpty(item.Property.Model) ? "Unknown" : Regex.Replace(item.Property.Model.Trim(), @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_"); + model = string.IsNullOrEmpty(item.Property.Model) ? "Unknown" : CameraRegex().Replace(item.Property.Model.Trim(), "_"); directory = Path.Combine($"{eDistanceContentDirectory[..^1]}{nameof(Item)})", item.Property.DateTimeOriginal.Value.Year.ToString(), model); fileName = item.IsNotUniqueAndNeedsReview is not null && item.IsNotUniqueAndNeedsReview.Value ? Path.Combine(directory, $"{item.ImageFileHolder.Name} {item.ImageFileHolder.Length}.lnk") : Path.Combine(directory, $"{item.ImageFileHolder.Name}.lnk"); collection.Add((item.ImageFileHolder.FullName, directory, fileName)); @@ -914,9 +917,9 @@ public partial class DlibDotNet long ticks = DateTime.Now.Ticks; DateTime dateTime = DateTime.Now; Shared.Models.Property? property; - List parseExceptions = new(); - List> subFileTuples = new(); - string[] changesFrom = new string[] { nameof(A_Property) }; + List parseExceptions = []; + List> subFileTuples = []; + string[] changesFrom = [nameof(A_Property)]; FileHolder resizedFileHolder = _Resize.GetResizedFileHolder(cResultsFullGroupDirectory, item, outputResolutionHasNumber); ReadOnlyCollection> locationContainers = mapLogic.GetLocationContainers(item); if (item.Property is null || item.Property.Id is null || !item.SourceDirectoryFileHolder.Exists || item.SourceDirectoryFileHolder.CreationTime is null || item.SourceDirectoryFileHolder.LastWriteTime is null || item.Any()) @@ -994,9 +997,9 @@ public partial class DlibDotNet if (_Configuration.SaveResizedSubfiles) _Resize.SaveResizedSubfile(_Configuration.PropertyConfiguration, outputResolution, cResultsFullGroupDirectory, subFileTuples, item, item.Property, mappingFromItem, outputResolutionToResize); if (!_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Contains(outputResolution)) - faces = new(); + faces = []; else if (!mappingFromItem.ResizedFileHolder.Exists && !File.Exists(mappingFromItem.ResizedFileHolder.FullName)) - faces = new(); + faces = []; else { List? mappingFromPhotoPrismCollection; @@ -1187,7 +1190,7 @@ public partial class DlibDotNet ReadOnlyCollection faceDistanceContainers = E_Distance.GetFaceDistanceContainers(distinctFilteredFaces); if (faceDistanceContainers.Count > 0) { - List faceDistanceEncodings = new(); + List faceDistanceEncodings = []; foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers) { if (faceDistanceContainer.FaceDistance.Encoding is null) @@ -1203,7 +1206,7 @@ public partial class DlibDotNet ProgressBar progressBar; string filesCollectionRootDirectory = _Configuration.PropertyConfiguration.RootDirectory; (string cResultsFullGroupDirectory, _, _, _) = GetResultsFullGroupDirectories(outputResolution); - IReadOnlyDictionary fileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_Configuration.PropertyConfiguration, cResultsFullGroupDirectory, new string[] { _Configuration.PropertyConfiguration.ResultContent }); + IReadOnlyDictionary fileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_Configuration.PropertyConfiguration, cResultsFullGroupDirectory, [_Configuration.PropertyConfiguration.ResultContent]); List filesCollection = IDirectory.GetFilesCollection(filesCollectionRootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage: false); int count = filesCollection.Select(l => l.Length).Sum(); string message = $") Selecting for ## pattern directory - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)"; diff --git a/Instance/Models/Binder/Configuration.cs b/Instance/Models/Binder/Configuration.cs index 0f6df18..43e8567 100644 --- a/Instance/Models/Binder/Configuration.cs +++ b/Instance/Models/Binder/Configuration.cs @@ -200,7 +200,7 @@ public class Configuration result = new(propertyConfiguration, configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckJsonForDistanceResults.Value, - configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? Array.Empty(), + configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? [], configuration.CrossDirectoryMaxItemsInDistanceCollection.Value, configuration.DeletePossibleDuplicates.Value, configuration.DistanceFactor.Value, @@ -218,10 +218,10 @@ public class Configuration configuration.ForceMetadataLastWriteTimeToCreationTime.Value, configuration.ForceResizeLastWriteTimeToCreationTime.Value, configuration.GenealogicalDataCommunicationFile, - configuration.IgnoreExtensions ?? Array.Empty(), - configuration.JLinks ?? Array.Empty(), - configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? Array.Empty(), - configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? Array.Empty(), + configuration.IgnoreExtensions ?? [], + configuration.JLinks ?? [], + configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? [], + configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? [], configuration.LoadPhotoPrismLocations.Value, configuration.LocationContainerDebugDirectory, configuration.LocationContainerDirectoryPattern, @@ -234,13 +234,13 @@ public class Configuration configuration.MappingDefaultName, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value, - configuration.MixedYearRelativePaths ?? Array.Empty(), + configuration.MixedYearRelativePaths ?? [], configuration.ModelDirectory, configuration.ModelName, configuration.MoveToDecade.Value, configuration.OutputExtension, configuration.OutputQuality.Value, - configuration.OutputResolutions ?? Array.Empty(), + configuration.OutputResolutions ?? [], configuration.OverrideForFaceImages.Value, configuration.OverrideForFaceLandmarkImages.Value, configuration.OverrideForResizeImages.Value, @@ -256,26 +256,26 @@ public class Configuration configuration.PropertiesChangedForMetadata.Value, configuration.PropertiesChangedForResize.Value, configuration.RadomUseBirthdayMinimum.Value, - configuration.RangeDaysDeltaTolerance ?? Array.Empty(), - configuration.RangeDistanceTolerance ?? Array.Empty(), - configuration.RangeFaceAreaTolerance ?? Array.Empty(), - configuration.RangeFaceConfidence ?? Array.Empty(), - configuration.RectangleIntersectMinimums ?? Array.Empty(), + configuration.RangeDaysDeltaTolerance ?? [], + configuration.RangeDistanceTolerance ?? [], + configuration.RangeFaceAreaTolerance ?? [], + configuration.RangeFaceConfidence ?? [], + configuration.RectangleIntersectMinimums ?? [], configuration.ReMap.Value, configuration.Reverse.Value, - configuration.SaveBlurHashForOutputResolutions ?? Array.Empty(), - configuration.SaveFaceDistancesForOutputResolutions ?? Array.Empty(), - configuration.SaveFaceLandmarkForOutputResolutions ?? Array.Empty(), - configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? Array.Empty(), + configuration.SaveBlurHashForOutputResolutions ?? [], + configuration.SaveFaceDistancesForOutputResolutions ?? [], + configuration.SaveFaceLandmarkForOutputResolutions ?? [], + configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? [], configuration.SaveFullYearOfRandomFiles.Value, configuration.SaveIndividually.Value, - configuration.SaveMappedForOutputResolutions ?? Array.Empty(), - configuration.SavePropertyShortcutsForOutputResolutions ?? Array.Empty(), - configuration.SaveRandomForOutputResolutions ?? Array.Empty(), + configuration.SaveMappedForOutputResolutions ?? [], + configuration.SavePropertyShortcutsForOutputResolutions ?? [], + configuration.SaveRandomForOutputResolutions ?? [], configuration.SaveResizedSubfiles.Value, - configuration.SaveShortcutsForOutputResolutions ?? Array.Empty(), + configuration.SaveShortcutsForOutputResolutions ?? [], configuration.SaveSortingWithoutPerson.Value, - configuration.SkipNotSkipDirectories ?? Array.Empty(), + configuration.SkipNotSkipDirectories ?? [], configuration.SkipOlderThanDays, configuration.SkipPersonWithMoreThen, configuration.SkipSearch.Value, @@ -284,8 +284,8 @@ public class Configuration configuration.SortingMinimumToUseSigma.Value, configuration.TestDistanceResults.Value, configuration.UseFilterTries.Value, - configuration.ValidKeyWordsToIgnoreInRandom ?? Array.Empty(), - configuration.ValidResolutions ?? Array.Empty()); + configuration.ValidKeyWordsToIgnoreInRandom ?? [], + configuration.ValidResolutions ?? []); return result; } diff --git a/Instance/Models/Binder/Place.cs b/Instance/Models/Binder/Place.cs index 8daaf76..fbdfc1d 100644 --- a/Instance/Models/Binder/Place.cs +++ b/Instance/Models/Binder/Place.cs @@ -44,7 +44,7 @@ public class Place internal static ReadOnlyCollection GetPlaces(string[]? places) { - List results = new(); + List results = []; if (places is not null) { Place? place; diff --git a/Instance/Models/_F_Random.cs b/Instance/Models/_F_Random.cs index b66e72a..86ffdc9 100644 --- a/Instance/Models/_F_Random.cs +++ b/Instance/Models/_F_Random.cs @@ -26,7 +26,7 @@ internal class F_Random private static ReadOnlyDictionary> GetDayToRelativePaths(ReadOnlyCollection mappingCollection, string dateFormat, ReadOnlyDictionary> idToPersonKeys) { - Dictionary> results = new(); + Dictionary> results = []; string key; DateTime dateTime; List? personKeys; @@ -45,7 +45,7 @@ internal class F_Random key = dateTime.ToString(dateFormat); if (!results.TryGetValue(key, out relativePaths)) { - results.Add(key, new()); + results.Add(key, []); if (!results.TryGetValue(key, out relativePaths)) throw new Exception(); } @@ -62,8 +62,8 @@ internal class F_Random Random random = new(); List? collection; string dateFormat = "MM-dd"; - List relativePaths = new(); - List distinctCollection = new(); + List relativePaths = []; + List distinctCollection = []; DateTime dateTime = new(2024, 1, 1); //Leap year ReadOnlyDictionary> idToPersonKeys = Map.Models.Stateless.Methods.IMapLogic.GetIdToPersonKeys(personKeyToIds); ReadOnlyDictionary> dayToRelativePaths = GetDayToRelativePaths(mappingCollection, dateFormat, idToPersonKeys); diff --git a/Instance/Program.cs b/Instance/Program.cs index adeb608..7794b90 100644 --- a/Instance/Program.cs +++ b/Instance/Program.cs @@ -57,7 +57,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs index 1cdda93..03077de 100644 --- a/Map/Models/MapLogic.cs +++ b/Map/Models/MapLogic.cs @@ -30,7 +30,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic string fileName; string checkFile; string sourceFile; - List distinct = new(); + List distinct = []; WindowsShortcut windowsShortcut; string[] directories = (from l in saveContainers select l.Directory).Distinct().ToArray(); int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - _Ticks).TotalSeconds); @@ -139,7 +139,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic private List GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, ReadOnlyDictionary> personKeyToIds, ReadOnlyCollection mappingCollection) { - List results = new(); + List results = []; if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); int season; @@ -193,7 +193,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic private void LookForAbandoned(Property.Models.Configuration propertyConfiguration, List distinctFilteredIds) { - List renameCollection = new(); + List renameCollection = []; foreach (KeyValuePair>> keyValuePair in _IdToLocationContainers) { if (distinctFilteredIds.Contains(keyValuePair.Key)) @@ -226,10 +226,10 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic _Configuration = configuration; _PropertyConfiguration = propertyConfiguration; ReadOnlyDictionary readOnlyPersonKeyToCount; - List notMappedPersonContainers = new(); - Dictionary> skipCollection = new(); - Dictionary> skipNotSkipCollection = new(); - List> locationContainers = new(); + List notMappedPersonContainers = []; + Dictionary> skipCollection = []; + Dictionary> skipNotSkipCollection = []; + List> locationContainers = []; string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory); string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, ticks.ToString()); ReadOnlyDictionary>> idThenWholePercentagesToPersonContainers; @@ -253,8 +253,8 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic throw new Exception("Confirm Manual files and then restart!"); Stateless.MapLogic.SetSkipCollections(configuration, personContainers, a2PeopleSingletonDirectory, skipCollection, skipNotSkipCollection); { - List personKeyFormattedCollection = new(); - Dictionary personKeyFormattedToNewestPersonKeyFormatted = new(); + List personKeyFormattedCollection = []; + Dictionary personKeyFormattedToNewestPersonKeyFormatted = []; Stateless.MapLogic.SetPersonCollections(configuration, personContainers, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection); readOnlyPersonKeyFormattedCollection = new(personKeyFormattedCollection); readOnlyPersonKeyFormattedToNewestPersonKeyFormatted = new(personKeyFormattedToNewestPersonKeyFormatted); @@ -264,11 +264,11 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic ReadOnlyCollection personKeyFormattedIdThenWholePercentagesCollection = Stateless.MapLogic.GetPersonKeyFormattedIdThenWholePercentages(configuration, ticks, records); // { - Dictionary personKeyToCount = new(); - Dictionary personKeyToPersonContainer = new(); - Dictionary personKeyFormattedToPersonContainer = new(); - Dictionary> personKeyToPersonContainerCollection = new(); - List<(Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer = new(); + Dictionary personKeyToCount = []; + Dictionary personKeyToPersonContainer = []; + Dictionary personKeyFormattedToPersonContainer = []; + Dictionary> personKeyToPersonContainerCollection = []; + List<(Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer = []; Stateless.MapLogic.SetKeyValuePairsAndAddToCollections(configuration, personContainers, personKeyToPersonContainer, @@ -335,26 +335,26 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic { LocationContainer[] results; if (item.Property?.Id is null) - results = Array.Empty>(); + results = []; else { List>? locationContainers; if (_IdToLocationContainers.TryGetValue(item.Property.Id.Value, out locationContainers)) results = locationContainers.ToArray(); else - results = Array.Empty>(); + results = []; } return new(results); } public ReadOnlyDictionary> GetPersonKeyToIds() { - Dictionary> results = new(); + Dictionary> results = []; long personKey; const int zero = 0; List? collection; PersonBirthday personBirthday; - List shouldMove = new(); + List shouldMove = []; foreach (KeyValuePair>> idToCollection in _IdThenWholePercentagesToPersonContainers) { foreach (KeyValuePair> wholePercentagesToPersonContainers in idToCollection.Value) @@ -369,7 +369,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic personKey = personBirthday.Value.Ticks; if (!results.TryGetValue(personKey, out collection)) { - results.Add(personKey, new()); + results.Add(personKey, []); if (!results.TryGetValue(personKey, out collection)) throw new Exception(); } @@ -532,7 +532,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic { if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); - List results = new(); + List results = []; string by; Record record; List? ids; @@ -665,7 +665,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic { if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); - List results = new(); + List results = []; Sorting sorting; FaceDistance faceDistanceLength; for (int j = 0; j < faceDistanceLengths.Count; j++) @@ -729,7 +729,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic string? segmentC; string personKeyFormatted; MappingFromPerson mappingFromPerson; - Dictionary keyToCount = new(); + Dictionary keyToCount = []; foreach (SortingContainer sortingContainer in sortingContainers) { if (sortingContainer.Question is null) @@ -770,7 +770,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic string counts = distanceLimits.GetCounts(); _ = Directory.CreateDirectory(Path.Combine(_EDistanceContentTicksDirectory, counts)); } - List results = new(); + List results = []; string by; Record record; bool isBySorting; @@ -866,16 +866,16 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic string counts = distanceLimits.GetCounts(); _ = Directory.CreateDirectory(Path.Combine(_EDistanceContentTicksDirectory, counts)); } - List results = new(); + List results = []; Sorting sorting; Mapping? keyMapping; List? wholePercentagesCollection; MappingFromFilterPre mappingFromFilterPre; - Dictionary keyToCount = new(); + Dictionary keyToCount = []; MappingFromFilterPost mappingFromFilterPost; ReadOnlyCollection? personContainers; ReadOnlyDictionary? wholePercentagesToMapping; - Dictionary> idToWholePercentagesCollection = new(); + Dictionary> idToWholePercentagesCollection = []; int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - _Ticks).TotalSeconds); ReadOnlyDictionary>? wholePercentagesToPersonContainers; string message = $") {sortingContainers.Count:000} Filter Sorting Container(s) - {totalSeconds} total second(s)"; @@ -915,7 +915,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic continue; if (!idToWholePercentagesCollection.TryGetValue(sorting.Id, out wholePercentagesCollection)) { - idToWholePercentagesCollection.Add(sorting.Id, new()); + idToWholePercentagesCollection.Add(sorting.Id, []); if (!idToWholePercentagesCollection.TryGetValue(sorting.Id, out wholePercentagesCollection)) throw new Exception(); } @@ -986,7 +986,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic { if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); - List results = new(); + List results = []; string[] files; string checkDirectory; string[] checkDirectories; @@ -995,7 +995,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic PersonBirthday? personBirthday; string fileNameWithoutExtension; WindowsShortcut windowsShortcut; - List<(long, string)> collection = new(); + List<(long, string)> collection = []; foreach (string directoryName in jLinks) { checkDirectory = Path.Combine(a2PeopleContentDirectory, directoryName); @@ -1052,10 +1052,10 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic string? directoryName; string personDirectory; string personKeyFormatted; - List distinctCollection = new(); + List distinctCollection = []; bool usePersonKeyAndDeterministicHashCodeKey = false; List personKeyFormattedCollection = GetPersonKeyFormattedCollection(jLinks, a2PeopleContentDirectory, personContainers, personKeyToIds); - List<(int Id, FileHolder ImageFileHolder, int ApproximateYears, string PersonKeyFormatted, string CheckFile, string Directory, string PersonDirectory)> collection = new(); + List<(int Id, FileHolder ImageFileHolder, int ApproximateYears, string PersonKeyFormatted, string CheckFile, string Directory, string PersonDirectory)> collection = []; foreach (Mapping mapping in mappingCollection) { if (distinctCollection.Contains(mapping.MappingFromItem.Id)) @@ -1106,7 +1106,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); SaveContainer? saveContainer; - List saveContainers = new(); + List saveContainers = []; (int, FileHolder, int, string, string, string, string)[] collection = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory, personContainers, mappingCollection, personKeyToIds); foreach ((int id, FileHolder imageFileHolder, int approximateYears, string personKeyFormatted, string directory, string personDirectory, string checkFile) in collection) { @@ -1122,7 +1122,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic { string hiddenFile; WindowsShortcut windowsShortcut; - List collection = new(); + List collection = []; collection = GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(eDistanceContentDirectory, personKeyToIds, mappingCollection); string[] distinctDirectories = (from l in collection select l.Directory).Distinct().ToArray(); foreach (string directory in distinctDirectories) @@ -1139,7 +1139,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic continue; if (s.Description is not null) { - File.WriteAllLines(hiddenFile, new string[] { s.FullName, s.Description }); + File.WriteAllLines(hiddenFile, [s.FullName, s.Description]); File.SetAttributes(hiddenFile, FileAttributes.Hidden); File.SetLastWriteTime(hiddenFile, s.DateTime); } @@ -1168,9 +1168,9 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic string? directoryName; string personDirectory; string personKeyFormatted; - List distinct = new(); - List collection = new(); - List<(string, DateTime[])> directoriesAndDateTimes = new(); + List distinct = []; + List collection = []; + List<(string, DateTime[])> directoriesAndDateTimes = []; foreach (Item item in filteredItems) { if (item.ResizedFileHolder is null) diff --git a/Map/Models/Stateless/DistanceLogic.cs b/Map/Models/Stateless/DistanceLogic.cs index b99c739..92f7e9f 100644 --- a/Map/Models/Stateless/DistanceLogic.cs +++ b/Map/Models/Stateless/DistanceLogic.cs @@ -78,7 +78,7 @@ internal abstract class DistanceLogic private static List UpdateDateVerifyAndGetTicksDirectories(Configuration configuration, string eDistanceContentDirectory) { - List results = new(); + List results = []; float? totalDays; long? next = null; string? checkDirectory; @@ -210,7 +210,7 @@ internal abstract class DistanceLogic private static List GetRecords(Configuration configuration, bool? isDefault, string[] files, int directoryNumber, string personKeyFormatted, List distinct, string? personDisplayDirectoryName) { - List results = new(); + List results = []; int? id; string fileName; string checkFile; @@ -258,7 +258,7 @@ internal abstract class DistanceLogic internal static List DeleteEmptyDirectoriesAndGetCollection(Configuration configuration, long ticks, string eDistanceContentDirectory, ReadOnlyDictionary personKeyFormattedToNewestPersonKeyFormatted, ReadOnlyCollection personKeyFormattedCollection) { - List results = new(); + List results = []; bool check; string message; string[] files; @@ -273,7 +273,7 @@ internal abstract class DistanceLogic string personKeyFormatted; string? personFirstInitial; bool isReservedDirectoryName; - List distinct = new(); + List distinct = []; string[] personNameDirectories; string? newestPersonKeyFormatted; string? personDisplayDirectoryName; diff --git a/Map/Models/Stateless/LookForAbandonedLogic.cs b/Map/Models/Stateless/LookForAbandonedLogic.cs index da59b16..c97fac8 100644 --- a/Map/Models/Stateless/LookForAbandonedLogic.cs +++ b/Map/Models/Stateless/LookForAbandonedLogic.cs @@ -9,7 +9,7 @@ internal abstract class LookForAbandonedLogic { string fileNameWithoutExtension; bool nameWithoutExtensionIsIdFormat; - List renameCollection = new(); + List renameCollection = []; bool nameWithoutExtensionIsPaddedIdFormat; int sortOrderOnlyLengthIndex = IDirectory.GetSortOrderOnlyLengthIndex(propertyConfiguration.Offset); string[] distinctFilteredIdsValues = distinctFilteredIds.Select(l => l.ToString()).ToArray(); diff --git a/Map/Models/Stateless/MapLogic.cs b/Map/Models/Stateless/MapLogic.cs index 8ed3bee..0fb060d 100644 --- a/Map/Models/Stateless/MapLogic.cs +++ b/Map/Models/Stateless/MapLogic.cs @@ -37,8 +37,8 @@ internal abstract class MapLogic string fileName; string checkFile; int? wholePercentages; - List distinctFiles = new(); - List distinctFileName = new(); + List distinctFiles = []; + List distinctFileName = []; bool skipNotSkipDirectoriesAny = configuration.SkipNotSkipDirectories.Length > 0; string[] checkDirectories = (from l in configuration.SkipNotSkipDirectories select Path.GetFullPath($"{a2PeopleSingletonDirectory}{l}")).ToArray(); foreach (PersonContainer personContainer in personContainers) @@ -69,13 +69,13 @@ internal abstract class MapLogic if (!skipNotSkipDirectoriesAny || !checkDirectories.Any(l => distinctFile.StartsWith(l))) { if (!skipCollection.ContainsKey(id.Value)) - skipCollection.Add(id.Value, new()); + skipCollection.Add(id.Value, []); skipCollection[id.Value].Add((distinctFile, wholePercentages.Value)); } else { if (!skipNotSkipCollection.ContainsKey(id.Value)) - skipNotSkipCollection.Add(id.Value, new()); + skipNotSkipCollection.Add(id.Value, []); skipNotSkipCollection[id.Value].Add((distinctFile, wholePercentages.Value)); } } @@ -160,7 +160,7 @@ internal abstract class MapLogic internal static ReadOnlyCollection GetFaces(ReadOnlyCollection items) { - List results = new(); + List results = []; foreach (Item item in items) { if (item.Property?.Id is null || item.ResizedFileHolder is null) @@ -183,10 +183,10 @@ internal abstract class MapLogic private static List GetDisplayDirectoryAllFiles(string fileNameExtension, string personBirthdayFormat, ReadOnlyCollection personContainers) { - List results = new(); + List results = []; string fileName; string personKeyFormatted; - List distinct = new(); + List distinct = []; foreach (PersonContainer personContainer in personContainers) { if (personContainer.Key is null) @@ -242,7 +242,7 @@ internal abstract class MapLogic private static List<(string, long)> GetDirectoryAndTicksCollection(string[] jLinks, string personBirthdayFormat, string? rootDirectory) { - List<(string, long)> results = new(); + List<(string, long)> results = []; string directory; DateTime dateTime; string[] personKeyDirectories; @@ -275,15 +275,15 @@ internal abstract class MapLogic { (long, PersonContainer)[] results; const int zero = 0; - List errors = new(); + List errors = []; string newestPersonKeyFormatted; - List<(long PersonKey, PersonContainer PersonContainer)> collection = new(); + List<(long PersonKey, PersonContainer PersonContainer)> collection = []; foreach (PersonContainer personContainer in personContainers) { if (personContainer.Key is null) continue; if (!personKeyToPersonContainerCollection.ContainsKey(personContainer.Key.Value)) - personKeyToPersonContainerCollection.Add(personContainer.Key.Value, new()); + personKeyToPersonContainerCollection.Add(personContainer.Key.Value, []); personKeyToPersonContainerCollection[personContainer.Key.Value].Add(personContainer); newestPersonKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, personContainer.Key.Value); if (!personKeyFormattedToPersonContainer.ContainsKey(newestPersonKeyFormatted)) @@ -303,7 +303,7 @@ internal abstract class MapLogic private static Dictionary>> GetAll(Configuration configuration, ReadOnlyDictionary personKeyFormattedToPersonContainer, ReadOnlyCollection personKeyFormattedIdThenWholePercentagesCollection) { - Dictionary>> results = new(); + Dictionary>> results = []; PersonBirthday? personBirthday; PersonContainer? personContainer; List? personContainers; @@ -319,13 +319,13 @@ internal abstract class MapLogic throw new Exception(); if (!results.TryGetValue(personKeyFormattedIdThenWholePercentages.Id, out idTo)) { - results.Add(personKeyFormattedIdThenWholePercentages.Id, new()); + results.Add(personKeyFormattedIdThenWholePercentages.Id, []); if (!results.TryGetValue(personKeyFormattedIdThenWholePercentages.Id, out idTo)) throw new Exception(); } if (!idTo.TryGetValue(personKeyFormattedIdThenWholePercentages.WholePercentages, out personContainers)) { - idTo.Add(personKeyFormattedIdThenWholePercentages.WholePercentages, new()); + idTo.Add(personKeyFormattedIdThenWholePercentages.WholePercentages, []); if (!idTo.TryGetValue(personKeyFormattedIdThenWholePercentages.WholePercentages, out personContainers)) throw new Exception(); } @@ -337,17 +337,17 @@ internal abstract class MapLogic private static ReadOnlyDictionary>> GetReadOnly(Dictionary>> idThenWholePercentagesToPersonContainerCollection) { - Dictionary>> results = new(); - List distinct = new(); + Dictionary>> results = []; + List distinct = []; List personContainers; Dictionary> keyValuePairs; foreach (KeyValuePair>> idTo in idThenWholePercentagesToPersonContainerCollection) { - keyValuePairs = new(); + keyValuePairs = []; foreach (KeyValuePair> wholePercentagesTo in idThenWholePercentagesToPersonContainerCollection[idTo.Key]) { distinct.Clear(); - personContainers = new(); + personContainers = []; foreach (PersonContainer personContainer in wholePercentagesTo.Value) { if (personContainer.Key is null) @@ -365,7 +365,7 @@ internal abstract class MapLogic private static ReadOnlyDictionary> GetReadOnly(Dictionary> keyValuePairs) { - Dictionary> results = new(); + Dictionary> results = []; foreach (KeyValuePair> keyValuePair in keyValuePairs) results.Add(keyValuePair.Key, new(keyValuePair.Value)); return new(results); @@ -373,13 +373,13 @@ internal abstract class MapLogic private static List GetNonSpecificPeopleCollection(Configuration configuration, long ticks, List personKeys, ReadOnlyDictionary personKeyToCount) { - List results = new(); + List results = []; bool check; long personKey; int? approximateYears = null; PersonBirthday personBirthday; PersonContainer personContainer; - string[] personDisplayDirectoryAllFiles = Array.Empty(); + string[] personDisplayDirectoryAllFiles = []; DateTime incrementDate = new(configuration.PersonBirthdayFirstYear, 1, 1); long oneHour = new DateTime(1, 1, 1, 1, 0, 0).Ticks - new DateTime(1, 1, 1).Ticks; for (int i = 0; i < int.MaxValue; i++) @@ -409,7 +409,7 @@ internal abstract class MapLogic if (check) continue; personBirthday = IPersonBirthday.GetPersonBirthday(personKey + (oneHour * 2)); - personContainer = new(approximateYears, new PersonBirthday[] { personBirthday }, personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey); + personContainer = new(approximateYears, [personBirthday], personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey); results.Add(personContainer); if (results.Count > 99) break; @@ -431,12 +431,12 @@ internal abstract class MapLogic private static List GetMappedFiles(Configuration configuration, ReadOnlyCollection personContainers, List records) { - List results = new(); + List results = []; string file; long personKey; string fileName; string checkFile; - List distinct = new(); + List distinct = []; PersonBirthday? personBirthday; results.AddRange(GetDisplayDirectoryAllFiles(configuration.FacesFileNameExtension, configuration.PersonBirthdayFormat, personContainers)); foreach (Record record in records) @@ -529,11 +529,11 @@ internal abstract class MapLogic string key; float? percent; float itemPercentagesArea; - List delete = new(); - List duplicates = new(); + List delete = []; + List duplicates = []; RectangleF? itemPercentagesRectangle; (string File, int WholePercentages) item; - Dictionary distinct = new(); + Dictionary distinct = []; foreach (LocationContainer locationContainer in locationContainers) { key = string.Concat(locationContainer.PersonKey, locationContainer.Id); @@ -660,7 +660,7 @@ internal abstract class MapLogic private static List<(string, long)> GetJLinkResolvedDirectories(string personBirthdayFormat, List resolvedDirectories) { - List<(string, long)> results = new(); + List<(string, long)> results = []; DateTime dateTime; string directoryName; string[] directories; @@ -683,7 +683,7 @@ internal abstract class MapLogic internal static void SetKeyValuePairsAndAddToCollections(Configuration configuration, ReadOnlyCollection personContainers, Dictionary personKeyToPersonContainer, ReadOnlyCollection personKeyFormattedIdThenWholePercentagesCollection, Dictionary personKeyToCount, Dictionary personKeyFormattedToPersonContainer, Dictionary> personKeyToPersonContainerCollection, List<(PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer) { PersonBirthday? personBirthday; - Dictionary>> idThenWholePercentagesToPersonContainers = new(); + Dictionary>> idThenWholePercentagesToPersonContainers = []; (long, PersonContainer)[] collection = GetDistinctCollection(configuration, personContainers, personKeyToPersonContainerCollection, personKeyFormattedToPersonContainer); foreach ((long personKey, PersonContainer personContainer) in collection) personKeyToPersonContainer.Add(personKey, personContainer); @@ -733,11 +733,11 @@ internal abstract class MapLogic internal static ReadOnlyCollection GetPersonKeyFormattedIdThenWholePercentages(Configuration configuration, long ticks, List collection) { - List results = new(); + List results = []; int? id; int? wholePercentages; List wholePercentagesCollection; - Dictionary> idToWholePercentagesCollection = new(); + Dictionary> idToWholePercentagesCollection = []; int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); string message = $") {collection.Count:000} join from ticks Director(ies) - C - {totalSeconds} total second(s)"; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; @@ -749,7 +749,7 @@ internal abstract class MapLogic if (id is null || wholePercentages is null) continue; if (!idToWholePercentagesCollection.ContainsKey(id.Value)) - idToWholePercentagesCollection.Add(id.Value, new()); + idToWholePercentagesCollection.Add(id.Value, []); wholePercentagesCollection = idToWholePercentagesCollection[id.Value]; wholePercentagesCollection.Add(wholePercentages.Value); idToWholePercentagesCollection[id.Value].Add(wholePercentages.Value); @@ -760,9 +760,9 @@ internal abstract class MapLogic internal static List GetNotMappedPersonContainers(Configuration configuration, long ticks, ReadOnlyCollection personContainers, ReadOnlyDictionary personKeyToCount) { - List results = new(); - List notMappedAndNotNamedPersonKeys = new(); - List notMappedAndWithNamedPersonKeys = new(); + List results = []; + List notMappedAndNotNamedPersonKeys = []; + List notMappedAndWithNamedPersonKeys = []; List personKeys = IPersonContainer.GetPersonKeys(personContainers); foreach (PersonContainer personContainer in personContainers) { @@ -826,7 +826,7 @@ internal abstract class MapLogic const int zero = 0; string personKeyFormatted; string[] deleteCollection; - List distinct = new(); + List distinct = []; PersonBirthday personBirthday; string personDisplayDirectory; DateTime dateTime = new(ticks); @@ -878,7 +878,7 @@ internal abstract class MapLogic internal static List> GetLocationContainers(int maxDegreeOfParallelism, Configuration configuration, long ticks, ReadOnlyCollection personContainers, Dictionary> skipCollection, List records) { - List> results = new(); + List> results = []; List mappedFiles = GetMappedFiles(configuration, personContainers, records); if (mappedFiles.Count > 0 && (configuration.DistanceMoveUnableToMatch || configuration.DistanceRenameToMatch)) { @@ -912,7 +912,7 @@ internal abstract class MapLogic string checkDirectory; string personKeyFormatted; PersonBirthday personBirthday; - List distinct = new(); + List distinct = []; DateTime dateTime = new(ticks); string by = nameof(Shared.Models.Stateless.IMapLogic.ManualCopy); foreach (PersonContainer personContainer in personContainers) @@ -1005,7 +1005,7 @@ internal abstract class MapLogic WindowsShortcut windowsShortcut; string personDisplayDirectoryName; (string, string)[] yearDirectoryNameCheck; - List<(string, string)> yearDirectoryNames = new(); + List<(string, string)> yearDirectoryNames = []; string[] personKeyDirectories = Directory.GetDirectories(mappingDirectory, "*", SearchOption.TopDirectoryOnly); foreach (string personKeyDirectory in personKeyDirectories) { @@ -1057,7 +1057,7 @@ internal abstract class MapLogic internal static ReadOnlyDictionary> GetIdToPersonKeys(ReadOnlyDictionary> personKeyToIds) { - Dictionary> results = new(); + Dictionary> results = []; List? collection; foreach (KeyValuePair> keyValuePair in personKeyToIds) { @@ -1065,7 +1065,7 @@ internal abstract class MapLogic { if (!results.TryGetValue(id, out collection)) { - results.Add(id, new()); + results.Add(id, []); if (!results.TryGetValue(id, out collection)) throw new Exception(); } @@ -1079,7 +1079,7 @@ internal abstract class MapLogic internal static ReadOnlyDictionary> GetIdToWholePercentagesToFace(ReadOnlyCollection mappingCollection) { - Dictionary> results = new(); + Dictionary> results = []; Dictionary? keyValuePairs; foreach (Mapping mapping in mappingCollection) { @@ -1087,7 +1087,7 @@ internal abstract class MapLogic continue; if (!results.TryGetValue(mapping.MappingFromItem.Id, out keyValuePairs)) { - results.Add(mapping.MappingFromItem.Id, new()); + results.Add(mapping.MappingFromItem.Id, []); if (!results.TryGetValue(mapping.MappingFromItem.Id, out keyValuePairs)) throw new Exception(); } @@ -1106,14 +1106,14 @@ internal abstract class MapLogic int totalFiles = 0; string checkDirectory; WindowsShortcut windowsShortcut; - List resolvedDirectories = new(); + List resolvedDirectories = []; if (string.IsNullOrEmpty(genealogicalDataCommunicationFile)) results = GetDirectoryAndTicksCollection(jLinks, personBirthdayFormat, a2PeopleContentDirectory); else results = GetGenealogicalDataCommunicationDirectories(genealogicalDataCommunicationFile, jLinks, personBirthdayFormat); if (results.Count == 0 || results.Count < jLinks.Length) { - List<(string, string, string)> a2PeopleSingletonDirectories = new(); + List<(string, string, string)> a2PeopleSingletonDirectories = []; foreach (string directory in Directory.GetDirectories(a2PeopleSingletonDirectory, "*", SearchOption.AllDirectories)) a2PeopleSingletonDirectories.Add((directory, Path.GetFileName(directory), Path.GetFileName(directory).Split(personCharacters).First())); foreach (string directoryName in jLinks) @@ -1144,7 +1144,7 @@ internal abstract class MapLogic else { resolvedDirectories.Clear(); - results = new(); + results = []; } } return results; @@ -1205,13 +1205,13 @@ internal abstract class MapLogic internal static ReadOnlyDictionary> ConvertSkip(Dictionary> skipCollection) { - Dictionary> results = new(); + Dictionary> results = []; List? wholePercentagesCollection; foreach (KeyValuePair> keyValuePair in skipCollection) { if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection)) { - results.Add(keyValuePair.Key, new()); + results.Add(keyValuePair.Key, []); if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection)) throw new Exception(); } @@ -1223,13 +1223,13 @@ internal abstract class MapLogic internal static ReadOnlyDictionary> ConvertSkipNotSkip(Dictionary> skipNotSkipCollection) { - Dictionary> results = new(); + Dictionary> results = []; List? wholePercentagesCollection; foreach (KeyValuePair> keyValuePair in skipNotSkipCollection) { if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection)) { - results.Add(keyValuePair.Key, new()); + results.Add(keyValuePair.Key, []); if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection)) throw new Exception(); } @@ -1241,11 +1241,11 @@ internal abstract class MapLogic internal static ReadOnlyDictionary>> ConvertLocationContainers(List> locationContainers) { - Dictionary>> results = new(); + Dictionary>> results = []; foreach (LocationContainer locationContainer in locationContainers) { if (!results.ContainsKey(locationContainer.Id)) - results.Add(locationContainer.Id, new()); + results.Add(locationContainer.Id, []); results[locationContainer.Id].Add(locationContainer); } return new(results); diff --git a/Map/Models/Stateless/RelationLogic.cs b/Map/Models/Stateless/RelationLogic.cs index 5c517aa..b67d403 100644 --- a/Map/Models/Stateless/RelationLogic.cs +++ b/Map/Models/Stateless/RelationLogic.cs @@ -14,7 +14,7 @@ internal abstract class RelationLogic { List>? collection; Dictionary>>? yearTo; - Dictionary>>> personKeyTo = new(); + Dictionary>>> personKeyTo = []; foreach (LocationContainer locationContainer in locationContainers) { if (!locationContainer.FromDistanceContent) @@ -23,13 +23,13 @@ internal abstract class RelationLogic continue; if (!personKeyTo.TryGetValue(locationContainer.PersonKey, out yearTo)) { - personKeyTo.Add(locationContainer.PersonKey, new()); + personKeyTo.Add(locationContainer.PersonKey, []); if (!personKeyTo.TryGetValue(locationContainer.PersonKey, out yearTo)) throw new Exception(); } if (!yearTo.TryGetValue(locationContainer.CreationDateOnly.Year, out collection)) { - yearTo.Add(locationContainer.CreationDateOnly.Year, new()); + yearTo.Add(locationContainer.CreationDateOnly.Year, []); if (!yearTo.TryGetValue(locationContainer.CreationDateOnly.Year, out collection)) throw new Exception(); } @@ -40,13 +40,13 @@ internal abstract class RelationLogic private static ReadOnlyCollection GetGroups(Configuration configuration, List> locationContainers) { - List results = new(); + List results = []; string key; int lastIndex; - List years = new(); - List indices = new(); - List<(int Index, int Year)> sort = new(); - List> collection = new(); + List years = []; + List indices = []; + List<(int Index, int Year)> sort = []; + List> collection = []; KeyValuePair>> keyValue; Dictionary>>> personKeyTo = GetPersonKeyTo(configuration, locationContainers); foreach (KeyValuePair>>> keyValuePair in personKeyTo) @@ -77,7 +77,7 @@ internal abstract class RelationLogic if (collection.Count == 0) continue; results.Add(new(key, collection[0].PersonKey, new(collection))); - collection = new(); + collection = []; years.Clear(); } } @@ -86,7 +86,7 @@ internal abstract class RelationLogic private static ReadOnlyDictionary MoveFiles(Configuration configuration, string key, bool isCounterPersonYear, string? displayDirectoryName, ReadOnlyCollection relationContainers, List linked1, List linked2, List linked3, List linked4, List linked5, List linked6, List linked7, List linked8, List linked9) { - Dictionary results = new(); + Dictionary results = []; string value; string checkFile; string debugFile; @@ -231,15 +231,15 @@ internal abstract class RelationLogic private static ReadOnlyDictionary GetMoveFiles(Configuration configuration, string key, int take, bool isCounterPersonYear, string? displayDirectoryName, ReadOnlyCollection relationContainers) { ReadOnlyDictionary results; - List linked1 = new(); - List linked2 = new(); - List linked3 = new(); - List linked4 = new(); - List linked5 = new(); - List linked6 = new(); - List linked7 = new(); - List linked8 = new(); - List linked9 = new(); + List linked1 = []; + List linked2 = []; + List linked3 = []; + List linked4 = []; + List linked5 = []; + List linked6 = []; + List linked7 = []; + List linked8 = []; + List linked9 = []; foreach ((FileHolder fileHolder, ReadOnlyCollection relations) in relationContainers) { foreach (Relation relation in relations.Take(take)) @@ -306,7 +306,7 @@ internal abstract class RelationLogic string markDownFile; FileHolder fileHolder; string originalString; - List lines = new(); + List lines = []; string fileNameWithoutExtension; foreach ((FileHolder relationFileHolder, ReadOnlyCollection relations) in relationContainers) { diff --git a/Metadata-Query/MetadataQuery.cs b/Metadata-Query/MetadataQuery.cs index ca5c967..5438785 100644 --- a/Metadata-Query/MetadataQuery.cs +++ b/Metadata-Query/MetadataQuery.cs @@ -66,12 +66,12 @@ public class MetadataQuery const bool useCeilingAverage = true; const string directorySearchFilter = "*"; Dictionary>>? dictionary; - List<(string FileName, string Count, string TagGroup, string TagIdName, string Value)> collection = new(); + List<(string FileName, string Count, string TagGroup, string TagIdName, string Value)> collection = []; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; List filesCollection = Shared.Models.Stateless.Methods.IDirectory.GetFilesCollection(_PropertyConfiguration.RootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage); foreach (string[] files in filesCollection) { - if (!files.Any()) + if (files.Length == 0) continue; message = $"{ticks}) Reading files for <{files.FirstOrDefault()}> - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)"; progressBar = new(files.Length, message, options); @@ -105,14 +105,14 @@ public class MetadataQuery string key; string line; List? valuePairs; - Dictionary> keyValuePairs = new(); + Dictionary> keyValuePairs = []; foreach ((string fileName, string count, string tagGroup, string tagIdName, string value) in matches) { key = $"{tagGroup}\t{tagIdName}\t{value.Trim()}"; line = $"{tagGroup}\t{tagIdName}\t{value.Trim()}\t{count}\t{fileName}"; if (!keyValuePairs.TryGetValue(key, out valuePairs)) { - keyValuePairs.Add(key, new()); + keyValuePairs.Add(key, []); if (!keyValuePairs.TryGetValue(key, out valuePairs)) throw new Exception(); } @@ -136,7 +136,7 @@ public class MetadataQuery } } List<(string FileName, string Count, string TagGroup, string TagIdName, string Value)> matches = enumerable().ToList(); - if (matches.Any()) + if (matches.Count != 0) { matches.Sort(); StringBuilder stringBuilder = new(); diff --git a/Metadata-Query/Program.cs b/Metadata-Query/Program.cs index 211f98f..15fb765 100644 --- a/Metadata-Query/Program.cs +++ b/Metadata-Query/Program.cs @@ -60,7 +60,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Metadata/Models/A_Metadata.cs b/Metadata/Models/A_Metadata.cs new file mode 100644 index 0000000..d0e36a0 --- /dev/null +++ b/Metadata/Models/A_Metadata.cs @@ -0,0 +1,91 @@ +using MetadataExtractor; +using System.Collections.ObjectModel; +using System.Text.Json; +using View_by_Distance.Shared.Models; +using View_by_Distance.Shared.Models.Methods; +using View_by_Distance.Shared.Models.Properties; + +namespace View_by_Distance.Metadata.Models; + +public class A_Metadata : IMetadata +{ + + private readonly bool _PropertiesChangedForMetadata; + private readonly IPropertyConfiguration _PropertyConfiguration; + private readonly bool _ForceMetadataLastWriteTimeToCreationTime; + private readonly IReadOnlyDictionary _FileGroups; + + public A_Metadata(IPropertyConfiguration propertyConfiguration, bool forceMetadataLastWriteTimeToCreationTime, bool propertiesChangedForMetadata) + { + _PropertyConfiguration = propertyConfiguration; + _PropertiesChangedForMetadata = propertiesChangedForMetadata; + _ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime; + string bResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsFullGroupDirectory(_PropertyConfiguration, + nameof(A_Metadata), + string.Empty, + includeResizeGroup: false, + includeModel: false, + includePredictorModel: false); + _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, bResultsFullGroupDirectory, [propertyConfiguration.ResultSingleton]); + } + + public ReadOnlyDictionary GetMetadataCollection(string file) + { + Dictionary? results; + string fileName = Path.GetFileName(file); + string fileExtensionLowered = Path.GetExtension(file).ToLower(); + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file); + (_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, fileName); + FileInfo fileInfo = new(Path.Combine(_FileGroups[_PropertyConfiguration.ResultSingleton][directoryIndex], $"{fileNameWithoutExtension}{fileExtensionLowered}.json")); + if (_ForceMetadataLastWriteTimeToCreationTime && !fileInfo.Exists && File.Exists(Path.ChangeExtension(fileInfo.FullName, ".delete"))) + { + File.Move(Path.ChangeExtension(fileInfo.FullName, ".delete"), fileInfo.FullName); + fileInfo.Refresh(); + } + if (_ForceMetadataLastWriteTimeToCreationTime && fileInfo.Exists && fileInfo.LastWriteTime != fileInfo.CreationTime) + { + File.SetLastWriteTime(fileInfo.FullName, fileInfo.CreationTime); + fileInfo.Refresh(); + } + if (_PropertiesChangedForMetadata) + results = null; + else if (!fileInfo.Exists) + results = null; + else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old")) + throw new ArgumentException("must be a *.json file"); + else + { + string json = File.ReadAllText(fileInfo.FullName); + try + { + results = Stateless.Methods.Metadata.Deserialize(json); + if (results is null) + throw new Exception(); + } + catch (Exception) + { + results = null; + } + } + if (results is null || results.Count == 0) + { + IReadOnlyList directories = ImageMetadataReader.ReadMetadata(file); + results = Stateless.Methods.Metadata.Covert(directories); + string json = JsonSerializer.Serialize(results, DictionaryStringMetadataExtractorDirectorySourceGenerationContext.Default.DictionaryStringMetadataExtractorDirectory); + if (Shared.Models.Stateless.Methods.IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null) && _ForceMetadataLastWriteTimeToCreationTime) + { + File.SetLastWriteTime(fileInfo.FullName, fileInfo.CreationTime); + fileInfo.Refresh(); + } + } + return new(results); + } + + (DateTime?, DateTime?[]) IMetadata.GetDateTimes(FileHolder fileHolder, IReadOnlyList directories) + { + List results = []; + DateTime? result = null; + return new(result, results.ToArray()); + } + +} \ No newline at end of file diff --git a/Metadata/Models/B_Metadata.cs b/Metadata/Models/B_Metadata.cs index aa3c925..15dae25 100644 --- a/Metadata/Models/B_Metadata.cs +++ b/Metadata/Models/B_Metadata.cs @@ -28,7 +28,7 @@ public class B_Metadata : IMetadata _PropertyConfiguration = propertyConfiguration; _ForceMetadataLastWriteTimeToCreationTime = false; _WriteIndentedJsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true }; - _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, null, new string[] { propertyConfiguration.ResultSingleton }); + _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, null, [propertyConfiguration.ResultSingleton]); } public B_Metadata(IPropertyConfiguration propertyConfiguration, bool forceMetadataLastWriteTimeToCreationTime, bool propertiesChangedForMetadata, string bResultsFullGroupDirectory) @@ -37,7 +37,7 @@ public class B_Metadata : IMetadata _PropertiesChangedForMetadata = propertiesChangedForMetadata; _ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime; _WriteIndentedJsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true }; - _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, bResultsFullGroupDirectory, new string[] { propertyConfiguration.ResultSingleton }); + _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, bResultsFullGroupDirectory, [propertyConfiguration.ResultSingleton]); } public override string ToString() @@ -69,7 +69,7 @@ public class B_Metadata : IMetadata results = null; else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old")) throw new ArgumentException("must be a *.json file"); - else if (dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime) + else if (dateTimes.Count != 0 && dateTimes.Max() > fileInfo.LastWriteTime) results = null; else { @@ -92,7 +92,7 @@ public class B_Metadata : IMetadata IReadOnlyList directories = ImageMetadataReader.ReadMetadata(mappingFromItem.ImageFileHolder.FullName); results = Stateless.Methods.Metadata.Covert(directories); json = JsonSerializer.Serialize(results, DictionaryStringMetadataExtractorDirectorySourceGenerationContext.Default.DictionaryStringMetadataExtractorDirectory); - bool updateDateWhenMatches = dateTimes.Any() && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime; + bool updateDateWhenMatches = dateTimes.Count != 0 && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime; DateTime? dateTime = !updateDateWhenMatches ? null : dateTimes.Max(); if (Shared.Models.Stateless.Methods.IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches, compareBeforeWrite: true, updateToWhenMatches: dateTime)) { @@ -111,7 +111,7 @@ public class B_Metadata : IMetadata (DateTime?, DateTime?[]) IMetadata.GetDateTimes(FileHolder fileHolder, IReadOnlyList directories) { - List results = new(); + List results = []; DateTime? result = null; DateTime? dateTime; DateTime checkDateTime; diff --git a/Metadata/Models/Stateless/Methods/Metadata.cs b/Metadata/Models/Stateless/Methods/Metadata.cs index e44baa6..5b4a25d 100644 --- a/Metadata/Models/Stateless/Methods/Metadata.cs +++ b/Metadata/Models/Stateless/Methods/Metadata.cs @@ -11,13 +11,13 @@ internal partial class Metadata internal static Dictionary Covert(IReadOnlyList directories) { - Dictionary results = new(); + Dictionary results = []; MetadataExtractorTag metadataExtractorTag; MetadataExtractorDirectory? metadataExtractorDirectory; Dictionary metadataExtractorTags; foreach (MetadataExtractor.Directory directory in directories) { - metadataExtractorTags = new(); + metadataExtractorTags = []; if (results.TryGetValue(directory.Name, out metadataExtractorDirectory)) continue; foreach (Tag tag in directory.Tags) @@ -33,7 +33,7 @@ internal partial class Metadata internal static Dictionary Deserialize(string json) { - Dictionary results = new(); + Dictionary results = []; Record? record; MetadataExtractorDirectory metadataExtractorDirectory; Dictionary? keyValuePairs = JsonSerializer.Deserialize>(json); @@ -53,7 +53,7 @@ internal partial class Metadata internal static string? GetFaceEncoding(IReadOnlyList directories) { string? result; - List results = new(); + List results = []; const string comment = "Comment: "; foreach (MetadataExtractor.Directory directory in directories) { @@ -68,14 +68,14 @@ internal partial class Metadata results.Add(tag.Description); } } - result = results.Any() ? results[0][comment.Length..] : null; + result = results.Count != 0 ? results[0][comment.Length..] : null; return result; } internal static string? GetOutputResolution(IReadOnlyList directories) { string? result; - List results = new(); + List results = []; const string artist = "Artist: "; foreach (MetadataExtractor.Directory directory in directories) { @@ -90,7 +90,7 @@ internal partial class Metadata results.Add(tag.Description); } } - result = results.Any() ? results[0][artist.Length..] : null; + result = results.Count != 0 ? results[0][artist.Length..] : null; return result; } diff --git a/Mirror-Length/MirrorLength.cs b/Mirror-Length/MirrorLength.cs index ce7ccc5..5f6aa39 100644 --- a/Mirror-Length/MirrorLength.cs +++ b/Mirror-Length/MirrorLength.cs @@ -55,13 +55,13 @@ public class MirrorLength private static List<(string, string, DateTime, long)[]> GetToDoCollection(ProgressBar progressBar, List filesCollection) { - List<(string, string, DateTime, long)[]> results = new(); + List<(string, string, DateTime, long)[]> results = []; FileInfo fileInfo; List<(string, string, DateTime, long)> collection; foreach (string[] files in filesCollection) { progressBar.Tick(); - collection = new(); + collection = []; foreach (string file in files) { if (file.EndsWith("len")) @@ -71,7 +71,7 @@ public class MirrorLength continue; collection.Add((fileInfo.DirectoryName, file, fileInfo.LastWriteTime, fileInfo.Length)); } - if (!collection.Any()) + if (collection.Count == 0) continue; results.Add(collection.ToArray()); } @@ -85,7 +85,7 @@ public class MirrorLength ProgressBar progressBar; string subDirectoryName; string[] subDirectories; - List<(string, string, int)> results = new(); + List<(string, string, int)> results = []; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; string[] directories = Directory.GetDirectories(_PropertyConfiguration.RootDirectory, "*", SearchOption.TopDirectoryOnly); progressBar = new(directories.Length, message, options); @@ -112,7 +112,7 @@ public class MirrorLength string checkFile; string checkDirectory; string? firstDirectory; - List directories = new(); + List directories = []; foreach ((string Directory, string, DateTime, long)[] collection in results) { progressBar.Tick(); @@ -153,20 +153,20 @@ public class MirrorLength string text; string subKey; string checkFile; - Dictionary> directoryNameToCount = new(); - Dictionary> subDirectoryNameToCount = new(); + Dictionary> directoryNameToCount = []; + Dictionary> subDirectoryNameToCount = []; foreach ((string directoryName, string subDirectoryName, int count) in collection) { key = directoryName.Replace(today, string.Empty).Replace(")", "-"); subKey = subDirectoryName.Replace(today, string.Empty).Replace(") ", "-").Replace(" ", "-"); if (!directoryNameToCount.ContainsKey(key)) - directoryNameToCount.Add(key, new() { "---", $"title: {key}", $"desc: '{directoryName}'", "---", string.Empty }); + directoryNameToCount.Add(key, ["---", $"title: {key}", $"desc: '{directoryName}'", "---", string.Empty]); if (count == 0) directoryNameToCount[key].Add($"- <00000000> '{subDirectoryName}'"); else directoryNameToCount[key].Add($"- <{count:00000000}> [[{subKey}]]"); if (!subDirectoryNameToCount.ContainsKey(subKey)) - subDirectoryNameToCount.Add(subKey, new() { "---", $"title: {subKey}", $"desc: '{subDirectoryName}'", "---", string.Empty }); + subDirectoryNameToCount.Add(subKey, ["---", $"title: {subKey}", $"desc: '{subDirectoryName}'", "---", string.Empty]); if (count == 0) subDirectoryNameToCount[subKey].Add($"- <00000000> '{directoryName}'"); else @@ -194,15 +194,15 @@ public class MirrorLength List<(string, string, int)> collectionForMarkDown; bool inPlaceSave = _PropertyConfiguration.RootDirectory.First() == _AppSettings.Destination; if (!inPlaceSave) - collectionForMarkDown = new(); + collectionForMarkDown = []; else { string today = DateTime.Now.ToString("yyyy-MM-dd-"); collectionForMarkDown = GetToDoCollectionForMarkDown(message, today); - if (collectionForMarkDown.Any()) + if (collectionForMarkDown.Count != 0) Write(today, collectionForMarkDown); } - if (!collectionForMarkDown.Any()) + if (collectionForMarkDown.Count == 0) { ProgressBar progressBar; const bool useCeilingAverage = true; @@ -214,7 +214,7 @@ public class MirrorLength List<(string, string, DateTime, long)[]> collection = GetToDoCollection(progressBar, filesCollection); progressBar.Dispose(); progressBar = new(filesCollection.Count, message, options); - if (collection.Any()) + if (collection.Count != 0) Write(ticks, inPlaceSave, progressBar, collection); progressBar.Dispose(); } diff --git a/Mirror-Length/Program.cs b/Mirror-Length/Program.cs index 25068b7..867206f 100644 --- a/Mirror-Length/Program.cs +++ b/Mirror-Length/Program.cs @@ -60,7 +60,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Move-By-Id/MoveById.cs b/Move-By-Id/MoveById.cs index d053202..45defb9 100644 --- a/Move-By-Id/MoveById.cs +++ b/Move-By-Id/MoveById.cs @@ -45,7 +45,7 @@ public class MoveById MatchNginx[]? matchNginxCollection = System.Text.Json.JsonSerializer.Deserialize(json); if (matchNginxCollection is null) throw new NullReferenceException(nameof(matchNginxCollection)); - if (matchNginxCollection.Any()) + if (matchNginxCollection.Length != 0) { List lines = MoveFilesByIdInDirectories(options, matchNginxCollection); File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); @@ -70,7 +70,7 @@ public class MoveById private static List GetAllFiles(MatchNginx[] matchNginxCollection) { - List allFiles = new(); + List allFiles = []; string[] files; string directoryName; ReadOnlySpan span; @@ -101,7 +101,7 @@ public class MoveById private List GetToDoCollection(ProgressBar progressBar, List allFiles) { - List results = new(); + List results = []; int? id; string? message; string[] matches; @@ -136,7 +136,7 @@ public class MoveById if (id is null) continue; matches = (from l in allFiles where l.Contains($"{id}{fileHolder.ExtensionLowered}") select l).ToArray(); - if (!matches.Any()) + if (matches.Length == 0) continue; results.Add(fileHolder.FullName); results.AddRange(matches); @@ -156,16 +156,16 @@ public class MoveById private List MoveFilesByIdInDirectories(ProgressBarOptions options, MatchNginx[] matchNginxCollection) { - List results = new(); + List results = []; string moveTo; string? directory; string message = "Moving allFiles"; - List distinctDirectories = new(); + List distinctDirectories = []; List allFiles = GetAllFiles(matchNginxCollection); ProgressBar progressBar = new(allFiles.Count, message, options); List toDoCollection = GetToDoCollection(progressBar, allFiles); progressBar.Dispose(); - List<(string, string)> moveCollection = new(); + List<(string, string)> moveCollection = []; foreach (string file in toDoCollection) { moveTo = $"{_AppSettings.MoveTo}{file[1..]}"; diff --git a/Move-By-Id/Program.cs b/Move-By-Id/Program.cs index e18c983..0b500de 100644 --- a/Move-By-Id/Program.cs +++ b/Move-By-Id/Program.cs @@ -58,7 +58,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Offset-Date-Time-Original/OffsetDateTimeOriginal.cs b/Offset-Date-Time-Original/OffsetDateTimeOriginal.cs index b3291cb..bdc55aa 100644 --- a/Offset-Date-Time-Original/OffsetDateTimeOriginal.cs +++ b/Offset-Date-Time-Original/OffsetDateTimeOriginal.cs @@ -47,7 +47,7 @@ public class OffsetDateTimeOriginal logger?.LogInformation(propertyConfiguration.RootDirectory); Verify(); List lines = OffsetDateTimeOriginalFilesInDirectories(logger); - if (lines.Any()) + if (lines.Count != 0) File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); } @@ -71,7 +71,7 @@ public class OffsetDateTimeOriginal private List GetRecords(ASCIIEncoding asciiEncoding, string checkDirectory, DateTime minimumDateTime, DateTime maximumDateTime, long ticks) { - List results = new(); + List results = []; DateTime dateTime; int? id; string? message; @@ -125,7 +125,7 @@ public class OffsetDateTimeOriginal ticks++; } List records = GetRecords(asciiEncoding, checkDirectory, minimumDateTime, maximumDateTime, ticks); - ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty(), null) ?? throw new Exception(); + ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, [], null) ?? throw new Exception(); string? message = nameof(OffsetDateTimeOriginal); ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; ProgressBar progressBar = new(records.Count, message, options); @@ -177,8 +177,8 @@ public class OffsetDateTimeOriginal { string format = "yyyy-MM-dd"; string[] maximumDirectory = Directory.GetDirectories(minimumDirectory.First(), "*", SearchOption.TopDirectoryOnly); - string[] badFiles = !Directory.Exists(badDirectory) ? Array.Empty() : Directory.GetFiles(badDirectory, "*", SearchOption.TopDirectoryOnly); - string[] targetFiles = !Directory.Exists(targetDirectory) ? Array.Empty() : Directory.GetFiles(targetDirectory, "*", SearchOption.TopDirectoryOnly); + string[] badFiles = !Directory.Exists(badDirectory) ? [] : Directory.GetFiles(badDirectory, "*", SearchOption.TopDirectoryOnly); + string[] targetFiles = !Directory.Exists(targetDirectory) ? [] : Directory.GetFiles(targetDirectory, "*", SearchOption.TopDirectoryOnly); if (badFiles.Length != 1 || targetFiles.Length != 1 || maximumDirectory.Length != 1) logger?.LogError("bad file(s) or target file(s) or maximum directory doesn't equal 1!"); else @@ -204,12 +204,12 @@ public class OffsetDateTimeOriginal (badDateTimeOriginal, badDateTimes, badId, badMessage) = Property.Models.Stateless.IProperty.Get(_PropertyConfiguration.PopulatePropertyId, badFileHolder, badIsIgnoreExtension, badIsValidImageFormatExtension, asciiEncoding); if (badMessage is not null) throw new Exception(badMessage); - if (!badDateTimes.Any() || badId is null) + if (badDateTimes.Length == 0 || badId is null) throw new Exception(badMessage); (targetDateTimeOriginal, targetDateTimes, targetId, targetMessage) = Property.Models.Stateless.IProperty.Get(_PropertyConfiguration.PopulatePropertyId, targetFileHolder, targetIsIgnoreExtension, targetIsValidImageFormatExtension, asciiEncoding); if (targetMessage is not null) throw new Exception(targetMessage); - if (!targetDateTimes.Any() || targetId is null) + if (targetDateTimes.Length == 0 || targetId is null) throw new Exception(targetMessage); if (badDateTimeOriginal is null || targetDateTimeOriginal is null) logger?.LogError("Date is null!"); @@ -226,7 +226,7 @@ public class OffsetDateTimeOriginal private List OffsetDateTimeOriginalFilesInDirectories(ILogger? logger) { - List results = new(); + List results = []; DateFix(logger, _PropertyConfiguration.RootDirectory); return results; } diff --git a/Offset-Date-Time-Original/Program.cs b/Offset-Date-Time-Original/Program.cs index ca30c5d..f0aec73 100644 --- a/Offset-Date-Time-Original/Program.cs +++ b/Offset-Date-Time-Original/Program.cs @@ -60,7 +60,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/PhotoPrism/Models/_F_PhotoPrism.cs b/PhotoPrism/Models/_F_PhotoPrism.cs index 16695e0..b821be4 100644 --- a/PhotoPrism/Models/_F_PhotoPrism.cs +++ b/PhotoPrism/Models/_F_PhotoPrism.cs @@ -14,18 +14,18 @@ public class F_PhotoPrism { JsonProperty[] results; if (!File.Exists(fileName)) - results = Array.Empty(); + results = []; else { string json = File.ReadAllText(fileName); JsonElement[]? jsonElements = JsonSerializer.Deserialize(json); if (jsonElements is null || jsonElements.Length == 0) - results = Array.Empty(); + results = []; else { JsonElement jsonElement = jsonElements.Last(); if (jsonElement.ValueKind != JsonValueKind.Object) - results = Array.Empty(); + results = []; else results = jsonElement.EnumerateObject().ToArray(); } @@ -47,7 +47,7 @@ public class F_PhotoPrism private static Dictionary> GetFileUIdToMarkers(string fPhotoPrismSingletonDirectory) { - Dictionary> results = new(); + Dictionary> results = []; string fileUid; Marker[]? markers = GetMarkers(fPhotoPrismSingletonDirectory); if (markers is null) @@ -56,7 +56,7 @@ public class F_PhotoPrism { fileUid = HexStringToString(marker.FileUid); if (!results.ContainsKey(fileUid)) - results.Add(fileUid, new()); + results.Add(fileUid, []); results[fileUid].Add(Marker.Map(marker)); } return results; @@ -84,7 +84,7 @@ public class F_PhotoPrism results = null; else { - results = new(); + results = []; DatabaseFile[]? databaseFiles = JsonSerializer.Deserialize(jsonProperties.Last().Value); if (databaseFiles is null) results = null; @@ -105,7 +105,7 @@ public class F_PhotoPrism if (results is null) { int id; - results = new(); + results = []; string fileNameWithoutExtension; List? makers; MappingFromPhotoPrism mappingFromPhotoPrism; @@ -124,12 +124,12 @@ public class F_PhotoPrism if (!results.TryGetValue(id, out mappingFromPhotoPrismCollection)) { - results.Add(id, new()); + results.Add(id, []); if (!results.TryGetValue(id, out mappingFromPhotoPrismCollection)) throw new Exception(); } if (!fileUIdToMarkers.TryGetValue(databaseFile.FileUid, out makers)) - mappingFromPhotoPrism = new(databaseFile, new()); + mappingFromPhotoPrism = new(databaseFile, []); else mappingFromPhotoPrism = new(databaseFile, makers); mappingFromPhotoPrismCollection.Add(mappingFromPhotoPrism); @@ -179,7 +179,7 @@ public class F_PhotoPrism int width, height; int? wholePercentages; RectangleF? prismRectangle; - List subjects = new(); + List subjects = []; DateTime dateTime = new(ticks); int dlibLocationWholePercentages; StringBuilder stringBuilder = new(); @@ -188,7 +188,7 @@ public class F_PhotoPrism float rectangleIntersectMinimum = rectangleIntersectMinimums.Min(); ReadOnlyDictionary>? wholePercentagesToPersonContainers; (MappingFromPhotoPrism MappingFromPhotoPrism, Shared.Models.Marker Marker, float Percent)[] sortedCollection; - List<(MappingFromPhotoPrism MappingFromPhotoPrism, Shared.Models.Marker Marker, float Percent)> collection = new(); + List<(MappingFromPhotoPrism MappingFromPhotoPrism, Shared.Models.Marker Marker, float Percent)> collection = []; foreach (Face face in distinctFilteredFaces) { collection.Clear(); diff --git a/PrepareForOld/Program.cs b/PrepareForOld/Program.cs index cbaf3e5..a29fa5e 100644 --- a/PrepareForOld/Program.cs +++ b/PrepareForOld/Program.cs @@ -58,7 +58,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Property/Models/A_Property.cs b/Property/Models/A_Property.cs index 5ff85f2..46b5d8c 100644 --- a/Property/Models/A_Property.cs +++ b/Property/Models/A_Property.cs @@ -26,14 +26,14 @@ public class A_Property public A_Property(int maxDegreeOfParallelism, Configuration propertyConfiguration, string outputExtension, bool reverse, string aResultsFullGroupDirectory) { Reverse = reverse; - _ExceptionsDirectories = new(); + _ExceptionsDirectories = []; _OutputExtension = outputExtension; _ASCIIEncoding = new ASCIIEncoding(); _Configuration = propertyConfiguration; - _AngleBracketCollection = new List(); + _AngleBracketCollection = []; _PropertyConfiguration = propertyConfiguration; _MaxDegreeOfParallelism = maxDegreeOfParallelism; - _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, aResultsFullGroupDirectory, new string[] { propertyConfiguration.ResultSingleton }); + _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, aResultsFullGroupDirectory, [propertyConfiguration.ResultSingleton]); } public override string ToString() @@ -49,7 +49,7 @@ public class A_Property FileInfo fileInfo; string? json = null; bool hasWrongYearProperty = false; - string[] changesFrom = Array.Empty(); + string[] changesFrom = []; string angleBracket = _AngleBracketCollection[0]; bool populateId = _Configuration.PopulatePropertyId; if (!item.IsUniqueFileName) @@ -76,7 +76,7 @@ public class A_Property result = null; else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old")) throw new ArgumentException("must be a *.json file"); - else if (dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime) + else if (dateTimes.Count != 0 && dateTimes.Max() > fileInfo.LastWriteTime) result = null; else { @@ -181,7 +181,7 @@ public class A_Property private void SavePropertyParallelForWork(Shared.Models.Methods.IMetadata metadata, string sourceDirectory, List> sourceDirectoryFileTuples, List> sourceDirectoryChanges, Item item) { Shared.Models.Property property; - List parseExceptions = new(); + List parseExceptions = []; bool isIgnoreExtension = item.IsValidImageFormatExtension && _PropertyConfiguration.IgnoreExtensions.Contains(item.ImageFileHolder.ExtensionLowered); string filteredSourceDirectoryFileExtensionLowered = Path.Combine(sourceDirectory, $"{item.ImageFileHolder.NameWithoutExtension}{item.ImageFileHolder.ExtensionLowered}"); if (item.IsValidImageFormatExtension && item.ImageFileHolder.FullName.Length == filteredSourceDirectoryFileExtensionLowered.Length && item.ImageFileHolder.FullName != filteredSourceDirectoryFileExtensionLowered) @@ -210,7 +210,7 @@ public class A_Property private void SavePropertyParallelWork(int maxDegreeOfParallelism, Shared.Models.Methods.IMetadata metadata, List exceptions, List> sourceDirectoryChanges, Container container, List items, string message) { - List> sourceDirectoryFileTuples = new(); + List> sourceDirectoryFileTuples = []; ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; using ProgressBar progressBar = new(items.Count, message, options); @@ -222,7 +222,7 @@ public class A_Property DateTime dateTime = DateTime.Now; List> collection; SavePropertyParallelForWork(metadata, container.SourceDirectory, sourceDirectoryChanges, sourceDirectoryFileTuples, items[i]); - if (i == 0 || sourceDirectoryChanges.Any()) + if (i == 0 || sourceDirectoryChanges.Count != 0) progressBar.Tick(); lock (sourceDirectoryFileTuples) collection = (from l in sourceDirectoryFileTuples where l.Item2 > dateTime select l).ToList(); @@ -244,18 +244,18 @@ public class A_Property int totalSeconds; Container container; bool anyNullOrNoIsUniqueFileName; - List exceptions = new(); + List exceptions = []; int containersLength = containers.Length; const string outputResolution = "Original"; - List> sourceDirectoryChanges = new(); + List> sourceDirectoryChanges = []; string propertyRoot = IResult.GetResultsGroupDirectory(_PropertyConfiguration, nameof(A_Property)); for (int i = 0; i < containers.Length; i++) { container = containers[i]; - if (!container.Items.Any()) + if (container.Items.Count == 0) continue; sourceDirectoryChanges.Clear(); - if (!container.Items.Any()) + if (container.Items.Count == 0) continue; anyNullOrNoIsUniqueFileName = container.Items.Any(l => !l.IsUniqueFileName); SetAngleBracketCollection(container.SourceDirectory, anyNullOrNoIsUniqueFileName); @@ -273,7 +273,7 @@ public class A_Property public Shared.Models.Property GetProperty(Shared.Models.Methods.IMetadata metadata, Item item, List> sourceDirectoryFileTuples, List parseExceptions) { Shared.Models.Property result; - bool angleBracketCollectionAny = _AngleBracketCollection.Any(); + bool angleBracketCollectionAny = _AngleBracketCollection.Count != 0; if (!angleBracketCollectionAny) { if (item.ImageFileHolder.DirectoryName is null) diff --git a/Property/Models/Binder/Configuration.cs b/Property/Models/Binder/Configuration.cs index b5fbbc2..77db900 100644 --- a/Property/Models/Binder/Configuration.cs +++ b/Property/Models/Binder/Configuration.cs @@ -81,7 +81,7 @@ public class Configuration configuration.PopulatePropertyId.Value, configuration.PredictorModelName, configuration.PropertiesChangedForProperty.Value, - configuration.PropertyContentCollectionFiles ?? Array.Empty(), + configuration.PropertyContentCollectionFiles ?? [], configuration.ResultAllInOne, configuration.ResultAllInOneSubdirectoryLength.Value, configuration.ResultCollection, @@ -89,7 +89,7 @@ public class Configuration configuration.ResultSingleton, Path.GetFullPath(configuration.RootDirectory), configuration.ValidImageFormatExtensions, - configuration.VerifyToSeason ?? Array.Empty()); + configuration.VerifyToSeason ?? []); return result; } diff --git a/Property/Models/Stateless/Property.cs b/Property/Models/Stateless/Property.cs index 491c003..fdee708 100644 --- a/Property/Models/Stateless/Property.cs +++ b/Property/Models/Stateless/Property.cs @@ -12,12 +12,15 @@ using View_by_Distance.Shared.Models.Stateless; namespace View_by_Distance.Property.Models.Stateless; -internal class Property +internal partial class Property { + [GeneratedRegex(@"\D+")] + private static partial Regex Digit(); + private static List GetDateTimes(DateTime dateTimeFromName, DateTime?[] dateTimes) { - List results = new() { dateTimeFromName }; + List results = [dateTimeFromName]; foreach (DateTime? dateTime in dateTimes) { if (dateTime is null) @@ -29,7 +32,7 @@ internal class Property private static List GetDateTimes(DateTime?[] dateTimes, DateTime?[] metadataDateTimes) { - List results = new(); + List results = []; foreach (DateTime? dateTime in metadataDateTimes) { if (dateTime is null || results.Contains(dateTime.Value)) @@ -47,8 +50,8 @@ internal class Property private static List GetDateTimes(FileHolder fileHolder, DateTime?[] dateTimes) { - List results = new(); - string[] digits = Regex.Split(fileHolder.FullName, @"\D+"); + List results = []; + string[] digits = Digit().Split(fileHolder.FullName); foreach (string digit in digits) { if (digit.Length != 4 || digit[..2] is not "19" and not "20" || !int.TryParse(digit, out int year)) @@ -81,23 +84,23 @@ internal class Property string fullFormat; StringBuilder value = new(); const string ticksExample = "##################"; - string[][] dateFormats = new string[][] - { - new string[] { string.Empty, "yyyyMMdd_HHmmss", string.Empty }, - new string[] { string.Empty, "yyyyMMddHHmmssfff", string.Empty }, - new string[] { string.Empty, "yyyyMMdd_", ticksExample }, - new string[] { string.Empty, "yyyy-MM-dd_", ticksExample }, - new string[] { string.Empty, "yyyy-MM-dd.", ticksExample }, - new string[] { string.Empty, "yyyy-MM-dd.", $"{ticksExample}.{fileHolder.Length}" }, - new string[] { string.Empty, "yyyy-MM-dd HH.mm.ss", string.Empty }, - new string[] { string.Empty, "yyyyMMdd_HHmmss", "_LLS" }, - new string[] { string.Empty, "yyyyMMdd_HHmmss", "_HDR" }, - new string[] { "WIN_", "yyyyMMdd_HH_mm_ss", "_Pro" }, - new string[] { "IMG_", "yyyyMMdd_HHmmss", string.Empty }, - new string[] { "IMG#####-", "yyyyMMdd-HHmm", string.Empty }, - new string[] { "CameraZOOM-", "yyyyMMddHHmmss", string.Empty }, - new string[] { "VideoCapture_", "yyyyMMdd-HHmmss ", string.Empty } - }; + string[][] dateFormats = + [ + [string.Empty, "yyyyMMdd_HHmmss", string.Empty], + [string.Empty, "yyyyMMddHHmmssfff", string.Empty], + [string.Empty, "yyyyMMdd_", ticksExample], + [string.Empty, "yyyy-MM-dd_", ticksExample], + [string.Empty, "yyyy-MM-dd.", ticksExample], + [string.Empty, "yyyy-MM-dd.", $"{ticksExample}.{fileHolder.Length}"], + [string.Empty, "yyyy-MM-dd HH.mm.ss", string.Empty], + [string.Empty, "yyyyMMdd_HHmmss", "_LLS"], + [string.Empty, "yyyyMMdd_HHmmss", "_HDR"], + ["WIN_", "yyyyMMdd_HH_mm_ss", "_Pro"], + ["IMG_", "yyyyMMdd_HHmmss", string.Empty], + ["IMG#####-", "yyyyMMdd-HHmm", string.Empty], + ["CameraZOOM-", "yyyyMMddHHmmss", string.Empty], + ["VideoCapture_", "yyyyMMdd-HHmmss ", string.Empty] + ]; foreach (string[] dateFormat in dateFormats) { _ = value.Clear(); @@ -126,7 +129,7 @@ internal class Property private static List GetDateTimes(DateTime?[] metadataDateTimes) { - List results = new(); + List results = []; foreach (DateTime? dateTime in metadataDateTimes) { if (dateTime is null || results.Contains(dateTime.Value)) @@ -236,7 +239,7 @@ internal class Property } catch (Exception) { - dateTimesByLogic = new(); + dateTimesByLogic = []; message = string.Concat(new StackFrame().GetMethod()?.Name, " <", fileHolder.FullName, ">"); } } @@ -338,11 +341,11 @@ internal class Property } } message = null; - dateTimes = new DateTime?[] { fileHolder.LastWriteTime, fileHolder.CreationTime, dateTime, dateTimeDigitized, dateTimeOriginal, gpsDateStamp }; + dateTimes = [fileHolder.LastWriteTime, fileHolder.CreationTime, dateTime, dateTimeDigitized, dateTimeOriginal, gpsDateStamp]; } catch (Exception) { - dateTimes = Array.Empty(); + dateTimes = []; message = string.Concat(new StackFrame().GetMethod()?.Name, " <", fileHolder.FullName, ">"); } if (metadata is not null && dateTimeOriginal is null) @@ -362,7 +365,7 @@ internal class Property (dateTimeOriginalByLogic, dateTimesByLogic) = (dateTimeOriginal, GetDateTimes(dateTimeFromName.Value, dateTimes)); } else - (message, dateTimeOriginalByLogic, dateTimesByLogic) = (null, null, new()); + (message, dateTimeOriginalByLogic, dateTimesByLogic) = (null, null, []); if (fileHolder.Length is null) fileLength = 0; else @@ -389,7 +392,7 @@ internal class Property DateTime[] dateTimes; Shared.Models.Property? property = null; if (isIgnoreExtension || !isValidImageFormatExtension) - (message, dateTimes, property) = (null, Array.Empty(), null); + (message, dateTimes, property) = (null, [], null); else (message, dateTimes, property) = GetProperty(populateId, metadata, fileHolder, property, isIgnoreExtension, isValidImageFormatExtension, id, asciiEncoding); return new(property?.DateTimeOriginal, dateTimes, property?.Id, message); diff --git a/Property/Models/Stateless/Result.cs b/Property/Models/Stateless/Result.cs index 6ec3516..48c57c1 100644 --- a/Property/Models/Stateless/Result.cs +++ b/Property/Models/Stateless/Result.cs @@ -105,7 +105,7 @@ internal class Result internal static List GetDirectoryInfoCollection(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) { - List results = new(); + List results = []; string sourceDirectorySegment = GetRelativePath(propertyConfiguration, sourceDirectory); string result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment); if (!string.IsNullOrEmpty(contentDescription)) diff --git a/Rename/Models/Binder/Configuration.cs b/Rename/Models/Binder/Configuration.cs index 4566570..ab4030a 100644 --- a/Rename/Models/Binder/Configuration.cs +++ b/Rename/Models/Binder/Configuration.cs @@ -7,13 +7,10 @@ namespace View_by_Distance.Rename.Models.Binder; public class Configuration { -#nullable disable - - public string[] IgnoreExtensions { get; set; } - public Property.Models.Configuration PropertyConfiguration { get; set; } - public string PersonBirthdayFormat { get; set; } - -#nullable restore + public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; } + public string[]? IgnoreExtensions { get; set; } + public string? PersonBirthdayFormat { get; set; } + public bool? PropertiesChangedForMetadata { get; set; } public override string ToString() { @@ -21,16 +18,19 @@ public class Configuration return result; } - private static Models.Configuration Get(Configuration? configuration) + private static Models.Configuration Get(Configuration? configuration, Property.Models.Configuration propertyConfiguration) { Models.Configuration result; if (configuration is null) throw new NullReferenceException(nameof(configuration)); + if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime)); if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); if (configuration.PersonBirthdayFormat is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat)); - result = new( - configuration.IgnoreExtensions, - configuration.PersonBirthdayFormat, - configuration.PropertyConfiguration); + if (configuration.PropertiesChangedForMetadata is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata)); + result = new(propertyConfiguration, + configuration.ForceMetadataLastWriteTimeToCreationTime.Value, + configuration.IgnoreExtensions, + configuration.PersonBirthdayFormat, + configuration.PropertiesChangedForMetadata.Value); return result; } @@ -47,7 +47,7 @@ public class Configuration IConfigurationSection configurationSection = configurationRoot.GetSection(section); configuration = configurationSection.Get(); } - result = Get(configuration); + result = Get(configuration, propertyConfiguration); return result; } diff --git a/Rename/Models/Configuration.cs b/Rename/Models/Configuration.cs index 1ea6068..f51714d 100644 --- a/Rename/Models/Configuration.cs +++ b/Rename/Models/Configuration.cs @@ -1,6 +1,8 @@ namespace View_by_Distance.Rename.Models; -public record Configuration(string[] IgnoreExtensions, +public record Configuration(Property.Models.Configuration PropertyConfiguration, + bool ForceMetadataLastWriteTimeToCreationTime, + string[] IgnoreExtensions, string PersonBirthdayFormat, - Property.Models.Configuration PropertyConfiguration); \ No newline at end of file + bool PropertiesChangedForMetadata); \ No newline at end of file diff --git a/Rename/Program.cs b/Rename/Program.cs index 91ed222..949fd22 100644 --- a/Rename/Program.cs +++ b/Rename/Program.cs @@ -58,7 +58,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Rename/Rename.cs b/Rename/Rename.cs index 112aa95..34dffbf 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -3,6 +3,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Phares.Shared; using ShellProgressBar; +using System.Collections.ObjectModel; using System.Text; using View_by_Distance.Metadata.Models; using View_by_Distance.Rename.Models; @@ -15,6 +16,9 @@ namespace View_by_Distance.Rename; public class Rename { + private record Result(string File, + ReadOnlyDictionary KeyValuePairs); + private record Record(int Index, bool IsIgnoreExtension, bool IsValidImageFormatExtension, @@ -45,11 +49,17 @@ public class Rename Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); _PropertyConfiguration = propertyConfiguration; _Configuration = configuration; - logger?.LogInformation(propertyConfiguration.RootDirectory); + logger?.LogInformation("{RootDirectory}", propertyConfiguration.RootDirectory); Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false); Verify(); + List linesB = IteratedRenameFilesInDirectories(logger); + if (linesB.Count != 0) + { + File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", linesB); + _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory); + } List lines = RenameFilesInDirectories(logger); - if (lines.Any()) + if (lines.Count != 0) { File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory); @@ -72,27 +82,46 @@ public class Rename throw new NullReferenceException(nameof(_PropertyConfiguration)); } + private static Action GetResultCollection(A_Metadata metadata, List results, Action tick) + { + tick.Invoke(); + return file => results.Add(new(file, metadata.GetMetadataCollection(file))); + } + + private List IteratedRenameFilesInDirectories(ILogger? logger) + { + List old = []; + List results = []; + string rootDirectoryFullPath = Path.GetFullPath(_PropertyConfiguration.RootDirectory); + ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism }; + IEnumerable files = Directory.EnumerateFiles(rootDirectoryFullPath, "*", SearchOption.AllDirectories); + A_Metadata metadata = new(_PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata); + ProgressBar progressBar = new(short.MaxValue, "EnumerateFiles load", new ProgressBarOptions() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }); + files.AsParallel().ForAll(GetResultCollection(metadata, results, () => progressBar.Tick())); + return old; + } + private List RenameFilesInDirectories(ILogger? logger) { - List results = new(); + List results = []; string message; bool nefPresentCheck; bool nefPresent = false; ProgressBar progressBar; - List records = new(); + List records = []; const string fileSearchFilter = "*"; const bool useCeilingAverage = false; const string directorySearchFilter = "*"; - List distinctDirectories = new(); + List distinctDirectories = []; B_Metadata metadata = new(_PropertyConfiguration); - List<(FileHolder, string, string)> toDoCollection = new(); - List<(FileHolder, string)> verifiedToDoCollection = new(); + List<(FileHolder, string, string)> toDoCollection = []; + List<(FileHolder, string)> verifiedToDoCollection = []; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; List filesCollection = IDirectory.GetFilesCollection(_PropertyConfiguration.RootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage); int count = filesCollection.Select(l => l.Length).Sum(); foreach (string[] files in filesCollection) { - if (!files.Any()) + if (files.Length == 0) continue; // foreach (string files[i] in files) // { @@ -124,7 +153,7 @@ public class Rename } progressBar.Dispose(); } - if (records.Any()) + if (records.Count != 0) { int intMinValueLength = int.MinValue.ToString().Length; foreach (Record record in records) @@ -158,7 +187,7 @@ public class Rename File.WriteAllText($"{to}.paddedId", $"{to}{Environment.NewLine}{fileHolder.FullName}"); } ConsoleKey? consoleKey = null; - logger?.LogInformation($"Ready to Move {verifiedToDoCollection.Count} files[i](s)?"); + logger?.LogInformation("Ready to Move {verifiedToDoCollection.Count} files[i](s)?", verifiedToDoCollection.Count); for (int y = 0; y < int.MaxValue; y++) { logger?.LogInformation("Press \"Y\" key to move files[i](s), \"N\" key to log files[i](s) or close console to not move files"); @@ -182,12 +211,12 @@ public class Rename private static List<(FileHolder, string, string)> GetRenameUndoToDoCollection(ProgressBar progressBar, string[] files) { - List<(FileHolder, string, string)> results = new(); + List<(FileHolder, string, string)> results = []; string[] lines; string fileName; string? directory; FileHolder fileHolder; - List distinct = new(); + List distinct = []; foreach (string file in files) { progressBar.Tick(); @@ -211,7 +240,7 @@ public class Rename private List GetRecords(B_Metadata metadata, int offset, ProgressBar progressBar, string[] files) { - List results = new(); + List results = []; int? id; string? message; string? directory; @@ -259,7 +288,7 @@ public class Rename .ExecuteAsync(); result.Task.Wait(); ffmpegFiles = Directory.GetFiles(fileHolder.DirectoryName, $"{fileHolder.Name}-*.jpg", SearchOption.TopDirectoryOnly); - if (!ffmpegFiles.Any()) + if (ffmpegFiles.Length == 0) continue; fileHolder = new(ffmpegFiles.First()); if (!fileHolder.Name.EndsWith("-0001.jpg")) @@ -280,14 +309,14 @@ public class Rename } if (message is not null) throw new Exception(message); - results.Add(new(i + offset, isIgnoreExtension, isValidImageFormatExtension, new() { fileHolder }, ffmpegFiles is null, dateTimeOriginal, dateTimes, id)); + results.Add(new(i + offset, isIgnoreExtension, isValidImageFormatExtension, [fileHolder], ffmpegFiles is null, dateTimeOriginal, dateTimes, id)); } return results; } private List<(FileHolder, string, string)> GetToDoCollection(ProgressBar progressBar, bool nefPresent, List records, int intMinValueLength) { - List<(FileHolder, string, string)> results = new(); + List<(FileHolder, string, string)> results = []; int season; string paddedId; string checkFile; @@ -303,7 +332,7 @@ public class Rename string checkFileExtension; DateTime? dateTimeFromName; const string jpeg = ".jpeg"; - List distinct = new(); + List distinct = []; string[] directoryNameSegments; DateTime? dateTimeOriginalByLogic; foreach (Record record in records) @@ -316,7 +345,7 @@ public class Rename continue; if (string.IsNullOrEmpty(fileHolder.DirectoryName)) continue; - dateTimeFromName = !record.DateTimes.Any() ? null : record.DateTimes.First(); + dateTimeFromName = record.DateTimes.Length == 0 ? null : record.DateTimes.First(); if (fileHolder.ExtensionLowered == jpeg) { if (!record.IsIgnoreExtension && record.IsValidImageFormatExtension) @@ -431,7 +460,7 @@ public class Rename private static List Move(ProgressBar progressBar, List<(FileHolder, string)> verifiedToDoCollection) { - List results = new(); + List results = []; foreach ((FileHolder fileHolder, string to) in verifiedToDoCollection) { progressBar.Tick(); diff --git a/Resize/Models/_C_Resize.cs b/Resize/Models/_C_Resize.cs index bd35bec..aab6da0 100644 --- a/Resize/Models/_C_Resize.cs +++ b/Resize/Models/_C_Resize.cs @@ -44,7 +44,7 @@ public class C_Resize public C_Resize(IPropertyConfiguration propertyConfiguration, bool forceResizeLastWriteTimeToCreationTime, bool overrideForResizeImages, bool propertiesChangedForResize, string[] validResolutions, ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) { - _FileGroups = new(); + _FileGroups = []; _Original = "Original"; _TempResolutionWidth = 3; _TempResolutionHeight = 4; @@ -56,13 +56,13 @@ public class C_Resize _OutputResolutionOrientationIndex = 2; _EncoderParameters = encoderParameters; _FileNameExtension = filenameExtension; - AngleBracketCollection = new List(); + AngleBracketCollection = []; _PropertyConfiguration = propertyConfiguration; _OverrideForResizeImages = overrideForResizeImages; _PropertiesChangedForResize = propertiesChangedForResize; _ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime; _WriteIndentedJsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true }; - ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty(), null) ?? throw new Exception(); + ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, [], null) ?? throw new Exception(); _ConstructorInfo = constructorInfo; } @@ -75,7 +75,7 @@ public class C_Resize public void Update(string cResultsFullGroupDirectory) { _FileGroups.Clear(); - Dictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, cResultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultSingleton }); + Dictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, cResultsFullGroupDirectory, [_PropertyConfiguration.ResultSingleton]); foreach (KeyValuePair keyValuePair in keyValuePairs) _FileGroups.Add(keyValuePair.Key, keyValuePair.Value); } @@ -323,7 +323,7 @@ public class C_Resize int outputResolutionHeight = resize[_OutputResolutionHeightIndex]; int outputResolutionOrientation = resize[_OutputResolutionOrientationIndex]; int[] originalCollection = outputResolutionToResize[_Original]; - string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize) }; + string[] changesFrom = [nameof(A_Property), nameof(B_Metadata), nameof(C_Resize)]; List dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList(); if (_OverrideForResizeImages) check = true; @@ -331,7 +331,7 @@ public class C_Resize check = true; if (outputResolutionWidth == originalCollection[_OutputResolutionWidthIndex] && outputResolutionHeight == originalCollection[_OutputResolutionHeightIndex] && outputResolutionOrientation == originalCollection[_OutputResolutionOrientationIndex]) { - if (!check && dateTimes.Any() && dateTimes.Max() > fileInfo.CreationTime.AddDays(1)) + if (!check && dateTimes.Count != 0 && dateTimes.Max() > fileInfo.CreationTime.AddDays(1)) check = true; if (check) { @@ -344,7 +344,7 @@ public class C_Resize } else { - if (!check && dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime) + if (!check && dateTimes.Count != 0 && dateTimes.Max() > fileInfo.LastWriteTime) check = true; if (check) { @@ -357,7 +357,7 @@ public class C_Resize private static int[] GetCollection(string outputResolution) { - List results = new(); + List results = []; string[] segments = outputResolution.Split('x'); results.Add(int.Parse(segments[0])); results.Add(int.Parse(segments[1])); @@ -366,7 +366,7 @@ public class C_Resize private Dictionary GetImageResizes(Shared.Models.Property property) { - Dictionary results = new(); + Dictionary results = []; int[] desired; int checkWidth; int checkHeight; @@ -378,7 +378,7 @@ public class C_Resize checkWidth = property.Width.Value; checkHeight = property.Height.Value; if (!_ValidResolutions.Contains(_Original)) - results.Add(_Original, new int[] { checkWidth, checkHeight, orientation }); + results.Add(_Original, [checkWidth, checkHeight, orientation]); foreach (string validResolution in _ValidResolutions) { if (validResolution == _Original) @@ -393,22 +393,22 @@ public class C_Resize desiredHeight = desired[1]; } if (checkWidth <= desiredWidth && checkHeight <= desiredHeight) - results.Add(validResolution, new int[] { checkWidth, checkHeight, orientation }); + results.Add(validResolution, [checkWidth, checkHeight, orientation]); else { if (desiredWidth != desiredHeight) { if (checkWidth * desiredHeight > desiredWidth * checkHeight) - results.Add(validResolution, new int[] { desiredWidth, Convert.ToInt32(desiredWidth * checkHeight / (double)checkWidth), orientation }); + results.Add(validResolution, [desiredWidth, Convert.ToInt32(desiredWidth * checkHeight / (double)checkWidth), orientation]); else - results.Add(validResolution, new int[] { Convert.ToInt32(desiredHeight * checkWidth / (double)checkHeight), desiredHeight, orientation }); + results.Add(validResolution, [Convert.ToInt32(desiredHeight * checkWidth / (double)checkHeight), desiredHeight, orientation]); } else { if (checkWidth * desiredHeight <= desiredWidth * checkHeight) - results.Add(validResolution, new int[] { desiredWidth, desiredHeight, orientation, desiredWidth, Convert.ToInt32(desiredWidth * checkHeight / (double)checkWidth) }); + results.Add(validResolution, [desiredWidth, desiredHeight, orientation, desiredWidth, Convert.ToInt32(desiredWidth * checkHeight / (double)checkWidth)]); else - results.Add(validResolution, new int[] { desiredWidth, desiredHeight, orientation, Convert.ToInt32(desiredHeight * checkWidth / (double)checkHeight), desiredHeight }); + results.Add(validResolution, [desiredWidth, desiredHeight, orientation, Convert.ToInt32(desiredHeight * checkWidth / (double)checkHeight), desiredHeight]); } } } @@ -438,7 +438,7 @@ public class C_Resize { Dictionary? results; string json; - string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata) }; + string[] changesFrom = [nameof(A_Property), nameof(B_Metadata)]; List dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList(); (_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.Name); FileInfo fileInfo = new(Path.Combine(_FileGroups[_PropertyConfiguration.ResultSingleton][directoryIndex], $"{mappingFromItem.ImageFileHolder.NameWithoutExtension}{mappingFromItem.ImageFileHolder.ExtensionLowered}.json")); @@ -458,7 +458,7 @@ public class C_Resize results = null; else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old")) throw new ArgumentException("must be a *.json file"); - else if (dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime) + else if (dateTimes.Count != 0 && dateTimes.Max() > fileInfo.LastWriteTime) results = null; else { @@ -480,7 +480,7 @@ public class C_Resize { results = GetImageResizes(property); json = JsonSerializer.Serialize(results, _WriteIndentedJsonSerializerOptions); - bool updateDateWhenMatches = dateTimes.Any() && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime; + bool updateDateWhenMatches = dateTimes.Count != 0 && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime; DateTime? dateTime = !updateDateWhenMatches ? null : dateTimes.Max(); if (Shared.Models.Stateless.Methods.IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches, compareBeforeWrite: true, updateToWhenMatches: dateTime)) { diff --git a/Set-Created-Date/Program.cs b/Set-Created-Date/Program.cs index f9b3ec4..5fd3e7f 100644 --- a/Set-Created-Date/Program.cs +++ b/Set-Created-Date/Program.cs @@ -60,7 +60,7 @@ public class Program if (args is not null) Secondary(logger, args.ToList()); else - Secondary(logger, new List()); + Secondary(logger, []); } } \ No newline at end of file diff --git a/Set-Created-Date/SetCreatedDate.cs b/Set-Created-Date/SetCreatedDate.cs index ea056f8..7f2cd5b 100644 --- a/Set-Created-Date/SetCreatedDate.cs +++ b/Set-Created-Date/SetCreatedDate.cs @@ -34,7 +34,7 @@ public class SetCreatedDate _WorkingDirectory = workingDirectory; _ConfigurationRoot = configurationRoot; Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); - string[] directories = new string[] { propertyConfiguration.ResultContent }; + string[] directories = [propertyConfiguration.ResultContent]; _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, appSettings.CopyTo, directories); Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); _PropertyConfiguration = propertyConfiguration; @@ -65,7 +65,7 @@ public class SetCreatedDate private List GetRecords(ProgressBar progressBar, ASCIIEncoding asciiEncoding, B_Metadata metadata, string[] files) { - List results = new(); + List results = []; int? id; string? message; DateTime[] dateTimes; @@ -96,13 +96,13 @@ public class SetCreatedDate private List GetToDoCollection(ProgressBar progressBar, List filesCollection) { - List results = new(); + List results = []; int minutes; Record[] records; List unordered; ASCIIEncoding asciiEncoding = new(); B_Metadata metadata = new(_PropertyConfiguration); - List collections = new(); + List collections = []; foreach (string[] files in filesCollection) { minutes = 0; @@ -126,7 +126,7 @@ public class SetCreatedDate private static List SetCreatedDateForeach(ProgressBar progressBar, List toDoCollection) { - List results = new(); + List results = []; foreach (Record record in toDoCollection) { progressBar.Tick(); @@ -140,7 +140,7 @@ public class SetCreatedDate private List SetCreatedDateFilesInDirectories(ILogger? logger) { - List results = new(); + List results = []; ProgressBar progressBar; ConsoleKey? consoleKey = null; const bool useCeilingAverage = true; diff --git a/Shared/.vscode/mklink.md b/Shared/.vscode/mklink.md new file mode 100644 index 0000000..40ee2ec --- /dev/null +++ b/Shared/.vscode/mklink.md @@ -0,0 +1,15 @@ +--- +type: "note" +created: "2023-10-20T03:56:21.490Z" +updated: "2023-10-20T03:57:15.006Z" +--- + +# mklink + +```bash +mklink /J "L:\Git\View-by-Distance-MKLink-Console\Shared\.kanbn" "D:\Documents\Kanban\View-by-Distance" +``` + +```bash +mklink /J "L:\Git\View-by-Distance-MKLink-Console\Shared\.kanbn" "D:\5-Other-Small\Kanban\View-by-Distance" +``` diff --git a/Shared/Models/Stateless/Methods/XDirectory.cs b/Shared/Models/Stateless/Methods/XDirectory.cs index 7d0d3e8..21bfd68 100644 --- a/Shared/Models/Stateless/Methods/XDirectory.cs +++ b/Shared/Models/Stateless/Methods/XDirectory.cs @@ -46,7 +46,7 @@ internal abstract partial class XDirectory catch (UnauthorizedAccessException) { continue; } } - int ceilingAverage = directory[^1] == '_' || !results.Any() ? 0 : GetCeilingAverage(results); + int ceilingAverage = directory[^1] == '_' || results.Count == 0 ? 0 : GetCeilingAverage(results); if (useCeilingAverage) results = GetFilesCollection(results, ceilingAverage); return results; diff --git a/Tests/Models/Binder/Configuration.cs b/Tests/Models/Binder/Configuration.cs index 7646fc4..2e7bee8 100644 --- a/Tests/Models/Binder/Configuration.cs +++ b/Tests/Models/Binder/Configuration.cs @@ -190,7 +190,7 @@ public class Configuration result = new(propertyConfiguration, configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckJsonForDistanceResults.Value, - configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? Array.Empty(), + configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? [], configuration.CrossDirectoryMaxItemsInDistanceCollection.Value, configuration.DeletePossibleDuplicates.Value, configuration.DistanceFactor.Value, @@ -208,10 +208,10 @@ public class Configuration configuration.ForceMetadataLastWriteTimeToCreationTime.Value, configuration.ForceResizeLastWriteTimeToCreationTime.Value, configuration.GenealogicalDataCommunicationFile, - configuration.IgnoreExtensions ?? Array.Empty(), - configuration.JLinks ?? Array.Empty(), - configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? Array.Empty(), - configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? Array.Empty(), + configuration.IgnoreExtensions ?? [], + configuration.JLinks ?? [], + configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? [], + configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? [], configuration.LoadPhotoPrismLocations.Value, configuration.LocationContainerDistanceTolerance, configuration.LocationDigits.Value, @@ -220,12 +220,12 @@ public class Configuration configuration.MappingDefaultName, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value, - configuration.MixedYearRelativePaths ?? Array.Empty(), + configuration.MixedYearRelativePaths ?? [], configuration.ModelDirectory, configuration.ModelName, configuration.OutputExtension, configuration.OutputQuality.Value, - configuration.OutputResolutions ?? Array.Empty(), + configuration.OutputResolutions ?? [], configuration.OverrideForFaceImages.Value, configuration.OverrideForFaceLandmarkImages.Value, configuration.OverrideForResizeImages.Value, @@ -241,25 +241,25 @@ public class Configuration configuration.PropertiesChangedForMetadata.Value, configuration.PropertiesChangedForResize.Value, configuration.RadomUseBirthdayMinimum.Value, - configuration.RangeDaysDeltaTolerance ?? Array.Empty(), - configuration.RangeDistanceTolerance ?? Array.Empty(), - configuration.RangeFaceAreaTolerance ?? Array.Empty(), - configuration.RangeFaceConfidence ?? Array.Empty(), - configuration.RectangleIntersectMinimums ?? Array.Empty(), + configuration.RangeDaysDeltaTolerance ?? [], + configuration.RangeDistanceTolerance ?? [], + configuration.RangeFaceAreaTolerance ?? [], + configuration.RangeFaceConfidence ?? [], + configuration.RectangleIntersectMinimums ?? [], configuration.Reverse.Value, - configuration.SaveBlurHashForOutputResolutions ?? Array.Empty(), - configuration.SaveFaceDistancesForOutputResolutions ?? Array.Empty(), - configuration.SaveFaceLandmarkForOutputResolutions ?? Array.Empty(), - configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? Array.Empty(), + configuration.SaveBlurHashForOutputResolutions ?? [], + configuration.SaveFaceDistancesForOutputResolutions ?? [], + configuration.SaveFaceLandmarkForOutputResolutions ?? [], + configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? [], configuration.SaveIndividually.Value, configuration.SaveFullYearOfRandomFiles.Value, - configuration.SaveMappedForOutputResolutions ?? Array.Empty(), - configuration.SavePropertyShortcutsForOutputResolutions ?? Array.Empty(), - configuration.SaveRandomForOutputResolutions ?? Array.Empty(), + configuration.SaveMappedForOutputResolutions ?? [], + configuration.SavePropertyShortcutsForOutputResolutions ?? [], + configuration.SaveRandomForOutputResolutions ?? [], configuration.SaveResizedSubfiles.Value, - configuration.SaveShortcutsForOutputResolutions ?? Array.Empty(), + configuration.SaveShortcutsForOutputResolutions ?? [], configuration.SaveSortingWithoutPerson.Value, - configuration.SkipNotSkipDirectories ?? Array.Empty(), + configuration.SkipNotSkipDirectories ?? [], configuration.SkipOlderThanDays, configuration.SkipPersonWithMoreThen, configuration.SkipSearch.Value, @@ -268,8 +268,8 @@ public class Configuration configuration.SortingMinimumToUseSigma.Value, configuration.TestDistanceResults.Value, configuration.UseFilterTries.Value, - configuration.ValidKeyWordsToIgnoreInRandom ?? Array.Empty(), - configuration.ValidResolutions ?? Array.Empty()); + configuration.ValidKeyWordsToIgnoreInRandom ?? [], + configuration.ValidResolutions ?? []); return result; } diff --git a/Tests/UnitTestHardCoded.cs b/Tests/UnitTestHardCoded.cs index 7e73446..1f448c9 100644 --- a/Tests/UnitTestHardCoded.cs +++ b/Tests/UnitTestHardCoded.cs @@ -91,7 +91,7 @@ public partial class UnitTestHardCoded { char numberSign = '#'; string? minusOne = null; - char[] personCharacters = new char[] { '^' }; + char[] personCharacters = ['^']; string personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory); string personBirthdayFormat = _Configuration.PropertyConfiguration.PersonBirthdayFormat; string[] personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly); @@ -148,7 +148,7 @@ public partial class UnitTestHardCoded string sourceDirectory = @""; string sourceFile = @"\People - C.tsv"; if (!File.Exists(sourceFile)) - lines = Array.Empty(); + lines = []; else lines = File.ReadAllLines(sourceFile); for (int i = 0; i < lines.Length; i++) diff --git a/Tests/UnitTestResize.cs b/Tests/UnitTestResize.cs index 9904fc9..7cd746a 100644 --- a/Tests/UnitTestResize.cs +++ b/Tests/UnitTestResize.cs @@ -132,13 +132,13 @@ public class UnitTestResize Item item; bool reverse = false; FileHolder resizedFileHolder; - List parseExceptions = new(); + List parseExceptions = []; Shared.Models.Property? property = null; const bool isValidImageFormatExtension = true; - List> subFileTuples = new(); - string[] alternateFileLines = Array.Empty(); + List> subFileTuples = []; + string[] alternateFileLines = []; int length = _PropertyConfiguration.RootDirectory.Length; - string[] changesFrom = new string[] { nameof(A_Property) }; + string[] changesFrom = [nameof(A_Property)]; string outputResolution = _Configuration.OutputResolutions[0]; bool outputResolutionHasNumber = outputResolution.Any(l => char.IsNumber(l)); (string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution); diff --git a/TestsWithFaceRecognitionDotNet/Models/Binder/Configuration.cs b/TestsWithFaceRecognitionDotNet/Models/Binder/Configuration.cs index 7646fc4..2e7bee8 100644 --- a/TestsWithFaceRecognitionDotNet/Models/Binder/Configuration.cs +++ b/TestsWithFaceRecognitionDotNet/Models/Binder/Configuration.cs @@ -190,7 +190,7 @@ public class Configuration result = new(propertyConfiguration, configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckJsonForDistanceResults.Value, - configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? Array.Empty(), + configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? [], configuration.CrossDirectoryMaxItemsInDistanceCollection.Value, configuration.DeletePossibleDuplicates.Value, configuration.DistanceFactor.Value, @@ -208,10 +208,10 @@ public class Configuration configuration.ForceMetadataLastWriteTimeToCreationTime.Value, configuration.ForceResizeLastWriteTimeToCreationTime.Value, configuration.GenealogicalDataCommunicationFile, - configuration.IgnoreExtensions ?? Array.Empty(), - configuration.JLinks ?? Array.Empty(), - configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? Array.Empty(), - configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? Array.Empty(), + configuration.IgnoreExtensions ?? [], + configuration.JLinks ?? [], + configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? [], + configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? [], configuration.LoadPhotoPrismLocations.Value, configuration.LocationContainerDistanceTolerance, configuration.LocationDigits.Value, @@ -220,12 +220,12 @@ public class Configuration configuration.MappingDefaultName, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value, - configuration.MixedYearRelativePaths ?? Array.Empty(), + configuration.MixedYearRelativePaths ?? [], configuration.ModelDirectory, configuration.ModelName, configuration.OutputExtension, configuration.OutputQuality.Value, - configuration.OutputResolutions ?? Array.Empty(), + configuration.OutputResolutions ?? [], configuration.OverrideForFaceImages.Value, configuration.OverrideForFaceLandmarkImages.Value, configuration.OverrideForResizeImages.Value, @@ -241,25 +241,25 @@ public class Configuration configuration.PropertiesChangedForMetadata.Value, configuration.PropertiesChangedForResize.Value, configuration.RadomUseBirthdayMinimum.Value, - configuration.RangeDaysDeltaTolerance ?? Array.Empty(), - configuration.RangeDistanceTolerance ?? Array.Empty(), - configuration.RangeFaceAreaTolerance ?? Array.Empty(), - configuration.RangeFaceConfidence ?? Array.Empty(), - configuration.RectangleIntersectMinimums ?? Array.Empty(), + configuration.RangeDaysDeltaTolerance ?? [], + configuration.RangeDistanceTolerance ?? [], + configuration.RangeFaceAreaTolerance ?? [], + configuration.RangeFaceConfidence ?? [], + configuration.RectangleIntersectMinimums ?? [], configuration.Reverse.Value, - configuration.SaveBlurHashForOutputResolutions ?? Array.Empty(), - configuration.SaveFaceDistancesForOutputResolutions ?? Array.Empty(), - configuration.SaveFaceLandmarkForOutputResolutions ?? Array.Empty(), - configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? Array.Empty(), + configuration.SaveBlurHashForOutputResolutions ?? [], + configuration.SaveFaceDistancesForOutputResolutions ?? [], + configuration.SaveFaceLandmarkForOutputResolutions ?? [], + configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? [], configuration.SaveIndividually.Value, configuration.SaveFullYearOfRandomFiles.Value, - configuration.SaveMappedForOutputResolutions ?? Array.Empty(), - configuration.SavePropertyShortcutsForOutputResolutions ?? Array.Empty(), - configuration.SaveRandomForOutputResolutions ?? Array.Empty(), + configuration.SaveMappedForOutputResolutions ?? [], + configuration.SavePropertyShortcutsForOutputResolutions ?? [], + configuration.SaveRandomForOutputResolutions ?? [], configuration.SaveResizedSubfiles.Value, - configuration.SaveShortcutsForOutputResolutions ?? Array.Empty(), + configuration.SaveShortcutsForOutputResolutions ?? [], configuration.SaveSortingWithoutPerson.Value, - configuration.SkipNotSkipDirectories ?? Array.Empty(), + configuration.SkipNotSkipDirectories ?? [], configuration.SkipOlderThanDays, configuration.SkipPersonWithMoreThen, configuration.SkipSearch.Value, @@ -268,8 +268,8 @@ public class Configuration configuration.SortingMinimumToUseSigma.Value, configuration.TestDistanceResults.Value, configuration.UseFilterTries.Value, - configuration.ValidKeyWordsToIgnoreInRandom ?? Array.Empty(), - configuration.ValidResolutions ?? Array.Empty()); + configuration.ValidKeyWordsToIgnoreInRandom ?? [], + configuration.ValidResolutions ?? []); return result; } diff --git a/TestsWithFaceRecognitionDotNet/UnitTestFace.cs b/TestsWithFaceRecognitionDotNet/UnitTestFace.cs index 0b54df9..718fda2 100644 --- a/TestsWithFaceRecognitionDotNet/UnitTestFace.cs +++ b/TestsWithFaceRecognitionDotNet/UnitTestFace.cs @@ -205,13 +205,13 @@ public class UnitTestFace Item item; bool reverse = false; FileHolder resizedFileHolder; - List parseExceptions = new(); + List parseExceptions = []; Shared.Models.Property? property = null; const bool isValidImageFormatExtension = true; - List> subFileTuples = new(); - string[] alternateFileLines = Array.Empty(); + List> subFileTuples = []; + string[] alternateFileLines = []; int length = _PropertyConfiguration.RootDirectory.Length; - string[] changesFrom = new string[] { nameof(A_Property) }; + string[] changesFrom = [nameof(A_Property)]; string outputResolution = _Configuration.OutputResolutions[0]; bool outputResolutionHasNumber = outputResolution.Any(l => char.IsNumber(l)); (string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution); @@ -266,7 +266,7 @@ public class UnitTestFace (Model model, PredictorModel predictorModel, ModelParameter modelParameter) = GetModel(_Configuration); FaceRecognition faceRecognition = new(_PropertyConfiguration.NumberOfJitters.Value, _PropertyConfiguration.NumberOfTimesToUpsample.Value, model, modelParameter, predictorModel); List<(Location Location, FaceRecognitionDotNet.FaceEncoding? FaceEncoding, Dictionary? FaceParts)> collection; - collection = faceRecognition.GetCollection(image, locations: new(), includeFaceEncoding: true, includeFaceParts: true); + collection = faceRecognition.GetCollection(image, locations: [], includeFaceEncoding: true, includeFaceParts: true); Assert.IsTrue(collection.Count == 2); List faceDistanceEncodings = (from l in collection where l.FaceEncoding is not null select new FaceDistance(l.FaceEncoding)).ToList(); List faceDistanceLengths = FaceRecognition.FaceDistances(new(faceDistanceEncodings), faceDistanceEncodings[0]);