editorconfig
This commit is contained in:
Mike Phares 2023-10-20 19:37:19 -07:00
parent b54ea97c67
commit a4a92aacd2
68 changed files with 703 additions and 553 deletions

View File

@ -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.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.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.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.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.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.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.IDE0031.severity = warning # Use null propagation (IDE0031)
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed 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.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.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.severity = warning
dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method

View File

@ -14,9 +14,12 @@
"Dlib", "Dlib",
"DSCN", "DSCN",
"Exif", "Exif",
"eyeα",
"Getα", "Getα",
"Greyscale", "Greyscale",
"Hasher", "Hasher",
"Hmmss",
"Hmmssfff",
"jfif", "jfif",
"JOSN", "JOSN",
"mmod", "mmod",

View File

@ -12,7 +12,7 @@ internal static class Base83
static Base83() static Base83()
{ {
// Build inverse lookup table for fast decoding // Build inverse lookup table for fast decoding
Dictionary<char, int> charIndices = new(); Dictionary<char, int> charIndices = [];
int index = 0; int index = 0;
foreach (char c in _Charset) foreach (char c in _Charset)
{ {

View File

@ -14,14 +14,14 @@ public class C2_BlurHasher : IBlurHasher
public C2_BlurHasher(IPropertyConfiguration propertyConfiguration) public C2_BlurHasher(IPropertyConfiguration propertyConfiguration)
{ {
_FileGroups = new(); _FileGroups = [];
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
} }
public void Update(string resultsFullGroupDirectory) public void Update(string resultsFullGroupDirectory)
{ {
_FileGroups.Clear(); _FileGroups.Clear();
Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, resultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultContent, _PropertyConfiguration.ResultSingleton }); Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, resultsFullGroupDirectory, [_PropertyConfiguration.ResultContent, _PropertyConfiguration.ResultSingleton]);
foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs) foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs)
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value); _FileGroups.Add(keyValuePair.Key, keyValuePair.Value);
} }

View File

@ -35,9 +35,9 @@ public class CopyDistinct
_Configuration = configuration; _Configuration = configuration;
logger?.LogInformation(propertyConfiguration.RootDirectory); logger?.LogInformation(propertyConfiguration.RootDirectory);
(bool move, List<string[]> filesCollection, bool anyLenFiles, bool moveBack) = Verify(); (bool move, List<string[]> 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<string> lines = CopyDistinctFilesInDirectories(logger, move, filesCollection, anyLenFiles, moveBack); List<string> lines = CopyDistinctFilesInDirectories(logger, move, filesCollection, anyLenFiles, moveBack);
if (lines.Any()) if (lines.Count != 0)
File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines);
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory); _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory);
} }
@ -77,7 +77,7 @@ public class CopyDistinct
moveBack = false; moveBack = false;
else else
{ {
if (!Directory.GetFiles(directory, "*", SearchOption.AllDirectories).Any()) if (Directory.GetFiles(directory, "*", SearchOption.AllDirectories).Length == 0)
moveBack = false; moveBack = false;
else else
{ {
@ -93,16 +93,16 @@ public class CopyDistinct
private static (string[], List<(FileHolder, string?, string)>) GetMoveBackToDoCollection(List<string[]> filesCollection) private static (string[], List<(FileHolder, string?, string)>) GetMoveBackToDoCollection(List<string[]> filesCollection)
{ {
List<(FileHolder, string?, string)> results = new(); List<(FileHolder, string?, string)> results = [];
string key; string key;
string? value; string? value;
string fileName; string fileName;
string? directory; string? directory;
string destinationFile; string destinationFile;
List<string> distinctFound = new(); List<string> distinctFound = [];
List<string> distinctNeeded = new(); List<string> distinctNeeded = [];
List<string> distinctDirectories = new(); List<string> distinctDirectories = [];
Dictionary<string, string> nameToPath = new(); Dictionary<string, string> nameToPath = [];
for (int i = 1; i < 3; i++) for (int i = 1; i < 3; i++)
{ {
foreach (string[] files in filesCollection) foreach (string[] files in filesCollection)
@ -155,7 +155,7 @@ public class CopyDistinct
private List<string> CopyDistinctFilesInDirectories(ILogger<Program>? logger, bool move, List<string[]> filesCollection, bool anyLenFiles, bool moveBack) private List<string> CopyDistinctFilesInDirectories(ILogger<Program>? logger, bool move, List<string[]> filesCollection, bool anyLenFiles, bool moveBack)
{ {
List<string> results = new(); List<string> results = [];
ProgressBar progressBar; ProgressBar progressBar;
string[] distinctDirectories; string[] distinctDirectories;
ConsoleKey? consoleKey = null; ConsoleKey? consoleKey = null;

View File

@ -60,7 +60,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -33,9 +33,9 @@ public class DateGroup
_Logger = logger; _Logger = logger;
_AppSettings = appSettings; _AppSettings = appSettings;
_IsEnvironment = isEnvironment; _IsEnvironment = isEnvironment;
_Exceptions = new List<string>(); _Exceptions = [];
_FileKeyValuePairs = new List<KeyValuePair<string, string>>(); _FileKeyValuePairs = [];
_FilePropertiesKeyValuePairs = new Dictionary<string, List<Tuple<string, Shared.Models.Property>>>(); _FilePropertiesKeyValuePairs = [];
Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);
Models.Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); Models.Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
_Logger?.LogInformation(propertyConfiguration.RootDirectory); _Logger?.LogInformation(propertyConfiguration.RootDirectory);
@ -59,12 +59,12 @@ public class DateGroup
_ = Directory.CreateDirectory(aPropertySingletonDirectory); _ = Directory.CreateDirectory(aPropertySingletonDirectory);
(int t, Container[] containers) = Shared.Models.Stateless.Methods.IContainer.GetContainers(propertyConfiguration, aPropertySingletonDirectory); (int t, Container[] containers) = Shared.Models.Stateless.Methods.IContainer.GetContainers(propertyConfiguration, aPropertySingletonDirectory);
A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory, aResultsFullGroupDirectory); A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory, aResultsFullGroupDirectory);
if (propertyLogic.ExceptionsDirectories.Any()) if (propertyLogic.ExceptionsDirectories.Count != 0)
throw new Exception(); throw new Exception();
if (propertyConfiguration.PopulatePropertyId && (configuration.ByCreateDateShortcut || configuration.ByHash) && Shared.Models.Stateless.Methods.IProperty.Any(containers)) if (propertyConfiguration.PopulatePropertyId && (configuration.ByCreateDateShortcut || configuration.ByHash) && Shared.Models.Stateless.Methods.IProperty.Any(containers))
{ {
propertyLogic.SavePropertyParallelWork(ticks, metadata, t, containers); propertyLogic.SavePropertyParallelWork(ticks, metadata, t, containers);
if (propertyLogic.ExceptionsDirectories.Any()) if (propertyLogic.ExceptionsDirectories.Count != 0)
throw new Exception(); throw new Exception();
} }
if (configuration.ByCreateDateShortcut) 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) 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; char flag;
string day; string day;
int season; int season;
@ -150,8 +150,8 @@ public class DateGroup
string[]? matches = null; string[]? matches = null;
string[] directorySegments; string[] directorySegments;
List<string> destinationCollection; List<string> destinationCollection;
List<string> directoryNames = new(); List<string> directoryNames = [];
List<string> topDirectorySegments = new(); List<string> topDirectorySegments = [];
StringBuilder destinationDirectoryName = new(); StringBuilder destinationDirectoryName = new();
Calendar calendar = new CultureInfo("en-US").Calendar; Calendar calendar = new CultureInfo("en-US").Calendar;
for (int z = 1; z < 3; z++) for (int z = 1; z < 3; z++)
@ -179,16 +179,16 @@ public class DateGroup
directorySegments = directoryName.Split(' '); directorySegments = directoryName.Split(' ');
topDirectorySegments.AddRange(directorySegments); topDirectorySegments.AddRange(directorySegments);
(_, matches) = Shared.Models.Stateless.Methods.IProperty.IsWrongYear(directorySegments, string.Empty); (_, matches) = Shared.Models.Stateless.Methods.IProperty.IsWrongYear(directorySegments, string.Empty);
if (matches.Any()) if (matches.Length != 0)
break; break;
} }
if (matches is not null && matches.Any()) if (matches is not null && matches.Length != 0)
break; break;
} }
foreach (Item item in filteredItems) foreach (Item item in filteredItems)
{ {
directoryNames.Clear(); directoryNames.Clear();
destinationCollection = new(); destinationCollection = [];
_ = destinationDirectoryName.Clear(); _ = destinationDirectoryName.Clear();
if (item.Property is not null) if (item.Property is not null)
dateTimes = item.Property.GetDateTimes(); dateTimes = item.Property.GetDateTimes();
@ -196,7 +196,7 @@ public class DateGroup
{ {
if (item.ImageFileHolder.LastWriteTime is null) if (item.ImageFileHolder.LastWriteTime is null)
throw new Exception(); 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) if (item.Property is not null && item.Property.DateTimeOriginal is not null)
dateTime = item.Property.DateTimeOriginal.Value; dateTime = item.Property.DateTimeOriginal.Value;
@ -310,7 +310,7 @@ public class DateGroup
private static Item[] GetFilterItems(Container container) private static Item[] GetFilterItems(Container container)
{ {
List<Item> results = new(); List<Item> results = [];
foreach (Item item in container.Items) foreach (Item item in container.Items)
{ {
if (item.ImageFileHolder is not null) if (item.ImageFileHolder is not null)
@ -326,11 +326,11 @@ public class DateGroup
string? topDirectory; string? topDirectory;
string? checkDirectory; string? checkDirectory;
string destinationDirectory; 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; List<(Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)> fileMoveCollectionDirectory;
foreach (Container container in containers) foreach (Container container in containers)
{ {
if (!container.Items.Any()) if (container.Items.Count == 0)
continue; continue;
if (!_Configuration.KeepFullPath) if (!_Configuration.KeepFullPath)
destinationDirectory = destinationRoot; destinationDirectory = destinationRoot;
@ -349,7 +349,7 @@ public class DateGroup
continue; continue;
topDirectory = checkDirectory; topDirectory = checkDirectory;
filteredItems = GetFilterItems(container); filteredItems = GetFilterItems(container);
if (!filteredItems.Any()) if (filteredItems.Length == 0)
continue; continue;
fileMoveCollectionDirectory = GetMoveFileCollection(destinationDirectory, topDirectory, filteredItems); fileMoveCollectionDirectory = GetMoveFileCollection(destinationDirectory, topDirectory, filteredItems);
fileMoveCollection.AddRange(fileMoveCollectionDirectory); fileMoveCollection.AddRange(fileMoveCollectionDirectory);
@ -366,9 +366,9 @@ public class DateGroup
string directoryName; string directoryName;
WindowsShortcut windowsShortcut; WindowsShortcut windowsShortcut;
string duplicate = "-Duplicates"; string duplicate = "-Duplicates";
List<string> filesDistinct = new(); List<string> filesDistinct = [];
List<string> filesDuplicate = new(); List<string> filesDuplicate = [];
List<string> directoriesDistinct = new(); List<string> directoriesDistinct = [];
(Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)[] fileMoveCollectionAll = GetFileMoveCollectionAll(configuration, destinationRoot, containers); (Item Item, long LastWriteTimeTicks, long MinimumDateTimeTicks, string[] Destination)[] fileMoveCollectionAll = GetFileMoveCollectionAll(configuration, destinationRoot, containers);
foreach ((Item item, long lastWriteTimeTicks, long minimumDateTimeTicks, string[] destination) in fileMoveCollectionAll) 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), "()"); string aPropertyContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(configuration, nameof(A_Property), "()");
foreach (Container container in containers) foreach (Container container in containers)
{ {
if (!container.Items.Any()) if (container.Items.Count == 0)
continue; continue;
selectedTotal = 0; selectedTotal = 0;
threeStandardDeviationHigh = Shared.Models.Stateless.Methods.IProperty.GetThreeStandardDeviationHigh(minimum, container); threeStandardDeviationHigh = Shared.Models.Stateless.Methods.IProperty.GetThreeStandardDeviationHigh(minimum, container);

View File

@ -98,7 +98,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -18,7 +18,7 @@ public class DeleteByDistinct
if (console is null) if (console is null)
{ } { }
long ticks = DateTime.Now.Ticks; long ticks = DateTime.Now.Ticks;
Dictionary<string, List<string>> keyValuePairs = new(); Dictionary<string, List<string>> keyValuePairs = [];
Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot); Configuration configuration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
logger?.LogInformation(configuration.RootDirectory); logger?.LogInformation(configuration.RootDirectory);
@ -42,11 +42,11 @@ public class DeleteByDistinct
List<string>? fileNames; List<string>? fileNames;
ProgressBar progressBar; ProgressBar progressBar;
ConsoleKey? consoleKey = null; ConsoleKey? consoleKey = null;
List<string> deletedFiles = new(); List<string> deletedFiles = [];
int pad = ticks.ToString().Length + 1; int pad = ticks.ToString().Length + 1;
List<string> deletedDirectories = new(); List<string> deletedDirectories = [];
Dictionary<long, List<string>> longToCollectionB = new(); Dictionary<long, List<string>> longToCollectionB = [];
List<(string Source, string Destination)> renameFiles = new(); List<(string Source, string Destination)> renameFiles = [];
logger?.LogInformation($"Gathering {appSettings.SearchPattern} files from <{directory}>"); logger?.LogInformation($"Gathering {appSettings.SearchPattern} files from <{directory}>");
(string directory, string[] files)[] leftCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(directory, appSettings.SearchPattern).ToArray(); (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); totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
@ -86,12 +86,12 @@ public class DeleteByDistinct
throw new Exception(); throw new Exception();
if (!keyValuePairs.TryGetValue(check, out fileNames)) if (!keyValuePairs.TryGetValue(check, out fileNames))
{ {
keyValuePairs.Add(check, new()); keyValuePairs.Add(check, []);
if (!keyValuePairs.TryGetValue(check, out fileNames)) if (!keyValuePairs.TryGetValue(check, out fileNames))
throw new Exception(); throw new Exception();
} }
checkName = fileInfo.Name.ToLower().Replace(".jpeg", ".jpg"); checkName = fileInfo.Name.ToLower().Replace(".jpeg", ".jpg");
if (!fileNames.Any()) if (fileNames.Count == 0)
fileNames.Add(checkName); fileNames.Add(checkName);
else if (!logOnly && appSettings.RenameToMatch && fileNames.Count == 1 && fileInfo.DirectoryName is not null && fileInfo.Name != fileNames.First()) 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()))); renameFiles.Add((fileInfo.FullName, Path.Combine(fileInfo.DirectoryName, fileNames.First())));
@ -108,7 +108,7 @@ public class DeleteByDistinct
logFile = $"{ticks}-{variable}-Files-A.lsv"; logFile = $"{ticks}-{variable}-Files-A.lsv";
if (!logOnly) if (!logOnly)
File.WriteAllLines(Path.Combine(directory, logFile), deletedFiles); 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}>"); logger?.LogInformation($"Ready to delete {deletedFiles.Count} from {variable} {appSettings.SearchPattern} file(s)? See <{logFile}>");
for (int y = 0; y < int.MaxValue; y++) for (int y = 0; y < int.MaxValue; y++)
@ -142,9 +142,9 @@ public class DeleteByDistinct
for (int i = 1; i < 5; i++) for (int i = 1; i < 5; i++)
{ {
progressBar.Tick(); progressBar.Tick();
List<string> collection = new(); List<string> collection = [];
Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(directory, collection); Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(directory, collection);
if (!collection.Any()) if (collection.Count == 0)
break; break;
deletedDirectories.AddRange(collection); deletedDirectories.AddRange(collection);
} }
@ -154,7 +154,7 @@ public class DeleteByDistinct
File.WriteAllLines(Path.Combine(directory, logFile), deletedDirectories.Distinct()); File.WriteAllLines(Path.Combine(directory, logFile), deletedDirectories.Distinct());
} }
} }
if (!logOnly && renameFiles.Any()) if (!logOnly && renameFiles.Count != 0)
{ {
logFile = $"{ticks}-{variable}-Files-B.lsv"; logFile = $"{ticks}-{variable}-Files-B.lsv";
File.WriteAllLines(Path.Combine(directory, logFile), renameFiles.Select(l => l.Source)); File.WriteAllLines(Path.Combine(directory, logFile), renameFiles.Select(l => l.Source));

View File

@ -60,7 +60,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -26,7 +26,7 @@ public class DeleteByRelative
if (string.IsNullOrEmpty(appSettings.CompareRootDirectory) || Path.GetFullPath(appSettings.CompareRootDirectory) == Path.GetFullPath(configuration.RootDirectory)) if (string.IsNullOrEmpty(appSettings.CompareRootDirectory) || Path.GetFullPath(appSettings.CompareRootDirectory) == Path.GetFullPath(configuration.RootDirectory))
throw new Exception("Check AppSettings file!"); throw new Exception("Check AppSettings file!");
IEnumerable<(string directory, string[] files)> leftCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(configuration.RootDirectory, searchPattern); IEnumerable<(string directory, string[] files)> leftCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(configuration.RootDirectory, searchPattern);
List<string> leftRelativeFiles = new(); List<string> leftRelativeFiles = [];
foreach ((_, string[] files) in leftCollection) foreach ((_, string[] files) in leftCollection)
{ {
foreach (string file in files) foreach (string file in files)
@ -35,7 +35,7 @@ public class DeleteByRelative
leftRelativeFiles.Add(Path.GetFullPath(string.Concat(appSettings.CompareRootDirectory, relativePath))); leftRelativeFiles.Add(Path.GetFullPath(string.Concat(appSettings.CompareRootDirectory, relativePath)));
} }
} }
List<string> deleteFiles = new(); List<string> deleteFiles = [];
IEnumerable<(string, string[])> rightCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(appSettings.CompareRootDirectory, searchPattern); IEnumerable<(string, string[])> rightCollection = Shared.Models.Stateless.Methods.IFileHolder.GetFiles(appSettings.CompareRootDirectory, searchPattern);
foreach ((_, string[] files) in rightCollection) foreach ((_, string[] files) in rightCollection)
{ {

View File

@ -60,7 +60,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -46,11 +46,11 @@ public class DistanceLimits : IDistanceLimits
string IDistanceLimits.GetCounts() string IDistanceLimits.GetCounts()
{ {
string result; string result;
List<(int Value, string Name)> results = new() List<(int Value, string Name)> results =
{ [
new(_Days, nameof(_Days)), new(_Days, nameof(_Days)),
new(_Distance, nameof(_Distance)) new(_Distance, nameof(_Distance))
}; ];
result = string.Join(' ', from l in results orderby l.Value descending select $"{l.Name}_{l.Value};"); result = string.Join(' ', from l in results orderby l.Value descending select $"{l.Name}_{l.Value};");
return result; return result;
} }

View File

@ -27,12 +27,12 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
public E_Distance(bool distanceMoveUnableToMatch, bool distanceRenameToMatch, int faceConfidencePercent, float[] rangeDistanceTolerance, float[] rectangleIntersectMinimums) public E_Distance(bool distanceMoveUnableToMatch, bool distanceRenameToMatch, int faceConfidencePercent, float[] rangeDistanceTolerance, float[] rectangleIntersectMinimums)
{ {
_Debug = new(); _Debug = [];
_Moved = new(); _Moved = [];
_Renamed = new(); _Renamed = [];
_AllMappedFaceFiles = new(); _AllMappedFaceFiles = [];
_AllMappedFaceFileNames = new(); _AllMappedFaceFileNames = [];
_DuplicateMappedFaceFiles = new(); _DuplicateMappedFaceFiles = [];
_DistanceRenameToMatch = distanceRenameToMatch; _DistanceRenameToMatch = distanceRenameToMatch;
_FaceConfidencePercent = faceConfidencePercent; _FaceConfidencePercent = faceConfidencePercent;
_DistanceMoveUnableToMatch = distanceMoveUnableToMatch; _DistanceMoveUnableToMatch = distanceMoveUnableToMatch;
@ -54,7 +54,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
int confidencePercent; int confidencePercent;
FaceDistance faceDistance; FaceDistance faceDistance;
FaceDistanceContainer faceDistanceContainer; FaceDistanceContainer faceDistanceContainer;
List<FaceDistanceContainer> collection = new(); List<FaceDistanceContainer> collection = [];
foreach (Face face in intersectFaces) foreach (Face face in intersectFaces)
{ {
if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null) if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null)
@ -81,7 +81,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
private static ReadOnlyCollection<FaceDistance> GetFaceDistanceEncodings(FaceDistanceContainer[] faceDistanceContainers) private static ReadOnlyCollection<FaceDistance> GetFaceDistanceEncodings(FaceDistanceContainer[] faceDistanceContainers)
{ {
List<FaceDistance> faceDistanceEncodings = new(); List<FaceDistance> faceDistanceEncodings = [];
foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers) foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers)
{ {
if (faceDistanceContainer.FaceDistance.Encoding is null) if (faceDistanceContainer.FaceDistance.Encoding is null)
@ -93,7 +93,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
private List<(Face Face, double? Length)> GetValues(MappingFromItem mappingFromItem, List<Face> intersectFaces, Shared.Models.FaceEncoding modelsFaceEncoding) private List<(Face Face, double? Length)> GetValues(MappingFromItem mappingFromItem, List<Face> intersectFaces, Shared.Models.FaceEncoding modelsFaceEncoding)
{ {
List<(Face Face, double? Length)> results = new(); List<(Face Face, double? Length)> results = [];
Face face; Face face;
FaceDistance faceDistanceLength; FaceDistance faceDistanceLength;
FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding = FaceRecognition.LoadFaceEncoding(modelsFaceEncoding.RawEncoding); FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding = FaceRecognition.LoadFaceEncoding(modelsFaceEncoding.RawEncoding);
@ -134,7 +134,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
private static List<(Face, double?)> GetMatchingFacesByFaceEncoding(Face[] filteredFaces, string? json) private static List<(Face, double?)> GetMatchingFacesByFaceEncoding(Face[] filteredFaces, string? json)
{ {
List<(Face, double?)> results = new(); List<(Face, double?)> results = [];
string check; string check;
foreach (Face face in filteredFaces) foreach (Face face in filteredFaces)
{ {
@ -178,7 +178,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
{ {
string checkFile; string checkFile;
FileInfo fileInfo = new(file); FileInfo fileInfo = new(file);
List<(long Length, string FullName)> collection = new(); List<(long Length, string FullName)> collection = [];
if (fileInfo.Exists) if (fileInfo.Exists)
collection.Add(new(fileInfo.Length, fileInfo.FullName)); collection.Add(new(fileInfo.Length, fileInfo.FullName));
lock (_DuplicateMappedFaceFiles) lock (_DuplicateMappedFaceFiles)
@ -208,7 +208,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
string[] matches; string[] matches;
FileInfo? fileInfo; FileInfo? fileInfo;
List<Face> intersectFaces; List<Face> intersectFaces;
List<(Face, double?)> checkFaces = new(); List<(Face, double?)> checkFaces = [];
Shared.Models.FaceEncoding? modelsFaceEncoding; 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(); 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) if (filteredFaces.Length != faces.Count)
@ -326,7 +326,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
public static void PreFilterSetFaceDistances(int maxDegreeOfParallelism, long ticks, ReadOnlyCollection<Face> distinctFilteredFaces) public static void PreFilterSetFaceDistances(int maxDegreeOfParallelism, long ticks, ReadOnlyCollection<Face> distinctFilteredFaces)
{ {
List<Face> faces = new(); List<Face> faces = [];
foreach (Face face in distinctFilteredFaces) foreach (Face face in distinctFilteredFaces)
{ {
if (face.Mapping?.MappingFromFilterPre is null) if (face.Mapping?.MappingFromFilterPre is null)
@ -362,7 +362,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
private static List<SortingContainer> GetSortingContainers(Map.Models.Configuration mapConfiguration, IDistanceLimits distanceLimits, Face face, FaceDistance faceDistanceEncoding, List<Sorting> sortingCollection) private static List<SortingContainer> GetSortingContainers(Map.Models.Configuration mapConfiguration, IDistanceLimits distanceLimits, Face face, FaceDistance faceDistanceEncoding, List<Sorting> sortingCollection)
{ {
List<SortingContainer> results = new(); List<SortingContainer> results = [];
SortingContainer sortingContainer; SortingContainer sortingContainer;
int days = 0, distance = 0; int days = 0, distance = 0;
Sorting[] collection = Shared.Models.Stateless.Methods.ISorting.Sort(sortingCollection); Sorting[] collection = Shared.Models.Stateless.Methods.ISorting.Sort(sortingCollection);
@ -404,7 +404,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
ReadOnlyCollection<FaceDistanceContainer> results; ReadOnlyCollection<FaceDistanceContainer> results;
FaceDistance faceDistance; FaceDistance faceDistance;
FaceDistanceContainer faceDistanceContainer; FaceDistanceContainer faceDistanceContainer;
List<FaceDistanceContainer> collection = new(); List<FaceDistanceContainer> collection = [];
foreach (Face face in distinctFilteredFaces) foreach (Face face in distinctFilteredFaces)
{ {
if (face.Mapping?.MappingFromLocation is null) if (face.Mapping?.MappingFromLocation is null)
@ -421,7 +421,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
public static FaceDistanceContainer[] FilteredPostLoadFaceDistanceContainers(Map.Models.MapLogic mapLogic, ReadOnlyCollection<FaceDistanceContainer> faceDistanceContainers, long? skipOlderThan, DistanceLimits distanceLimits) public static FaceDistanceContainer[] FilteredPostLoadFaceDistanceContainers(Map.Models.MapLogic mapLogic, ReadOnlyCollection<FaceDistanceContainer> faceDistanceContainers, long? skipOlderThan, DistanceLimits distanceLimits)
{ {
List<FaceDistanceContainer> results = new(); List<FaceDistanceContainer> results = [];
foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers) foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers)
{ {
if (faceDistanceContainer.FaceDistance is null || faceDistanceContainer.Face.Mapping?.MappingFromLocation is null) if (faceDistanceContainer.FaceDistance is null || faceDistanceContainer.Face.Mapping?.MappingFromLocation is null)
@ -449,7 +449,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
public static ReadOnlyCollection<SortingContainer> SetFaceMappingSortingCollectionThenGetSortedSortingContainers(int maxDegreeOfParallelism, Map.Models.Configuration mapConfiguration, long ticks, Map.Models.MapLogic mapLogic, IDistanceLimits distanceLimits, ReadOnlyCollection<FaceDistance> faceDistanceEncodings, FaceDistanceContainer[] filteredFaceDistanceContainers) public static ReadOnlyCollection<SortingContainer> SetFaceMappingSortingCollectionThenGetSortedSortingContainers(int maxDegreeOfParallelism, Map.Models.Configuration mapConfiguration, long ticks, Map.Models.MapLogic mapLogic, IDistanceLimits distanceLimits, ReadOnlyCollection<FaceDistance> faceDistanceEncodings, FaceDistanceContainer[] filteredFaceDistanceContainers)
{ {
List<SortingContainer> results = new(); List<SortingContainer> results = [];
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism }; ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism };
string message = $") {filteredFaceDistanceContainers.Length:000} Get Sorting Containers Then Set Face Mapping Sorting Collection - {totalSeconds} total second(s)"; 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<MetadataExtractor.Directory>
private static ReadOnlyCollection<RelationContainer> GetRelationCollections(int faceDistancePermyriad, int locationContainerDistanceTake, float distanceTolerance, List<Record> records) private static ReadOnlyCollection<RelationContainer> GetRelationCollections(int faceDistancePermyriad, int locationContainerDistanceTake, float distanceTolerance, List<Record> records)
{ {
List<RelationContainer> results = new(); List<RelationContainer> results = [];
string fileName; string fileName;
FileHolder fileHolder; FileHolder fileHolder;
int distancePermyriad; int distancePermyriad;
List<string> files = new(); List<string> files = [];
long ticks = DateTime.Now.Ticks; long ticks = DateTime.Now.Ticks;
FaceDistance? faceDistanceEncoding; FaceDistance? faceDistanceEncoding;
List<Relation> mappedRelations; List<Relation> mappedRelations;
List<FaceDistance> faceDistanceLengths; List<FaceDistance> faceDistanceLengths;
List<FaceDistance> faceDistanceEncodings = new(); List<FaceDistance> faceDistanceEncodings = [];
foreach (Record record in records) foreach (Record record in records)
{ {
files.Add(record.File); files.Add(record.File);
@ -496,7 +496,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
} }
foreach (Record record in records) foreach (Record record in records)
{ {
mappedRelations = new(); mappedRelations = [];
fileHolder = new(record.File); fileHolder = new(record.File);
if (files.Count > 1) if (files.Count > 1)
{ {
@ -526,7 +526,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
{ {
ReadOnlyCollection<RelationContainer> result; ReadOnlyCollection<RelationContainer> result;
string? json; string? json;
List<Record> records = new(); List<Record> records = [];
Shared.Models.FaceEncoding? modelsFaceEncoding; Shared.Models.FaceEncoding? modelsFaceEncoding;
FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding; FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding;
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers) foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)

View File

@ -126,9 +126,9 @@ public partial class DragDropExplorer : Form
{ {
string converted; string converted;
FileInfo fileInfo; FileInfo fileInfo;
List<MatchNginx> files = new(); List<MatchNginx> files = [];
DateTime dateTime = DateTime.Now; DateTime dateTime = DateTime.Now;
List<MatchNginx> directories = new(); List<MatchNginx> directories = [];
_FirstTextBox.Text = GetConverted(paths[0]); _FirstTextBox.Text = GetConverted(paths[0]);
string weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00"); string weekOfYear = _Calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
string directory = Path.Combine(_WorkingDirectory, $"{dateTime.Year}_{weekOfYear}"); string directory = Path.Combine(_WorkingDirectory, $"{dateTime.Year}_{weekOfYear}");
@ -144,9 +144,7 @@ public partial class DragDropExplorer : Form
else else
files.Add(new(fileInfo.Name, "File", fileInfo.LastWriteTime, fileInfo.Length, converted)); files.Add(new(fileInfo.Name, "File", fileInfo.LastWriteTime, fileInfo.Length, converted));
} }
List<MatchNginx> collection = new(); List<MatchNginx> collection = [.. directories, .. files];
collection.AddRange(directories);
collection.AddRange(files);
_JsonTextBox.Text = JsonSerializer.Serialize(collection, new JsonSerializerOptions { WriteIndented = true }); _JsonTextBox.Text = JsonSerializer.Serialize(collection, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(_PathTextBox.Text, _JsonTextBox.Text); File.WriteAllText(_PathTextBox.Text, _JsonTextBox.Text);
} }

View File

@ -27,7 +27,7 @@ public partial class DragDropSearch : Form
public DragDropSearch() public DragDropSearch()
{ {
InitializeComponent(); InitializeComponent();
_IdToItem = new(); _IdToItem = [];
AppSettings appSettings; AppSettings appSettings;
string workingDirectory; string workingDirectory;
IsEnvironment isEnvironment; IsEnvironment isEnvironment;
@ -124,7 +124,7 @@ public partial class DragDropSearch : Form
public static string? GetFaceEncoding(string file) public static string? GetFaceEncoding(string file)
{ {
string? result; string? result;
List<string> results = new(); List<string> results = [];
const string comment = "Comment: "; const string comment = "Comment: ";
if (File.Exists(file)) 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; return result;
} }
@ -156,7 +156,7 @@ public partial class DragDropSearch : Form
name = Path.GetFileNameWithoutExtension(path); name = Path.GetFileNameWithoutExtension(path);
Text = name; Text = name;
segments = name.Split('.'); segments = name.Split('.');
if (!_IdToItem.Any()) if (_IdToItem.Count == 0)
LoadData(); LoadData();
if (int.TryParse(segments[0], out int id) && _IdToItem.TryGetValue(id, out Item? item)) if (int.TryParse(segments[0], out int id) && _IdToItem.TryGetValue(id, out Item? item))
{ {

View File

@ -69,8 +69,8 @@ public class Configuration
if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime)); if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceMetadataLastWriteTimeToCreationTime));
if (configuration.ForceResizeLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceResizeLastWriteTimeToCreationTime)); if (configuration.ForceResizeLastWriteTimeToCreationTime is null) throw new NullReferenceException(nameof(configuration.ForceResizeLastWriteTimeToCreationTime));
if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions)); if (configuration.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions));
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ??= Array.Empty<string>(); configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ??= [];
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ??= Array.Empty<string>(); configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ??= [];
if (configuration.MixedYearRelativePaths is null) throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths)); if (configuration.MixedYearRelativePaths is null) throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths));
if (configuration.NumberOfJitters is null) throw new NullReferenceException(nameof(configuration.NumberOfJitters)); if (configuration.NumberOfJitters is null) throw new NullReferenceException(nameof(configuration.NumberOfJitters));
if (configuration.NumberOfTimesToUpsample is null) throw new NullReferenceException(nameof(configuration.NumberOfTimesToUpsample)); 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.PropertiesChangedForMetadata is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata));
if (configuration.PropertiesChangedForResize is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize)); if (configuration.PropertiesChangedForResize is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize));
if (configuration.Reverse is null) throw new NullReferenceException(nameof(configuration.Reverse)); if (configuration.Reverse is null) throw new NullReferenceException(nameof(configuration.Reverse));
configuration.SaveFaceLandmarkForOutputResolutions ??= Array.Empty<string>(); configuration.SaveFaceLandmarkForOutputResolutions ??= [];
if (configuration.SaveFullYearOfRandomFiles is null) throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles)); if (configuration.SaveFullYearOfRandomFiles is null) throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ??= Array.Empty<string>(); configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ??= [];
if (configuration.SaveResizedSubfiles is null) throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles)); if (configuration.SaveResizedSubfiles is null) throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
configuration.SaveShortcutsForOutputResolutions ??= Array.Empty<string>(); configuration.SaveShortcutsForOutputResolutions ??= [];
if (configuration.SkipSearch is null) throw new NullReferenceException(nameof(configuration.SkipSearch)); if (configuration.SkipSearch is null) throw new NullReferenceException(nameof(configuration.SkipSearch));
if (configuration.TestDistanceResults is null) throw new NullReferenceException(nameof(configuration.TestDistanceResults)); if (configuration.TestDistanceResults is null) throw new NullReferenceException(nameof(configuration.TestDistanceResults));
if (configuration.ValidResolutions is null) throw new NullReferenceException(nameof(configuration.ValidResolutions)); if (configuration.ValidResolutions is null) throw new NullReferenceException(nameof(configuration.ValidResolutions));

View File

@ -16,7 +16,7 @@ public class Program
private static Item[] GetFilterItems(Models.Configuration configuration, Container container) private static Item[] GetFilterItems(Models.Configuration configuration, Container container)
{ {
List<Item> results = new(); List<Item> results = [];
foreach (Item item in container.Items) foreach (Item item in container.Items)
{ {
if (item.ImageFileHolder is not null if (item.ImageFileHolder is not null
@ -29,14 +29,14 @@ public class Program
public static List<Item> GetItemCollection(Models.Configuration configuration, Container[] containers) public static List<Item> GetItemCollection(Models.Configuration configuration, Container[] containers)
{ {
List<Item> results = new(); List<Item> results = [];
Item[] filteredItems; Item[] filteredItems;
foreach (Container container in containers) foreach (Container container in containers)
{ {
if (!container.Items.Any()) if (container.Items.Count == 0)
continue; continue;
filteredItems = GetFilterItems(configuration, container); filteredItems = GetFilterItems(configuration, container);
if (!filteredItems.Any()) if (filteredItems.Length == 0)
continue; continue;
foreach (Item item in filteredItems) foreach (Item item in filteredItems)
results.Add(item); results.Add(item);

View File

@ -103,7 +103,7 @@ public partial class DragDropSetPropertyItem : Form
private List<Record> GetRecords(ASCIIEncoding asciiEncoding, int tagId, List<string> files) private List<Record> GetRecords(ASCIIEncoding asciiEncoding, int tagId, List<string> files)
{ {
List<Record> results = new(); List<Record> results = [];
int? id; int? id;
string? value; string? value;
string? message; string? message;
@ -179,9 +179,9 @@ public partial class DragDropSetPropertyItem : Form
short type = 1; short type = 1;
ASCIIEncoding asciiEncoding = new(); ASCIIEncoding asciiEncoding = new();
int xpKeywords = (int)IExif.Tags.XPKeywords; int xpKeywords = (int)IExif.Tags.XPKeywords;
ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty<Type>(), null) ?? throw new Exception(); ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, [], null) ?? throw new Exception();
List<Record> records = GetRecords(asciiEncoding, xpKeywords, files); List<Record> records = GetRecords(asciiEncoding, xpKeywords, files);
if (!records.Any()) if (records.Count == 0)
SetMessage("No data"); SetMessage("No data");
else else
SetPropertyItem(setTo, xpKeywords, type, asciiEncoding, constructorInfo, records); SetPropertyItem(setTo, xpKeywords, type, asciiEncoding, constructorInfo, records);
@ -190,7 +190,7 @@ public partial class DragDropSetPropertyItem : Form
private void SetPropertyItem(string[] paths, string setTo) private void SetPropertyItem(string[] paths, string setTo)
{ {
FileInfo fileInfo; FileInfo fileInfo;
List<string> files = new(); List<string> files = [];
foreach (string path in paths.OrderBy(l => l)) foreach (string path in paths.OrderBy(l => l))
{ {
fileInfo = new(path); fileInfo = new(path);
@ -203,7 +203,7 @@ public partial class DragDropSetPropertyItem : Form
files.AddRange(Directory.GetFiles(path, "*", SearchOption.TopDirectoryOnly)); files.AddRange(Directory.GetFiles(path, "*", SearchOption.TopDirectoryOnly));
} }
} }
if (!files.Any()) if (files.Count == 0)
SetMessage("No data"); SetMessage("No data");
else else
SetPropertyItem(setTo, files); SetPropertyItem(setTo, files);
@ -221,7 +221,7 @@ public partial class DragDropSetPropertyItem : Form
{ {
try 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); SetPropertyItem(paths);
else else
{ {

View File

@ -142,7 +142,7 @@ public class DuplicateSearch
private static Dictionary<int, List<MappingFromItem?>> GetIdToCollection(string argZero, Configuration configuration, bool argZeroIsConfigurationRootDirectory, Container[] containers, string destinationRoot, List<int> preloadIds) private static Dictionary<int, List<MappingFromItem?>> GetIdToCollection(string argZero, Configuration configuration, bool argZeroIsConfigurationRootDirectory, Container[] containers, string destinationRoot, List<int> preloadIds)
{ {
Dictionary<int, List<MappingFromItem?>> results = new(); Dictionary<int, List<MappingFromItem?>> results = [];
string directory; string directory;
const int zero = 0; const int zero = 0;
Item[] filteredItems; Item[] filteredItems;
@ -151,19 +151,19 @@ public class DuplicateSearch
MappingFromItem? mappingFromItem; MappingFromItem? mappingFromItem;
List<MappingFromItem?>? collection; List<MappingFromItem?>? collection;
const string duplicates = "-Duplicate(s)"; const string duplicates = "-Duplicate(s)";
if (containers.Any()) if (containers.Length != 0)
{ {
foreach (int id in preloadIds) foreach (int id in preloadIds)
results.Add(id, new() { null }); results.Add(id, [null]);
} }
foreach (Container container in containers) foreach (Container container in containers)
{ {
if (!container.Items.Any()) if (container.Items.Count == 0)
continue; continue;
if (!argZeroIsConfigurationRootDirectory && !container.SourceDirectory.StartsWith(argZero)) if (!argZeroIsConfigurationRootDirectory && !container.SourceDirectory.StartsWith(argZero))
continue; continue;
filteredItems = Shared.Models.Stateless.Methods.IContainer.GetFilterItems(configuration, container); filteredItems = Shared.Models.Stateless.Methods.IContainer.GetFilterItems(configuration, container);
if (!filteredItems.Any()) if (filteredItems.Length == 0)
continue; continue;
containerDateTimes = Shared.Models.Stateless.Methods.IContainer.GetContainerDateTimes(filteredItems); containerDateTimes = Shared.Models.Stateless.Methods.IContainer.GetContainerDateTimes(filteredItems);
foreach (Item item in filteredItems) foreach (Item item in filteredItems)
@ -175,7 +175,7 @@ public class DuplicateSearch
continue; continue;
} }
if (!results.TryGetValue(item.Property.Id.Value, out collection)) 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)) if (collection is null && !results.TryGetValue(item.Property.Id.Value, out collection))
continue; continue;
if (collection.Count == 0) if (collection.Count == 0)
@ -188,7 +188,7 @@ public class DuplicateSearch
if (mappingFromItem is not null) if (mappingFromItem is not null)
{ {
resizedFileHolder = new(mappingFromItem.ResizedFileHolder.FullName.Replace($"0{duplicates}", $"1{duplicates}")); 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<string>(), 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)); 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<int, List<MappingFromItem?>> idToCollection) private static List<(FileHolder ImageFileHolder, string Destination)> GetCollectionAndCreateDirectories(Dictionary<int, List<MappingFromItem?>> idToCollection)
{ {
List<(FileHolder ImageFileHolder, string Destination)> results = new(); List<(FileHolder ImageFileHolder, string Destination)> results = [];
List<string> collection = new(); List<string> collection = [];
foreach (KeyValuePair<int, List<MappingFromItem?>> keyValuePair in idToCollection) foreach (KeyValuePair<int, List<MappingFromItem?>> keyValuePair in idToCollection)
{ {
foreach (MappingFromItem? mappingFromItem in keyValuePair.Value) foreach (MappingFromItem? mappingFromItem in keyValuePair.Value)
@ -225,7 +225,7 @@ public class DuplicateSearch
private static List<int> GetPreloadIds(string destinationRoot) private static List<int> GetPreloadIds(string destinationRoot)
{ {
List<int> results = new(); List<int> results = [];
string[] lines; string[] lines;
string preloadDirectory = Path.Combine(destinationRoot, "Preload"); string preloadDirectory = Path.Combine(destinationRoot, "Preload");
if (!Directory.Exists(preloadDirectory)) if (!Directory.Exists(preloadDirectory))

View File

@ -60,7 +60,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -68,7 +68,7 @@ public class D_Face
float[] rectangleIntersectMinimums) float[] rectangleIntersectMinimums)
{ {
_ArgZero = argZero; _ArgZero = argZero;
_FileGroups = new(); _FileGroups = [];
_ImageCodecInfo = imageCodecInfo; _ImageCodecInfo = imageCodecInfo;
_EncoderParameters = encoderParameters; _EncoderParameters = encoderParameters;
_FileNameExtension = filenameExtension; _FileNameExtension = filenameExtension;
@ -87,7 +87,7 @@ public class D_Face
_Model = model; _Model = model;
_PredictorModel = predictorModel; _PredictorModel = predictorModel;
_ModelParameter = modelParameter; _ModelParameter = modelParameter;
ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty<Type>(), null) ?? throw new Exception(); ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, [], null) ?? throw new Exception();
_ConstructorInfo = constructorInfo; _ConstructorInfo = constructorInfo;
_WriteIndentedAndWhenWritingNull = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }; _WriteIndentedAndWhenWritingNull = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull };
} }
@ -101,7 +101,7 @@ public class D_Face
public void Update(string dResultsFullGroupDirectory) public void Update(string dResultsFullGroupDirectory)
{ {
_FileGroups.Clear(); _FileGroups.Clear();
Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultCollection, _PropertyConfiguration.ResultContent }); Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, [_PropertyConfiguration.ResultCollection, _PropertyConfiguration.ResultContent]);
foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs) foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs)
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value); _FileGroups.Add(keyValuePair.Key, keyValuePair.Value);
} }
@ -219,7 +219,7 @@ public class D_Face
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfJitters)); throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfJitters));
if (_PropertyConfiguration.NumberOfTimesToUpsample is null) if (_PropertyConfiguration.NumberOfTimesToUpsample is null)
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfTimesToUpsample)); throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfTimesToUpsample));
List<Shared.Models.Face> results = new(); List<Shared.Models.Face> results = [];
FaceRecognitionDotNet.Image? unknownImage; FaceRecognitionDotNet.Image? unknownImage;
try try
{ unknownImage = FaceRecognition.LoadImageFile(mappingFromItem.ResizedFileHolder.FullName); } { unknownImage = FaceRecognition.LoadImageFile(mappingFromItem.ResizedFileHolder.FullName); }
@ -262,11 +262,11 @@ public class D_Face
private static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(string outputResolution, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers, Dictionary<string, int[]> outputResolutionToResize, List<Shared.Models.Face> faces) private static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(string outputResolution, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers, Dictionary<string, int[]> outputResolutionToResize, List<Shared.Models.Face> faces)
{ {
List<LocationContainer<MetadataExtractor.Directory>> results = new(); List<LocationContainer<MetadataExtractor.Directory>> results = [];
string? json; string? json;
Location? location; Location? location;
Rectangle? rectangle; Rectangle? rectangle;
List<int> skip = new(); List<int> skip = [];
OutputResolution? outputResolutionCheck = null; OutputResolution? outputResolutionCheck = null;
(int outputResolutionWidth, int outputResolutionHeight, int outputResolutionOrientation) = Resize.Models.Stateless.Methods.IResize.Get(outputResolution, outputResolutionToResize); (int outputResolutionWidth, int outputResolutionHeight, int outputResolutionOrientation) = Resize.Models.Stateless.Methods.IResize.Get(outputResolution, outputResolutionToResize);
foreach (Shared.Models.Face face in faces) foreach (Shared.Models.Face face in faces)
@ -323,7 +323,7 @@ public class D_Face
throw new NullReferenceException(nameof(dResultsFullGroupDirectory)); throw new NullReferenceException(nameof(dResultsFullGroupDirectory));
string? json; string? json;
List<Location>? locations; List<Location>? 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<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList(); List<DateTime> 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); (_, 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")); 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<LocationContainer<MetadataExtractor.Directory>> collection; List<LocationContainer<MetadataExtractor.Directory>> collection;
if (results is null || locationContainers is null) if (results is null || locationContainers is null)
collection = new(); collection = [];
else else
collection = GetLocationContainers(outputResolution, locationContainers, outputResolutionToResize, results); collection = GetLocationContainers(outputResolution, locationContainers, outputResolutionToResize, results);
if (!_LoadPhotoPrismLocations || mappingFromPhotoPrismCollection is null || results is null) 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<Tuple<string, DateTime>> subFileTuples, List<string> parseExceptions, MappingFromItem mappingFromItem, List<Shared.Models.Face> faces) public List<(Shared.Models.Face, FileInfo?, string, bool)> SaveFaces(string f, string dResultsFullGroupDirectory, List<Tuple<string, DateTime>> subFileTuples, List<string> parseExceptions, MappingFromItem mappingFromItem, List<Shared.Models.Face> faces)
{ {
List<(Shared.Models.Face, FileInfo?, string, bool Save)> results = new(); List<(Shared.Models.Face, FileInfo?, string, bool Save)> results = [];
bool save; bool save;
FileInfo fileInfo; FileInfo fileInfo;
string deterministicHashCodeKey; 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<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList(); List<DateTime> 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); (_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.Name);
string directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], mappingFromItem.ImageFileHolder.NameWithoutExtension); string directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], mappingFromItem.ImageFileHolder.NameWithoutExtension);

View File

@ -32,11 +32,11 @@ public class D2_FaceParts
public D2_FaceParts(IPropertyConfiguration propertyConfiguration, ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension, bool checkDFaceAndUpWriteDates, bool overrideForFaceLandmarkImages) public D2_FaceParts(IPropertyConfiguration propertyConfiguration, ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension, bool checkDFaceAndUpWriteDates, bool overrideForFaceLandmarkImages)
{ {
_FileGroups = new(); _FileGroups = [];
_ImageCodecInfo = imageCodecInfo; _ImageCodecInfo = imageCodecInfo;
_EncoderParameters = encoderParameters; _EncoderParameters = encoderParameters;
_FileNameExtension = filenameExtension; _FileNameExtension = filenameExtension;
_AngleBracketCollection = new List<string>(); _AngleBracketCollection = [];
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates; _CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates;
_OverrideForFaceLandmarkImages = overrideForFaceLandmarkImages; _OverrideForFaceLandmarkImages = overrideForFaceLandmarkImages;
@ -51,7 +51,7 @@ public class D2_FaceParts
public void Update(string dResultsFullGroupDirectory) public void Update(string dResultsFullGroupDirectory)
{ {
_FileGroups.Clear(); _FileGroups.Clear();
Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultContent }); Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, [_PropertyConfiguration.ResultContent]);
foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs) foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs)
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value); _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) public string GetFacePartsDirectory(Configuration configuration, string dResultsFullGroupDirectory, Item item, bool includeNameWithoutExtension)
{ {
string result; string result;
bool angleBracketCollectionAny = _AngleBracketCollection.Any(); bool angleBracketCollectionAny = _AngleBracketCollection.Count != 0;
if (!angleBracketCollectionAny) if (!angleBracketCollectionAny)
{ {
if (item.ImageFileHolder.DirectoryName is null) if (item.ImageFileHolder.DirectoryName is null)
@ -128,12 +128,12 @@ public class D2_FaceParts
// Rotate the image's corners to see how big // Rotate the image's corners to see how big
// it will be after rotation. // it will be after rotation.
PointF[] points = PointF[] points =
{ [
new (0, 0), new(0, 0),
new (bitmap.Width, 0), new(bitmap.Width, 0),
new (bitmap.Width, bitmap.Height), new(bitmap.Width, bitmap.Height),
new (0, bitmap.Height), new(0, bitmap.Height),
}; ];
rotate_at_origin.TransformPoints(points); rotate_at_origin.TransformPoints(points);
float xMinimum, xMaximum, yMinimum, yMaximum; float xMinimum, xMaximum, yMinimum, yMaximum;
GetPointBounds(points, out xMinimum, out xMaximum, out yMinimum, out 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 (Image image = Image.FromFile(resizedFileHolder.FullName))
{ {
using Graphics graphic = Graphics.FromImage(image); 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) if (face.Location is null)
continue; continue;
@ -254,8 +254,8 @@ public class D2_FaceParts
long ticks = DateTime.Now.Ticks; long ticks = DateTime.Now.Ticks;
string deterministicHashCodeKey; string deterministicHashCodeKey;
bool updateDateWhenMatches = false; bool updateDateWhenMatches = false;
List<(Shared.Models.Face, string, string)> collection = new(); List<(Shared.Models.Face, string, string)> collection = [];
string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize), nameof(D_Face) }; string[] changesFrom = [nameof(A_Property), nameof(B_Metadata), nameof(C_Resize), nameof(D_Face)];
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList(); List<DateTime> 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); (_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.Name);
string directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], mappingFromItem.ImageFileHolder.NameWithoutExtension); string directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], mappingFromItem.ImageFileHolder.NameWithoutExtension);
@ -283,11 +283,11 @@ public class D2_FaceParts
check = true; check = true;
else if (saveRotated && !rotatedFileInfo.Exists) else if (saveRotated && !rotatedFileInfo.Exists)
check = true; check = true;
else if (_CheckDFaceAndUpWriteDates && dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime) else if (_CheckDFaceAndUpWriteDates && dateTimes.Count != 0 && dateTimes.Max() > fileInfo.LastWriteTime)
check = true; check = true;
if (check && !updateDateWhenMatches) 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(); dateTime = !updateDateWhenMatches ? null : dateTimes.Max();
} }
} }
@ -308,7 +308,7 @@ public class D2_FaceParts
using Graphics graphic = Graphics.FromImage(image); using Graphics graphic = Graphics.FromImage(image);
foreach ((Shared.Models.Face face, FileInfo? fileInfo, string _, bool _) in faceCollection) 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; continue;
pen = face.Mapping?.MappingFromPerson is null ? Pens.Red : Pens.GreenYellow; pen = face.Mapping?.MappingFromPerson is null ? Pens.Red : Pens.GreenYellow;
try try
@ -363,7 +363,7 @@ public class D2_FaceParts
{ {
bool hasNotMapped = GetNotMapped(facePartsCollectionDirectory, faceCollection); bool hasNotMapped = GetNotMapped(facePartsCollectionDirectory, faceCollection);
string fileName = Path.Combine(facePartsCollectionDirectory, $"{mappingFromItem.ImageFileHolder.Name}{_FileNameExtension}"); 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); FileInfo fileInfo = new(fileName);
if (save && (!fileInfo.Exists || new TimeSpan(DateTime.Now.Ticks - fileInfo.LastWriteTime.Ticks).TotalDays > 10)) if (save && (!fileInfo.Exists || new TimeSpan(DateTime.Now.Ticks - fileInfo.LastWriteTime.Ticks).TotalDays > 10))
{ {

View File

@ -12,7 +12,7 @@ internal sealed class CnnFaceDetectionModelV1
public static IEnumerable<MModRect> Detect(LossMmod net, Image image, int upsampleNumTimes) public static IEnumerable<MModRect> Detect(LossMmod net, Image image, int upsampleNumTimes)
{ {
using PyramidDown? pyr = new(2); using PyramidDown? pyr = new(2);
List<MModRect>? rects = new(); List<MModRect>? rects = [];
// Copy the data into dlib based objects // Copy the data into dlib based objects
using Matrix<RgbPixel>? matrix = new(); using Matrix<RgbPixel>? matrix = new();
@ -52,8 +52,8 @@ internal sealed class CnnFaceDetectionModelV1
public static IEnumerable<IEnumerable<MModRect>> DetectMulti(LossMmod net, IEnumerable<Image> images, int upsampleNumTimes, int batchSize = 128) public static IEnumerable<IEnumerable<MModRect>> DetectMulti(LossMmod net, IEnumerable<Image> images, int upsampleNumTimes, int batchSize = 128)
{ {
List<Matrix<RgbPixel>>? destImages = new(); List<Matrix<RgbPixel>>? destImages = [];
List<IEnumerable<MModRect>>? allRects = new(); List<IEnumerable<MModRect>>? allRects = [];
try try
{ {
@ -86,7 +86,7 @@ internal sealed class CnnFaceDetectionModelV1
OutputLabels<IEnumerable<MModRect>>? dets = net.Operator(destImages, (ulong)batchSize); OutputLabels<IEnumerable<MModRect>>? dets = net.Operator(destImages, (ulong)batchSize);
foreach (IEnumerable<MModRect>? det in dets) foreach (IEnumerable<MModRect>? det in dets)
{ {
List<MModRect>? rects = new(); List<MModRect>? rects = [];
foreach (MModRect? d in det) foreach (MModRect? d in det)
{ {
DRectangle drect = pyr.RectDown(new DRectangle(d.Rect), (uint)upsampleNumTimes); DRectangle drect = pyr.RectDown(new DRectangle(d.Rect), (uint)upsampleNumTimes);

View File

@ -10,14 +10,14 @@ internal sealed class FaceRecognitionModelV1
public static Matrix<double> ComputeFaceDescriptor(LossMetric net, Image img, FullObjectDetection face, int numberOfJitters) public static Matrix<double> ComputeFaceDescriptor(LossMetric net, Image img, FullObjectDetection face, int numberOfJitters)
{ {
FullObjectDetection[]? faces = new[] { face }; FullObjectDetection[]? faces = [face];
return ComputeFaceDescriptors(net, img, faces, numberOfJitters).First(); return ComputeFaceDescriptors(net, img, faces, numberOfJitters).First();
} }
public static IEnumerable<Matrix<double>> ComputeFaceDescriptors(LossMetric net, Image img, IEnumerable<FullObjectDetection> faces, int numberOfJitters) public static IEnumerable<Matrix<double>> ComputeFaceDescriptors(LossMetric net, Image img, IEnumerable<FullObjectDetection> faces, int numberOfJitters)
{ {
Image[]? batchImage = new[] { img }; Image[]? batchImage = [img];
IEnumerable<FullObjectDetection>[]? batchFaces = new[] { faces }; IEnumerable<FullObjectDetection>[]? batchFaces = [faces];
return BatchComputeFaceDescriptors(net, batchImage, batchFaces, numberOfJitters).First(); return BatchComputeFaceDescriptors(net, batchImage, batchFaces, numberOfJitters).First();
} }
@ -37,7 +37,7 @@ internal sealed class FaceRecognitionModelV1
} }
List<Array<Matrix<RgbPixel>>>? faceChipsArray = new(batchImages.Count); List<Array<Matrix<RgbPixel>>>? faceChipsArray = new(batchImages.Count);
List<Matrix<RgbPixel>>? faceChips = new(); List<Matrix<RgbPixel>>? faceChips = [];
for (int i = 0; i < batchImages.Count; ++i) for (int i = 0; i < batchImages.Count; ++i)
{ {
IEnumerable<FullObjectDetection>? faces = batchFaces[i]; IEnumerable<FullObjectDetection>? faces = batchFaces[i];
@ -56,9 +56,9 @@ internal sealed class FaceRecognitionModelV1
det.Dispose(); det.Dispose();
} }
List<List<Matrix<double>>>? faceDescriptors = new(); List<List<Matrix<double>>>? faceDescriptors = [];
for (int i = 0, count = batchImages.Count; i < count; i++) for (int i = 0, count = batchImages.Count; i < count; i++)
faceDescriptors.Add(new List<Matrix<double>>()); faceDescriptors.Add([]);
if (numberOfJitters <= 1) if (numberOfJitters <= 1)
{ {
@ -115,7 +115,7 @@ internal sealed class FaceRecognitionModelV1
private static IEnumerable<Matrix<RgbPixel>> JitterImage(Matrix<RgbPixel> img, int numberOfJitters) private static IEnumerable<Matrix<RgbPixel>> JitterImage(Matrix<RgbPixel> img, int numberOfJitters)
{ {
List<Matrix<RgbPixel>>? crops = new(); List<Matrix<RgbPixel>>? crops = [];
for (int i = 0; i < numberOfJitters; ++i) for (int i = 0; i < numberOfJitters; ++i)
crops.Add(DlibDotNet.Dlib.JitterImage(img, _Rand)); crops.Add(DlibDotNet.Dlib.JitterImage(img, _Rand));

View File

@ -15,7 +15,7 @@ internal sealed class SimpleObjectDetector
List<double> detectionConfidences, List<double> detectionConfidences,
List<ulong> weightIndices) List<ulong> weightIndices)
{ {
List<Rectangle>? rectangles = new(); List<Rectangle>? rectangles = [];
if (img.Mode == Mode.Greyscale) if (img.Mode == Mode.Greyscale)
{ {
@ -127,8 +127,8 @@ internal sealed class SimpleObjectDetector
detector.ThrowIfDisposed(); detector.ThrowIfDisposed();
image.ThrowIfDisposed(); image.ThrowIfDisposed();
List<double>? detectionConfidences = new(); List<double>? detectionConfidences = [];
List<ulong>? weightIndices = new(); List<ulong>? weightIndices = [];
const double adjustThreshold = 0.0; const double adjustThreshold = 0.0;
Rectangle[]? rects = RunDetectorWithUpscale1(detector, Rectangle[]? rects = RunDetectorWithUpscale1(detector,

View File

@ -71,15 +71,13 @@ public class FaceRecognition : DisposableObject
private static FacePoint[] Join(IEnumerable<FacePoint> facePoints1, IEnumerable<FacePoint> facePoints2) private static FacePoint[] Join(IEnumerable<FacePoint> facePoints1, IEnumerable<FacePoint> facePoints2)
{ {
List<FacePoint> results = new(); List<FacePoint> results = [.. facePoints1, .. facePoints2];
results.AddRange(facePoints1);
results.AddRange(facePoints2);
return results.ToArray(); return results.ToArray();
} }
private List<(FacePart, FacePoint[])> GetFaceParts(FullObjectDetection fullObjectDetection) private List<(FacePart, FacePoint[])> GetFaceParts(FullObjectDetection fullObjectDetection)
{ {
List<(FacePart, FacePoint[])> results = new(); List<(FacePart, FacePoint[])> results = [];
FacePoint[] facePoints = Enumerable.Range(0, (int)fullObjectDetection.Parts) FacePoint[] facePoints = Enumerable.Range(0, (int)fullObjectDetection.Parts)
.Select(index => new FacePoint(index, fullObjectDetection.GetPart((uint)index).X, fullObjectDetection.GetPart((uint)index).Y)) .Select(index => new FacePoint(index, fullObjectDetection.GetPart((uint)index).X, fullObjectDetection.GetPart((uint)index).Y))
.ToArray(); .ToArray();
@ -141,7 +139,7 @@ public class FaceRecognition : DisposableObject
throw new NullReferenceException(nameof(image)); throw new NullReferenceException(nameof(image));
image.ThrowIfDisposed(); image.ThrowIfDisposed();
ThrowIfDisposed(); ThrowIfDisposed();
List<Location> results = new(); List<Location> results = [];
System.Drawing.Rectangle rectangle; System.Drawing.Rectangle rectangle;
IEnumerable<MModRect> mModRects = GetMModRects(image); IEnumerable<MModRect> mModRects = GetMModRects(image);
foreach (MModRect? mModRect in mModRects) foreach (MModRect? mModRect in mModRects)
@ -156,7 +154,7 @@ public class FaceRecognition : DisposableObject
private List<FullObjectDetection> GetFullObjectDetections(Image image, List<Location> locations) private List<FullObjectDetection> GetFullObjectDetections(Image image, List<Location> locations)
{ {
List<FullObjectDetection> results = new(); List<FullObjectDetection> results = [];
if (_PredictorModel == PredictorModel.Custom) if (_PredictorModel == PredictorModel.Custom)
{ {
if (CustomFaceLandmarkDetector is null) if (CustomFaceLandmarkDetector is null)
@ -182,9 +180,9 @@ public class FaceRecognition : DisposableObject
private List<Location> GetLocations(Image image) private List<Location> GetLocations(Image image)
{ {
List<Location> results = new(); List<Location> results = [];
MModRect[] mModRects = GetMModRects(image); MModRect[] mModRects = GetMModRects(image);
if (mModRects.Any()) if (mModRects.Length != 0)
{ {
Location location; Location location;
System.Drawing.Rectangle rectangle; System.Drawing.Rectangle rectangle;
@ -201,7 +199,7 @@ public class FaceRecognition : DisposableObject
public List<(Location, FaceEncoding?, Dictionary<FacePart, FacePoint[]>?)> GetCollection(Image image, List<Location>? locations, bool includeFaceEncoding, bool includeFaceParts) public List<(Location, FaceEncoding?, Dictionary<FacePart, FacePoint[]>?)> GetCollection(Image image, List<Location>? locations, bool includeFaceEncoding, bool includeFaceParts)
{ {
List<(Location, FaceEncoding?, Dictionary<FacePart, FacePoint[]>?)> results = new(); List<(Location, FaceEncoding?, Dictionary<FacePart, FacePoint[]>?)> results = [];
if (image is null) if (image is null)
throw new NullReferenceException(nameof(image)); throw new NullReferenceException(nameof(image));
image.ThrowIfDisposed(); image.ThrowIfDisposed();
@ -210,14 +208,14 @@ public class FaceRecognition : DisposableObject
throw new NotSupportedException("FaceRecognition.PredictorModel.Custom is not supported."); throw new NotSupportedException("FaceRecognition.PredictorModel.Custom is not supported.");
if (locations is null) if (locations is null)
locations = GetLocations(image); locations = GetLocations(image);
else if (!locations.Any()) else if (locations.Count == 0)
locations.AddRange(GetLocations(image)); locations.AddRange(GetLocations(image));
List<FullObjectDetection> fullObjectDetections = GetFullObjectDetections(image, locations); List<FullObjectDetection> fullObjectDetections = GetFullObjectDetections(image, locations);
if (fullObjectDetections.Count != locations.Count) if (fullObjectDetections.Count != locations.Count)
throw new Exception(); throw new Exception();
List<(Location Location, List<FaceEncoding?> FaceEncodings, List<List<(FacePart, FacePoint[])>> FaceParts)> collection = new(); List<(Location Location, List<FaceEncoding?> FaceEncodings, List<List<(FacePart, FacePoint[])>> FaceParts)> collection = [];
foreach (Location location in locations) foreach (Location location in locations)
collection.Add(new(location, new(), new())); collection.Add(new(location, [], []));
if (locations.Count != collection.Count) if (locations.Count != collection.Count)
throw new Exception(); throw new Exception();
if (!includeFaceEncoding) if (!includeFaceEncoding)
@ -239,7 +237,7 @@ public class FaceRecognition : DisposableObject
if (!includeFaceParts) if (!includeFaceParts)
{ {
for (int i = 0; i < collection.Count; i++) for (int i = 0; i < collection.Count; i++)
collection[i].FaceParts.Add(new()); collection[i].FaceParts.Add([]);
} }
else else
{ {
@ -258,11 +256,11 @@ public class FaceRecognition : DisposableObject
{ {
if (faceEncodings.Count != 1 || faceParts.Count != 1) if (faceEncodings.Count != 1 || faceParts.Count != 1)
continue; continue;
if (!faceParts[indexZero].Any()) if (faceParts[indexZero].Count == 0)
results.Add(new(location, faceEncodings[indexZero], null)); results.Add(new(location, faceEncodings[indexZero], null));
else else
{ {
keyValuePairs = new(); keyValuePairs = [];
foreach ((FacePart facePart, FacePoint[] facePoints) in faceParts[indexZero]) foreach ((FacePart facePart, FacePoint[] facePoints) in faceParts[indexZero])
keyValuePairs.Add(facePart, facePoints); keyValuePairs.Add(facePart, facePoints);
results.Add(new(location, faceEncodings[indexZero], keyValuePairs)); results.Add(new(location, faceEncodings[indexZero], keyValuePairs));
@ -412,7 +410,7 @@ public class FaceRecognition : DisposableObject
public static List<FaceDistance> FaceDistances(ReadOnlyCollection<FaceDistance> faceDistances, FaceDistance faceDistanceToCompare) public static List<FaceDistance> FaceDistances(ReadOnlyCollection<FaceDistance> faceDistances, FaceDistance faceDistanceToCompare)
{ {
List<FaceDistance> results = new(); List<FaceDistance> results = [];
if (faceDistances is null) if (faceDistances is null)
throw new NullReferenceException(nameof(faceDistances)); throw new NullReferenceException(nameof(faceDistances));
if (faceDistances.Count != 0) if (faceDistances.Count != 0)

View File

@ -25,6 +25,9 @@ namespace View_by_Distance.Instance;
public partial class DlibDotNet public partial class DlibDotNet
{ {
[GeneratedRegex(@"[\\,\/,\:,\*,\?,\"",\<,\>,\|]")]
private static partial Regex CameraRegex();
private readonly D_Face _Faces; private readonly D_Face _Faces;
private readonly C_Resize _Resize; private readonly C_Resize _Resize;
private readonly F_Random _Random; private readonly F_Random _Random;
@ -58,8 +61,8 @@ public partial class DlibDotNet
_AppSettings = appSettings; _AppSettings = appSettings;
_IsEnvironment = isEnvironment; _IsEnvironment = isEnvironment;
long ticks = DateTime.Now.Ticks; long ticks = DateTime.Now.Ticks;
_Exceptions = new List<string>(); _Exceptions = [];
_JLinkResolvedDirectories = new(); _JLinkResolvedDirectories = [];
if (ticks.ToString().Last() == '0') if (ticks.ToString().Last() == '0')
ticks += 1; ticks += 1;
ReadOnlyCollection<PersonContainer> personContainers; ReadOnlyCollection<PersonContainer> personContainers;
@ -203,7 +206,7 @@ public partial class DlibDotNet
{ {
string[] sourceDirectoryNames; string[] sourceDirectoryNames;
if (args.Count == 0) if (args.Count == 0)
sourceDirectoryNames = Array.Empty<string>(); sourceDirectoryNames = [];
else else
{ {
string? century; string? century;
@ -325,7 +328,7 @@ public partial class DlibDotNet
(t, containers) = Shared.Models.Stateless.Methods.IContainer.GetContainers(_Configuration.PropertyConfiguration, aPropertySingletonDirectory, filesCollectionRootDirectory, filesCollection); (t, containers) = Shared.Models.Stateless.Methods.IContainer.GetContainers(_Configuration.PropertyConfiguration, aPropertySingletonDirectory, filesCollectionRootDirectory, filesCollection);
progressBar.Tick(); 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); B_Metadata metadata = new(_Configuration.PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory);
mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, _Distance, personContainers, ticks, a2PeopleContentDirectory, a2PeopleSingletonDirectory, eDistanceContentDirectory); 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); 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); 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); (int season, string seasonName) = Shared.Models.Stateless.Methods.IProperty.GetSeason(dateTime.DayOfYear);
FileSystemInfo fileSystemInfo = new DirectoryInfo(eDistanceContentDirectory); FileSystemInfo fileSystemInfo = new DirectoryInfo(eDistanceContentDirectory);
string[] checkDirectories = new string[] string[] checkDirectories =
{ [
Path.Combine(rootDirectory, "Ancestry"), Path.Combine(rootDirectory, "Ancestry"),
Path.Combine(rootDirectory, "Facebook"), Path.Combine(rootDirectory, "Facebook"),
Path.Combine(rootDirectory, "LinkedIn"), Path.Combine(rootDirectory, "LinkedIn"),
rootDirectory, rootDirectory,
}; ];
foreach (string checkDirectory in checkDirectories) foreach (string checkDirectory in checkDirectories)
{ {
if (checkDirectory == rootDirectory) if (checkDirectory == rootDirectory)
@ -487,7 +490,7 @@ public partial class DlibDotNet
string c2ResultsFullGroupDirectory; string c2ResultsFullGroupDirectory;
string d2ResultsFullGroupDirectory; string d2ResultsFullGroupDirectory;
int containersLength = containers.Length; int containersLength = containers.Length;
List<Tuple<string, DateTime>> sourceDirectoryChanges = new(); List<Tuple<string, DateTime>> sourceDirectoryChanges = [];
int maxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism; int maxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism;
string dResultsDateGroupDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(D_Face)); string dResultsDateGroupDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(D_Face));
foreach (string outputResolution in _Configuration.OutputResolutions) foreach (string outputResolution in _Configuration.OutputResolutions)
@ -565,11 +568,11 @@ public partial class DlibDotNet
bool anyValidFaces; bool anyValidFaces;
string focusRelativePath; string focusRelativePath;
bool? isFocusRelativePath; bool? isFocusRelativePath;
List<int> distinct = new(); List<int> distinct = [];
DateTime[] containerDateTimes; DateTime[] containerDateTimes;
IEnumerable<Item> filteredItems; IEnumerable<Item> filteredItems;
MappingFromItem mappingFromItem; MappingFromItem mappingFromItem;
List<Mapping> mappingCollection = new(); List<Mapping> mappingCollection = [];
foreach (Container container in containers) foreach (Container container in containers)
{ {
if (container.Items.Count == 0) if (container.Items.Count == 0)
@ -641,9 +644,9 @@ public partial class DlibDotNet
string directory; string directory;
bool? isWrongYear; bool? isWrongYear;
List<DateTime> dateTimes; List<DateTime> dateTimes;
List<string> distinct = new(); List<string> distinct = [];
WindowsShortcut windowsShortcut; WindowsShortcut windowsShortcut;
List<(string, string, string)> collection = new(); List<(string, string, string)> collection = [];
foreach (Item item in distinctFilteredItems) foreach (Item item in distinctFilteredItems)
{ {
if (item.Property?.Id is null || item.ImageFileHolder.LastWriteTime is null) 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) if (isWrongYear is null || !isWrongYear.Value)
continue; continue;
// Remove-Item -LiteralPath "\\?\D:\Tmp\a\EX-Z70 " // 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); 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"); 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)); collection.Add((item.ImageFileHolder.FullName, directory, fileName));
@ -914,9 +917,9 @@ public partial class DlibDotNet
long ticks = DateTime.Now.Ticks; long ticks = DateTime.Now.Ticks;
DateTime dateTime = DateTime.Now; DateTime dateTime = DateTime.Now;
Shared.Models.Property? property; Shared.Models.Property? property;
List<string> parseExceptions = new(); List<string> parseExceptions = [];
List<Tuple<string, DateTime>> subFileTuples = new(); List<Tuple<string, DateTime>> subFileTuples = [];
string[] changesFrom = new string[] { nameof(A_Property) }; string[] changesFrom = [nameof(A_Property)];
FileHolder resizedFileHolder = _Resize.GetResizedFileHolder(cResultsFullGroupDirectory, item, outputResolutionHasNumber); FileHolder resizedFileHolder = _Resize.GetResizedFileHolder(cResultsFullGroupDirectory, item, outputResolutionHasNumber);
ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers = mapLogic.GetLocationContainers(item); ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> 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()) 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) if (_Configuration.SaveResizedSubfiles)
_Resize.SaveResizedSubfile(_Configuration.PropertyConfiguration, outputResolution, cResultsFullGroupDirectory, subFileTuples, item, item.Property, mappingFromItem, outputResolutionToResize); _Resize.SaveResizedSubfile(_Configuration.PropertyConfiguration, outputResolution, cResultsFullGroupDirectory, subFileTuples, item, item.Property, mappingFromItem, outputResolutionToResize);
if (!_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Contains(outputResolution)) if (!_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Contains(outputResolution))
faces = new(); faces = [];
else if (!mappingFromItem.ResizedFileHolder.Exists && !File.Exists(mappingFromItem.ResizedFileHolder.FullName)) else if (!mappingFromItem.ResizedFileHolder.Exists && !File.Exists(mappingFromItem.ResizedFileHolder.FullName))
faces = new(); faces = [];
else else
{ {
List<MappingFromPhotoPrism>? mappingFromPhotoPrismCollection; List<MappingFromPhotoPrism>? mappingFromPhotoPrismCollection;
@ -1187,7 +1190,7 @@ public partial class DlibDotNet
ReadOnlyCollection<FaceDistanceContainer> faceDistanceContainers = E_Distance.GetFaceDistanceContainers(distinctFilteredFaces); ReadOnlyCollection<FaceDistanceContainer> faceDistanceContainers = E_Distance.GetFaceDistanceContainers(distinctFilteredFaces);
if (faceDistanceContainers.Count > 0) if (faceDistanceContainers.Count > 0)
{ {
List<FaceDistance> faceDistanceEncodings = new(); List<FaceDistance> faceDistanceEncodings = [];
foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers) foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers)
{ {
if (faceDistanceContainer.FaceDistance.Encoding is null) if (faceDistanceContainer.FaceDistance.Encoding is null)
@ -1203,7 +1206,7 @@ public partial class DlibDotNet
ProgressBar progressBar; ProgressBar progressBar;
string filesCollectionRootDirectory = _Configuration.PropertyConfiguration.RootDirectory; string filesCollectionRootDirectory = _Configuration.PropertyConfiguration.RootDirectory;
(string cResultsFullGroupDirectory, _, _, _) = GetResultsFullGroupDirectories(outputResolution); (string cResultsFullGroupDirectory, _, _, _) = GetResultsFullGroupDirectories(outputResolution);
IReadOnlyDictionary<string, string[]> fileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_Configuration.PropertyConfiguration, cResultsFullGroupDirectory, new string[] { _Configuration.PropertyConfiguration.ResultContent }); IReadOnlyDictionary<string, string[]> fileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_Configuration.PropertyConfiguration, cResultsFullGroupDirectory, [_Configuration.PropertyConfiguration.ResultContent]);
List<string[]> filesCollection = IDirectory.GetFilesCollection(filesCollectionRootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage: false); List<string[]> filesCollection = IDirectory.GetFilesCollection(filesCollectionRootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage: false);
int count = filesCollection.Select(l => l.Length).Sum(); 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)"; string message = $") Selecting for ## pattern directory - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)";

View File

@ -200,7 +200,7 @@ public class Configuration
result = new(propertyConfiguration, result = new(propertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckDFaceAndUpWriteDates.Value,
configuration.CheckJsonForDistanceResults.Value, configuration.CheckJsonForDistanceResults.Value,
configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(), configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? [],
configuration.CrossDirectoryMaxItemsInDistanceCollection.Value, configuration.CrossDirectoryMaxItemsInDistanceCollection.Value,
configuration.DeletePossibleDuplicates.Value, configuration.DeletePossibleDuplicates.Value,
configuration.DistanceFactor.Value, configuration.DistanceFactor.Value,
@ -218,10 +218,10 @@ public class Configuration
configuration.ForceMetadataLastWriteTimeToCreationTime.Value, configuration.ForceMetadataLastWriteTimeToCreationTime.Value,
configuration.ForceResizeLastWriteTimeToCreationTime.Value, configuration.ForceResizeLastWriteTimeToCreationTime.Value,
configuration.GenealogicalDataCommunicationFile, configuration.GenealogicalDataCommunicationFile,
configuration.IgnoreExtensions ?? Array.Empty<string>(), configuration.IgnoreExtensions ?? [],
configuration.JLinks ?? Array.Empty<string>(), configuration.JLinks ?? [],
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? Array.Empty<string>(), configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? [],
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? Array.Empty<string>(), configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? [],
configuration.LoadPhotoPrismLocations.Value, configuration.LoadPhotoPrismLocations.Value,
configuration.LocationContainerDebugDirectory, configuration.LocationContainerDebugDirectory,
configuration.LocationContainerDirectoryPattern, configuration.LocationContainerDirectoryPattern,
@ -234,13 +234,13 @@ public class Configuration
configuration.MappingDefaultName, configuration.MappingDefaultName,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value,
configuration.MixedYearRelativePaths ?? Array.Empty<string>(), configuration.MixedYearRelativePaths ?? [],
configuration.ModelDirectory, configuration.ModelDirectory,
configuration.ModelName, configuration.ModelName,
configuration.MoveToDecade.Value, configuration.MoveToDecade.Value,
configuration.OutputExtension, configuration.OutputExtension,
configuration.OutputQuality.Value, configuration.OutputQuality.Value,
configuration.OutputResolutions ?? Array.Empty<string>(), configuration.OutputResolutions ?? [],
configuration.OverrideForFaceImages.Value, configuration.OverrideForFaceImages.Value,
configuration.OverrideForFaceLandmarkImages.Value, configuration.OverrideForFaceLandmarkImages.Value,
configuration.OverrideForResizeImages.Value, configuration.OverrideForResizeImages.Value,
@ -256,26 +256,26 @@ public class Configuration
configuration.PropertiesChangedForMetadata.Value, configuration.PropertiesChangedForMetadata.Value,
configuration.PropertiesChangedForResize.Value, configuration.PropertiesChangedForResize.Value,
configuration.RadomUseBirthdayMinimum.Value, configuration.RadomUseBirthdayMinimum.Value,
configuration.RangeDaysDeltaTolerance ?? Array.Empty<int>(), configuration.RangeDaysDeltaTolerance ?? [],
configuration.RangeDistanceTolerance ?? Array.Empty<float>(), configuration.RangeDistanceTolerance ?? [],
configuration.RangeFaceAreaTolerance ?? Array.Empty<float>(), configuration.RangeFaceAreaTolerance ?? [],
configuration.RangeFaceConfidence ?? Array.Empty<float>(), configuration.RangeFaceConfidence ?? [],
configuration.RectangleIntersectMinimums ?? Array.Empty<float>(), configuration.RectangleIntersectMinimums ?? [],
configuration.ReMap.Value, configuration.ReMap.Value,
configuration.Reverse.Value, configuration.Reverse.Value,
configuration.SaveBlurHashForOutputResolutions ?? Array.Empty<string>(), configuration.SaveBlurHashForOutputResolutions ?? [],
configuration.SaveFaceDistancesForOutputResolutions ?? Array.Empty<string>(), configuration.SaveFaceDistancesForOutputResolutions ?? [],
configuration.SaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(), configuration.SaveFaceLandmarkForOutputResolutions ?? [],
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? Array.Empty<string>(), configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? [],
configuration.SaveFullYearOfRandomFiles.Value, configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveIndividually.Value, configuration.SaveIndividually.Value,
configuration.SaveMappedForOutputResolutions ?? Array.Empty<string>(), configuration.SaveMappedForOutputResolutions ?? [],
configuration.SavePropertyShortcutsForOutputResolutions ?? Array.Empty<string>(), configuration.SavePropertyShortcutsForOutputResolutions ?? [],
configuration.SaveRandomForOutputResolutions ?? Array.Empty<string>(), configuration.SaveRandomForOutputResolutions ?? [],
configuration.SaveResizedSubfiles.Value, configuration.SaveResizedSubfiles.Value,
configuration.SaveShortcutsForOutputResolutions ?? Array.Empty<string>(), configuration.SaveShortcutsForOutputResolutions ?? [],
configuration.SaveSortingWithoutPerson.Value, configuration.SaveSortingWithoutPerson.Value,
configuration.SkipNotSkipDirectories ?? Array.Empty<string>(), configuration.SkipNotSkipDirectories ?? [],
configuration.SkipOlderThanDays, configuration.SkipOlderThanDays,
configuration.SkipPersonWithMoreThen, configuration.SkipPersonWithMoreThen,
configuration.SkipSearch.Value, configuration.SkipSearch.Value,
@ -284,8 +284,8 @@ public class Configuration
configuration.SortingMinimumToUseSigma.Value, configuration.SortingMinimumToUseSigma.Value,
configuration.TestDistanceResults.Value, configuration.TestDistanceResults.Value,
configuration.UseFilterTries.Value, configuration.UseFilterTries.Value,
configuration.ValidKeyWordsToIgnoreInRandom ?? Array.Empty<string>(), configuration.ValidKeyWordsToIgnoreInRandom ?? [],
configuration.ValidResolutions ?? Array.Empty<string>()); configuration.ValidResolutions ?? []);
return result; return result;
} }

View File

@ -44,7 +44,7 @@ public class Place
internal static ReadOnlyCollection<Models.Place> GetPlaces(string[]? places) internal static ReadOnlyCollection<Models.Place> GetPlaces(string[]? places)
{ {
List<Models.Place> results = new(); List<Models.Place> results = [];
if (places is not null) if (places is not null)
{ {
Place? place; Place? place;

View File

@ -26,7 +26,7 @@ internal class F_Random
private static ReadOnlyDictionary<string, List<string>> GetDayToRelativePaths(ReadOnlyCollection<Shared.Models.Mapping> mappingCollection, string dateFormat, ReadOnlyDictionary<int, List<long>> idToPersonKeys) private static ReadOnlyDictionary<string, List<string>> GetDayToRelativePaths(ReadOnlyCollection<Shared.Models.Mapping> mappingCollection, string dateFormat, ReadOnlyDictionary<int, List<long>> idToPersonKeys)
{ {
Dictionary<string, List<string>> results = new(); Dictionary<string, List<string>> results = [];
string key; string key;
DateTime dateTime; DateTime dateTime;
List<long>? personKeys; List<long>? personKeys;
@ -45,7 +45,7 @@ internal class F_Random
key = dateTime.ToString(dateFormat); key = dateTime.ToString(dateFormat);
if (!results.TryGetValue(key, out relativePaths)) if (!results.TryGetValue(key, out relativePaths))
{ {
results.Add(key, new()); results.Add(key, []);
if (!results.TryGetValue(key, out relativePaths)) if (!results.TryGetValue(key, out relativePaths))
throw new Exception(); throw new Exception();
} }
@ -62,8 +62,8 @@ internal class F_Random
Random random = new(); Random random = new();
List<string>? collection; List<string>? collection;
string dateFormat = "MM-dd"; string dateFormat = "MM-dd";
List<string> relativePaths = new(); List<string> relativePaths = [];
List<int> distinctCollection = new(); List<int> distinctCollection = [];
DateTime dateTime = new(2024, 1, 1); //Leap year DateTime dateTime = new(2024, 1, 1); //Leap year
ReadOnlyDictionary<int, List<long>> idToPersonKeys = Map.Models.Stateless.Methods.IMapLogic.GetIdToPersonKeys(personKeyToIds); ReadOnlyDictionary<int, List<long>> idToPersonKeys = Map.Models.Stateless.Methods.IMapLogic.GetIdToPersonKeys(personKeyToIds);
ReadOnlyDictionary<string, List<string>> dayToRelativePaths = GetDayToRelativePaths(mappingCollection, dateFormat, idToPersonKeys); ReadOnlyDictionary<string, List<string>> dayToRelativePaths = GetDayToRelativePaths(mappingCollection, dateFormat, idToPersonKeys);

View File

@ -57,7 +57,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -30,7 +30,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
string fileName; string fileName;
string checkFile; string checkFile;
string sourceFile; string sourceFile;
List<string> distinct = new(); List<string> distinct = [];
WindowsShortcut windowsShortcut; WindowsShortcut windowsShortcut;
string[] directories = (from l in saveContainers select l.Directory).Distinct().ToArray(); string[] directories = (from l in saveContainers select l.Directory).Distinct().ToArray();
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - _Ticks).TotalSeconds); 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<SaveShortcutsForOutputResolutions> GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Mapping> mappingCollection) private List<SaveShortcutsForOutputResolutions> GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Mapping> mappingCollection)
{ {
List<SaveShortcutsForOutputResolutions> results = new(); List<SaveShortcutsForOutputResolutions> results = [];
if (_Configuration is null) if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration)); throw new NullReferenceException(nameof(_Configuration));
int season; int season;
@ -193,7 +193,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
private void LookForAbandoned(Property.Models.Configuration propertyConfiguration, List<int> distinctFilteredIds) private void LookForAbandoned(Property.Models.Configuration propertyConfiguration, List<int> distinctFilteredIds)
{ {
List<string> renameCollection = new(); List<string> renameCollection = [];
foreach (KeyValuePair<int, List<LocationContainer<MetadataExtractor.Directory>>> keyValuePair in _IdToLocationContainers) foreach (KeyValuePair<int, List<LocationContainer<MetadataExtractor.Directory>>> keyValuePair in _IdToLocationContainers)
{ {
if (distinctFilteredIds.Contains(keyValuePair.Key)) if (distinctFilteredIds.Contains(keyValuePair.Key))
@ -226,10 +226,10 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
_Configuration = configuration; _Configuration = configuration;
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
ReadOnlyDictionary<long, int> readOnlyPersonKeyToCount; ReadOnlyDictionary<long, int> readOnlyPersonKeyToCount;
List<PersonContainer> notMappedPersonContainers = new(); List<PersonContainer> notMappedPersonContainers = [];
Dictionary<int, List<(string, int)>> skipCollection = new(); Dictionary<int, List<(string, int)>> skipCollection = [];
Dictionary<int, List<(string, int)>> skipNotSkipCollection = new(); Dictionary<int, List<(string, int)>> skipNotSkipCollection = [];
List<LocationContainer<MetadataExtractor.Directory>> locationContainers = new(); List<LocationContainer<MetadataExtractor.Directory>> locationContainers = [];
string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory); string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory);
string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, ticks.ToString()); string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, ticks.ToString());
ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> idThenWholePercentagesToPersonContainers; ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> idThenWholePercentagesToPersonContainers;
@ -253,8 +253,8 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
throw new Exception("Confirm Manual files and then restart!"); throw new Exception("Confirm Manual files and then restart!");
Stateless.MapLogic.SetSkipCollections(configuration, personContainers, a2PeopleSingletonDirectory, skipCollection, skipNotSkipCollection); Stateless.MapLogic.SetSkipCollections(configuration, personContainers, a2PeopleSingletonDirectory, skipCollection, skipNotSkipCollection);
{ {
List<string> personKeyFormattedCollection = new(); List<string> personKeyFormattedCollection = [];
Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted = new(); Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted = [];
Stateless.MapLogic.SetPersonCollections(configuration, personContainers, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection); Stateless.MapLogic.SetPersonCollections(configuration, personContainers, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection);
readOnlyPersonKeyFormattedCollection = new(personKeyFormattedCollection); readOnlyPersonKeyFormattedCollection = new(personKeyFormattedCollection);
readOnlyPersonKeyFormattedToNewestPersonKeyFormatted = new(personKeyFormattedToNewestPersonKeyFormatted); readOnlyPersonKeyFormattedToNewestPersonKeyFormatted = new(personKeyFormattedToNewestPersonKeyFormatted);
@ -264,11 +264,11 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
ReadOnlyCollection<Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection = Stateless.MapLogic.GetPersonKeyFormattedIdThenWholePercentages(configuration, ticks, records); ReadOnlyCollection<Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection = Stateless.MapLogic.GetPersonKeyFormattedIdThenWholePercentages(configuration, ticks, records);
// //
{ {
Dictionary<long, int> personKeyToCount = new(); Dictionary<long, int> personKeyToCount = [];
Dictionary<long, PersonContainer> personKeyToPersonContainer = new(); Dictionary<long, PersonContainer> personKeyToPersonContainer = [];
Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer = new(); Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer = [];
Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection = new(); Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection = [];
List<(Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer = new(); List<(Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer = [];
Stateless.MapLogic.SetKeyValuePairsAndAddToCollections(configuration, Stateless.MapLogic.SetKeyValuePairsAndAddToCollections(configuration,
personContainers, personContainers,
personKeyToPersonContainer, personKeyToPersonContainer,
@ -335,26 +335,26 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
{ {
LocationContainer<MetadataExtractor.Directory>[] results; LocationContainer<MetadataExtractor.Directory>[] results;
if (item.Property?.Id is null) if (item.Property?.Id is null)
results = Array.Empty<LocationContainer<MetadataExtractor.Directory>>(); results = [];
else else
{ {
List<LocationContainer<MetadataExtractor.Directory>>? locationContainers; List<LocationContainer<MetadataExtractor.Directory>>? locationContainers;
if (_IdToLocationContainers.TryGetValue(item.Property.Id.Value, out locationContainers)) if (_IdToLocationContainers.TryGetValue(item.Property.Id.Value, out locationContainers))
results = locationContainers.ToArray(); results = locationContainers.ToArray();
else else
results = Array.Empty<LocationContainer<MetadataExtractor.Directory>>(); results = [];
} }
return new(results); return new(results);
} }
public ReadOnlyDictionary<long, List<int>> GetPersonKeyToIds() public ReadOnlyDictionary<long, List<int>> GetPersonKeyToIds()
{ {
Dictionary<long, List<int>> results = new(); Dictionary<long, List<int>> results = [];
long personKey; long personKey;
const int zero = 0; const int zero = 0;
List<int>? collection; List<int>? collection;
PersonBirthday personBirthday; PersonBirthday personBirthday;
List<string> shouldMove = new(); List<string> shouldMove = [];
foreach (KeyValuePair<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> idToCollection in _IdThenWholePercentagesToPersonContainers) foreach (KeyValuePair<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> idToCollection in _IdThenWholePercentagesToPersonContainers)
{ {
foreach (KeyValuePair<int, ReadOnlyCollection<PersonContainer>> wholePercentagesToPersonContainers in idToCollection.Value) foreach (KeyValuePair<int, ReadOnlyCollection<PersonContainer>> wholePercentagesToPersonContainers in idToCollection.Value)
@ -369,7 +369,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
personKey = personBirthday.Value.Ticks; personKey = personBirthday.Value.Ticks;
if (!results.TryGetValue(personKey, out collection)) if (!results.TryGetValue(personKey, out collection))
{ {
results.Add(personKey, new()); results.Add(personKey, []);
if (!results.TryGetValue(personKey, out collection)) if (!results.TryGetValue(personKey, out collection))
throw new Exception(); throw new Exception();
} }
@ -532,7 +532,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
{ {
if (_Configuration is null) if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration)); throw new NullReferenceException(nameof(_Configuration));
List<SaveContainer> results = new(); List<SaveContainer> results = [];
string by; string by;
Record record; Record record;
List<int>? ids; List<int>? ids;
@ -665,7 +665,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
{ {
if (_Configuration is null) if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration)); throw new NullReferenceException(nameof(_Configuration));
List<Sorting> results = new(); List<Sorting> results = [];
Sorting sorting; Sorting sorting;
FaceDistance faceDistanceLength; FaceDistance faceDistanceLength;
for (int j = 0; j < faceDistanceLengths.Count; j++) for (int j = 0; j < faceDistanceLengths.Count; j++)
@ -729,7 +729,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
string? segmentC; string? segmentC;
string personKeyFormatted; string personKeyFormatted;
MappingFromPerson mappingFromPerson; MappingFromPerson mappingFromPerson;
Dictionary<string, int> keyToCount = new(); Dictionary<string, int> keyToCount = [];
foreach (SortingContainer sortingContainer in sortingContainers) foreach (SortingContainer sortingContainer in sortingContainers)
{ {
if (sortingContainer.Question is null) if (sortingContainer.Question is null)
@ -770,7 +770,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
string counts = distanceLimits.GetCounts(); string counts = distanceLimits.GetCounts();
_ = Directory.CreateDirectory(Path.Combine(_EDistanceContentTicksDirectory, counts)); _ = Directory.CreateDirectory(Path.Combine(_EDistanceContentTicksDirectory, counts));
} }
List<SaveContainer> results = new(); List<SaveContainer> results = [];
string by; string by;
Record record; Record record;
bool isBySorting; bool isBySorting;
@ -866,16 +866,16 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
string counts = distanceLimits.GetCounts(); string counts = distanceLimits.GetCounts();
_ = Directory.CreateDirectory(Path.Combine(_EDistanceContentTicksDirectory, counts)); _ = Directory.CreateDirectory(Path.Combine(_EDistanceContentTicksDirectory, counts));
} }
List<SortingContainer> results = new(); List<SortingContainer> results = [];
Sorting sorting; Sorting sorting;
Mapping? keyMapping; Mapping? keyMapping;
List<int>? wholePercentagesCollection; List<int>? wholePercentagesCollection;
MappingFromFilterPre mappingFromFilterPre; MappingFromFilterPre mappingFromFilterPre;
Dictionary<string, int> keyToCount = new(); Dictionary<string, int> keyToCount = [];
MappingFromFilterPost mappingFromFilterPost; MappingFromFilterPost mappingFromFilterPost;
ReadOnlyCollection<PersonContainer>? personContainers; ReadOnlyCollection<PersonContainer>? personContainers;
ReadOnlyDictionary<int, Mapping>? wholePercentagesToMapping; ReadOnlyDictionary<int, Mapping>? wholePercentagesToMapping;
Dictionary<int, List<int>> idToWholePercentagesCollection = new(); Dictionary<int, List<int>> idToWholePercentagesCollection = [];
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - _Ticks).TotalSeconds); int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - _Ticks).TotalSeconds);
ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers; ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers;
string message = $") {sortingContainers.Count:000} Filter Sorting Container(s) - {totalSeconds} total second(s)"; 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; continue;
if (!idToWholePercentagesCollection.TryGetValue(sorting.Id, out wholePercentagesCollection)) if (!idToWholePercentagesCollection.TryGetValue(sorting.Id, out wholePercentagesCollection))
{ {
idToWholePercentagesCollection.Add(sorting.Id, new()); idToWholePercentagesCollection.Add(sorting.Id, []);
if (!idToWholePercentagesCollection.TryGetValue(sorting.Id, out wholePercentagesCollection)) if (!idToWholePercentagesCollection.TryGetValue(sorting.Id, out wholePercentagesCollection))
throw new Exception(); throw new Exception();
} }
@ -986,7 +986,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
{ {
if (_Configuration is null) if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration)); throw new NullReferenceException(nameof(_Configuration));
List<string> results = new(); List<string> results = [];
string[] files; string[] files;
string checkDirectory; string checkDirectory;
string[] checkDirectories; string[] checkDirectories;
@ -995,7 +995,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
PersonBirthday? personBirthday; PersonBirthday? personBirthday;
string fileNameWithoutExtension; string fileNameWithoutExtension;
WindowsShortcut windowsShortcut; WindowsShortcut windowsShortcut;
List<(long, string)> collection = new(); List<(long, string)> collection = [];
foreach (string directoryName in jLinks) foreach (string directoryName in jLinks)
{ {
checkDirectory = Path.Combine(a2PeopleContentDirectory, directoryName); checkDirectory = Path.Combine(a2PeopleContentDirectory, directoryName);
@ -1052,10 +1052,10 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
string? directoryName; string? directoryName;
string personDirectory; string personDirectory;
string personKeyFormatted; string personKeyFormatted;
List<int> distinctCollection = new(); List<int> distinctCollection = [];
bool usePersonKeyAndDeterministicHashCodeKey = false; bool usePersonKeyAndDeterministicHashCodeKey = false;
List<string> personKeyFormattedCollection = GetPersonKeyFormattedCollection(jLinks, a2PeopleContentDirectory, personContainers, personKeyToIds); List<string> 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) foreach (Mapping mapping in mappingCollection)
{ {
if (distinctCollection.Contains(mapping.MappingFromItem.Id)) if (distinctCollection.Contains(mapping.MappingFromItem.Id))
@ -1106,7 +1106,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
if (_Configuration is null) if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration)); throw new NullReferenceException(nameof(_Configuration));
SaveContainer? saveContainer; SaveContainer? saveContainer;
List<SaveContainer> saveContainers = new(); List<SaveContainer> saveContainers = [];
(int, FileHolder, int, string, string, string, string)[] collection = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory, personContainers, mappingCollection, personKeyToIds); (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) 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; string hiddenFile;
WindowsShortcut windowsShortcut; WindowsShortcut windowsShortcut;
List<SaveShortcutsForOutputResolutions> collection = new(); List<SaveShortcutsForOutputResolutions> collection = [];
collection = GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(eDistanceContentDirectory, personKeyToIds, mappingCollection); collection = GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(eDistanceContentDirectory, personKeyToIds, mappingCollection);
string[] distinctDirectories = (from l in collection select l.Directory).Distinct().ToArray(); string[] distinctDirectories = (from l in collection select l.Directory).Distinct().ToArray();
foreach (string directory in distinctDirectories) foreach (string directory in distinctDirectories)
@ -1139,7 +1139,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
continue; continue;
if (s.Description is not null) 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.SetAttributes(hiddenFile, FileAttributes.Hidden);
File.SetLastWriteTime(hiddenFile, s.DateTime); File.SetLastWriteTime(hiddenFile, s.DateTime);
} }
@ -1168,9 +1168,9 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
string? directoryName; string? directoryName;
string personDirectory; string personDirectory;
string personKeyFormatted; string personKeyFormatted;
List<string> distinct = new(); List<string> distinct = [];
List<SaveShortcutsForOutputResolutions> collection = new(); List<SaveShortcutsForOutputResolutions> collection = [];
List<(string, DateTime[])> directoriesAndDateTimes = new(); List<(string, DateTime[])> directoriesAndDateTimes = [];
foreach (Item item in filteredItems) foreach (Item item in filteredItems)
{ {
if (item.ResizedFileHolder is null) if (item.ResizedFileHolder is null)

View File

@ -78,7 +78,7 @@ internal abstract class DistanceLogic
private static List<TicksDirectory> UpdateDateVerifyAndGetTicksDirectories(Configuration configuration, string eDistanceContentDirectory) private static List<TicksDirectory> UpdateDateVerifyAndGetTicksDirectories(Configuration configuration, string eDistanceContentDirectory)
{ {
List<TicksDirectory> results = new(); List<TicksDirectory> results = [];
float? totalDays; float? totalDays;
long? next = null; long? next = null;
string? checkDirectory; string? checkDirectory;
@ -210,7 +210,7 @@ internal abstract class DistanceLogic
private static List<Record> GetRecords(Configuration configuration, bool? isDefault, string[] files, int directoryNumber, string personKeyFormatted, List<string> distinct, string? personDisplayDirectoryName) private static List<Record> GetRecords(Configuration configuration, bool? isDefault, string[] files, int directoryNumber, string personKeyFormatted, List<string> distinct, string? personDisplayDirectoryName)
{ {
List<Record> results = new(); List<Record> results = [];
int? id; int? id;
string fileName; string fileName;
string checkFile; string checkFile;
@ -258,7 +258,7 @@ internal abstract class DistanceLogic
internal static List<Record> DeleteEmptyDirectoriesAndGetCollection(Configuration configuration, long ticks, string eDistanceContentDirectory, ReadOnlyDictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, ReadOnlyCollection<string> personKeyFormattedCollection) internal static List<Record> DeleteEmptyDirectoriesAndGetCollection(Configuration configuration, long ticks, string eDistanceContentDirectory, ReadOnlyDictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, ReadOnlyCollection<string> personKeyFormattedCollection)
{ {
List<Record> results = new(); List<Record> results = [];
bool check; bool check;
string message; string message;
string[] files; string[] files;
@ -273,7 +273,7 @@ internal abstract class DistanceLogic
string personKeyFormatted; string personKeyFormatted;
string? personFirstInitial; string? personFirstInitial;
bool isReservedDirectoryName; bool isReservedDirectoryName;
List<string> distinct = new(); List<string> distinct = [];
string[] personNameDirectories; string[] personNameDirectories;
string? newestPersonKeyFormatted; string? newestPersonKeyFormatted;
string? personDisplayDirectoryName; string? personDisplayDirectoryName;

View File

@ -9,7 +9,7 @@ internal abstract class LookForAbandonedLogic
{ {
string fileNameWithoutExtension; string fileNameWithoutExtension;
bool nameWithoutExtensionIsIdFormat; bool nameWithoutExtensionIsIdFormat;
List<string> renameCollection = new(); List<string> renameCollection = [];
bool nameWithoutExtensionIsPaddedIdFormat; bool nameWithoutExtensionIsPaddedIdFormat;
int sortOrderOnlyLengthIndex = IDirectory.GetSortOrderOnlyLengthIndex(propertyConfiguration.Offset); int sortOrderOnlyLengthIndex = IDirectory.GetSortOrderOnlyLengthIndex(propertyConfiguration.Offset);
string[] distinctFilteredIdsValues = distinctFilteredIds.Select(l => l.ToString()).ToArray(); string[] distinctFilteredIdsValues = distinctFilteredIds.Select(l => l.ToString()).ToArray();

View File

@ -37,8 +37,8 @@ internal abstract class MapLogic
string fileName; string fileName;
string checkFile; string checkFile;
int? wholePercentages; int? wholePercentages;
List<string> distinctFiles = new(); List<string> distinctFiles = [];
List<string> distinctFileName = new(); List<string> distinctFileName = [];
bool skipNotSkipDirectoriesAny = configuration.SkipNotSkipDirectories.Length > 0; bool skipNotSkipDirectoriesAny = configuration.SkipNotSkipDirectories.Length > 0;
string[] checkDirectories = (from l in configuration.SkipNotSkipDirectories select Path.GetFullPath($"{a2PeopleSingletonDirectory}{l}")).ToArray(); string[] checkDirectories = (from l in configuration.SkipNotSkipDirectories select Path.GetFullPath($"{a2PeopleSingletonDirectory}{l}")).ToArray();
foreach (PersonContainer personContainer in personContainers) foreach (PersonContainer personContainer in personContainers)
@ -69,13 +69,13 @@ internal abstract class MapLogic
if (!skipNotSkipDirectoriesAny || !checkDirectories.Any(l => distinctFile.StartsWith(l))) if (!skipNotSkipDirectoriesAny || !checkDirectories.Any(l => distinctFile.StartsWith(l)))
{ {
if (!skipCollection.ContainsKey(id.Value)) if (!skipCollection.ContainsKey(id.Value))
skipCollection.Add(id.Value, new()); skipCollection.Add(id.Value, []);
skipCollection[id.Value].Add((distinctFile, wholePercentages.Value)); skipCollection[id.Value].Add((distinctFile, wholePercentages.Value));
} }
else else
{ {
if (!skipNotSkipCollection.ContainsKey(id.Value)) if (!skipNotSkipCollection.ContainsKey(id.Value))
skipNotSkipCollection.Add(id.Value, new()); skipNotSkipCollection.Add(id.Value, []);
skipNotSkipCollection[id.Value].Add((distinctFile, wholePercentages.Value)); skipNotSkipCollection[id.Value].Add((distinctFile, wholePercentages.Value));
} }
} }
@ -160,7 +160,7 @@ internal abstract class MapLogic
internal static ReadOnlyCollection<Face> GetFaces(ReadOnlyCollection<Item> items) internal static ReadOnlyCollection<Face> GetFaces(ReadOnlyCollection<Item> items)
{ {
List<Face> results = new(); List<Face> results = [];
foreach (Item item in items) foreach (Item item in items)
{ {
if (item.Property?.Id is null || item.ResizedFileHolder is null) if (item.Property?.Id is null || item.ResizedFileHolder is null)
@ -183,10 +183,10 @@ internal abstract class MapLogic
private static List<MappedFile> GetDisplayDirectoryAllFiles(string fileNameExtension, string personBirthdayFormat, ReadOnlyCollection<PersonContainer> personContainers) private static List<MappedFile> GetDisplayDirectoryAllFiles(string fileNameExtension, string personBirthdayFormat, ReadOnlyCollection<PersonContainer> personContainers)
{ {
List<MappedFile> results = new(); List<MappedFile> results = [];
string fileName; string fileName;
string personKeyFormatted; string personKeyFormatted;
List<string> distinct = new(); List<string> distinct = [];
foreach (PersonContainer personContainer in personContainers) foreach (PersonContainer personContainer in personContainers)
{ {
if (personContainer.Key is null) 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) private static List<(string, long)> GetDirectoryAndTicksCollection(string[] jLinks, string personBirthdayFormat, string? rootDirectory)
{ {
List<(string, long)> results = new(); List<(string, long)> results = [];
string directory; string directory;
DateTime dateTime; DateTime dateTime;
string[] personKeyDirectories; string[] personKeyDirectories;
@ -275,15 +275,15 @@ internal abstract class MapLogic
{ {
(long, PersonContainer)[] results; (long, PersonContainer)[] results;
const int zero = 0; const int zero = 0;
List<string> errors = new(); List<string> errors = [];
string newestPersonKeyFormatted; string newestPersonKeyFormatted;
List<(long PersonKey, PersonContainer PersonContainer)> collection = new(); List<(long PersonKey, PersonContainer PersonContainer)> collection = [];
foreach (PersonContainer personContainer in personContainers) foreach (PersonContainer personContainer in personContainers)
{ {
if (personContainer.Key is null) if (personContainer.Key is null)
continue; continue;
if (!personKeyToPersonContainerCollection.ContainsKey(personContainer.Key.Value)) if (!personKeyToPersonContainerCollection.ContainsKey(personContainer.Key.Value))
personKeyToPersonContainerCollection.Add(personContainer.Key.Value, new()); personKeyToPersonContainerCollection.Add(personContainer.Key.Value, []);
personKeyToPersonContainerCollection[personContainer.Key.Value].Add(personContainer); personKeyToPersonContainerCollection[personContainer.Key.Value].Add(personContainer);
newestPersonKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, personContainer.Key.Value); newestPersonKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, personContainer.Key.Value);
if (!personKeyFormattedToPersonContainer.ContainsKey(newestPersonKeyFormatted)) if (!personKeyFormattedToPersonContainer.ContainsKey(newestPersonKeyFormatted))
@ -303,7 +303,7 @@ internal abstract class MapLogic
private static Dictionary<int, Dictionary<int, List<PersonContainer>>> GetAll(Configuration configuration, ReadOnlyDictionary<string, PersonContainer> personKeyFormattedToPersonContainer, ReadOnlyCollection<PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection) private static Dictionary<int, Dictionary<int, List<PersonContainer>>> GetAll(Configuration configuration, ReadOnlyDictionary<string, PersonContainer> personKeyFormattedToPersonContainer, ReadOnlyCollection<PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection)
{ {
Dictionary<int, Dictionary<int, List<PersonContainer>>> results = new(); Dictionary<int, Dictionary<int, List<PersonContainer>>> results = [];
PersonBirthday? personBirthday; PersonBirthday? personBirthday;
PersonContainer? personContainer; PersonContainer? personContainer;
List<PersonContainer>? personContainers; List<PersonContainer>? personContainers;
@ -319,13 +319,13 @@ internal abstract class MapLogic
throw new Exception(); throw new Exception();
if (!results.TryGetValue(personKeyFormattedIdThenWholePercentages.Id, out idTo)) if (!results.TryGetValue(personKeyFormattedIdThenWholePercentages.Id, out idTo))
{ {
results.Add(personKeyFormattedIdThenWholePercentages.Id, new()); results.Add(personKeyFormattedIdThenWholePercentages.Id, []);
if (!results.TryGetValue(personKeyFormattedIdThenWholePercentages.Id, out idTo)) if (!results.TryGetValue(personKeyFormattedIdThenWholePercentages.Id, out idTo))
throw new Exception(); throw new Exception();
} }
if (!idTo.TryGetValue(personKeyFormattedIdThenWholePercentages.WholePercentages, out personContainers)) if (!idTo.TryGetValue(personKeyFormattedIdThenWholePercentages.WholePercentages, out personContainers))
{ {
idTo.Add(personKeyFormattedIdThenWholePercentages.WholePercentages, new()); idTo.Add(personKeyFormattedIdThenWholePercentages.WholePercentages, []);
if (!idTo.TryGetValue(personKeyFormattedIdThenWholePercentages.WholePercentages, out personContainers)) if (!idTo.TryGetValue(personKeyFormattedIdThenWholePercentages.WholePercentages, out personContainers))
throw new Exception(); throw new Exception();
} }
@ -337,17 +337,17 @@ internal abstract class MapLogic
private static ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> GetReadOnly(Dictionary<int, Dictionary<int, List<PersonContainer>>> idThenWholePercentagesToPersonContainerCollection) private static ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> GetReadOnly(Dictionary<int, Dictionary<int, List<PersonContainer>>> idThenWholePercentagesToPersonContainerCollection)
{ {
Dictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> results = new(); Dictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> results = [];
List<long> distinct = new(); List<long> distinct = [];
List<PersonContainer> personContainers; List<PersonContainer> personContainers;
Dictionary<int, ReadOnlyCollection<PersonContainer>> keyValuePairs; Dictionary<int, ReadOnlyCollection<PersonContainer>> keyValuePairs;
foreach (KeyValuePair<int, Dictionary<int, List<PersonContainer>>> idTo in idThenWholePercentagesToPersonContainerCollection) foreach (KeyValuePair<int, Dictionary<int, List<PersonContainer>>> idTo in idThenWholePercentagesToPersonContainerCollection)
{ {
keyValuePairs = new(); keyValuePairs = [];
foreach (KeyValuePair<int, List<PersonContainer>> wholePercentagesTo in idThenWholePercentagesToPersonContainerCollection[idTo.Key]) foreach (KeyValuePair<int, List<PersonContainer>> wholePercentagesTo in idThenWholePercentagesToPersonContainerCollection[idTo.Key])
{ {
distinct.Clear(); distinct.Clear();
personContainers = new(); personContainers = [];
foreach (PersonContainer personContainer in wholePercentagesTo.Value) foreach (PersonContainer personContainer in wholePercentagesTo.Value)
{ {
if (personContainer.Key is null) if (personContainer.Key is null)
@ -365,7 +365,7 @@ internal abstract class MapLogic
private static ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> GetReadOnly(Dictionary<int, Dictionary<int, Mapping>> keyValuePairs) private static ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> GetReadOnly(Dictionary<int, Dictionary<int, Mapping>> keyValuePairs)
{ {
Dictionary<int, ReadOnlyDictionary<int, Mapping>> results = new(); Dictionary<int, ReadOnlyDictionary<int, Mapping>> results = [];
foreach (KeyValuePair<int, Dictionary<int, Mapping>> keyValuePair in keyValuePairs) foreach (KeyValuePair<int, Dictionary<int, Mapping>> keyValuePair in keyValuePairs)
results.Add(keyValuePair.Key, new(keyValuePair.Value)); results.Add(keyValuePair.Key, new(keyValuePair.Value));
return new(results); return new(results);
@ -373,13 +373,13 @@ internal abstract class MapLogic
private static List<PersonContainer> GetNonSpecificPeopleCollection(Configuration configuration, long ticks, List<long> personKeys, ReadOnlyDictionary<long, int> personKeyToCount) private static List<PersonContainer> GetNonSpecificPeopleCollection(Configuration configuration, long ticks, List<long> personKeys, ReadOnlyDictionary<long, int> personKeyToCount)
{ {
List<PersonContainer> results = new(); List<PersonContainer> results = [];
bool check; bool check;
long personKey; long personKey;
int? approximateYears = null; int? approximateYears = null;
PersonBirthday personBirthday; PersonBirthday personBirthday;
PersonContainer personContainer; PersonContainer personContainer;
string[] personDisplayDirectoryAllFiles = Array.Empty<string>(); string[] personDisplayDirectoryAllFiles = [];
DateTime incrementDate = new(configuration.PersonBirthdayFirstYear, 1, 1); DateTime incrementDate = new(configuration.PersonBirthdayFirstYear, 1, 1);
long oneHour = new DateTime(1, 1, 1, 1, 0, 0).Ticks - new DateTime(1, 1, 1).Ticks; 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++) for (int i = 0; i < int.MaxValue; i++)
@ -409,7 +409,7 @@ internal abstract class MapLogic
if (check) if (check)
continue; continue;
personBirthday = IPersonBirthday.GetPersonBirthday(personKey + (oneHour * 2)); 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); results.Add(personContainer);
if (results.Count > 99) if (results.Count > 99)
break; break;
@ -431,12 +431,12 @@ internal abstract class MapLogic
private static List<MappedFile> GetMappedFiles(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, List<Record> records) private static List<MappedFile> GetMappedFiles(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, List<Record> records)
{ {
List<MappedFile> results = new(); List<MappedFile> results = [];
string file; string file;
long personKey; long personKey;
string fileName; string fileName;
string checkFile; string checkFile;
List<string> distinct = new(); List<string> distinct = [];
PersonBirthday? personBirthday; PersonBirthday? personBirthday;
results.AddRange(GetDisplayDirectoryAllFiles(configuration.FacesFileNameExtension, configuration.PersonBirthdayFormat, personContainers)); results.AddRange(GetDisplayDirectoryAllFiles(configuration.FacesFileNameExtension, configuration.PersonBirthdayFormat, personContainers));
foreach (Record record in records) foreach (Record record in records)
@ -529,11 +529,11 @@ internal abstract class MapLogic
string key; string key;
float? percent; float? percent;
float itemPercentagesArea; float itemPercentagesArea;
List<string> delete = new(); List<string> delete = [];
List<Duplicate> duplicates = new(); List<Duplicate> duplicates = [];
RectangleF? itemPercentagesRectangle; RectangleF? itemPercentagesRectangle;
(string File, int WholePercentages) item; (string File, int WholePercentages) item;
Dictionary<string, (string, int)> distinct = new(); Dictionary<string, (string, int)> distinct = [];
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers) foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
{ {
key = string.Concat(locationContainer.PersonKey, locationContainer.Id); key = string.Concat(locationContainer.PersonKey, locationContainer.Id);
@ -660,7 +660,7 @@ internal abstract class MapLogic
private static List<(string, long)> GetJLinkResolvedDirectories(string personBirthdayFormat, List<string> resolvedDirectories) private static List<(string, long)> GetJLinkResolvedDirectories(string personBirthdayFormat, List<string> resolvedDirectories)
{ {
List<(string, long)> results = new(); List<(string, long)> results = [];
DateTime dateTime; DateTime dateTime;
string directoryName; string directoryName;
string[] directories; string[] directories;
@ -683,7 +683,7 @@ internal abstract class MapLogic
internal static void SetKeyValuePairsAndAddToCollections(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<long, PersonContainer> personKeyToPersonContainer, ReadOnlyCollection<PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection, Dictionary<long, int> personKeyToCount, Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer, Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection, List<(PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer) internal static void SetKeyValuePairsAndAddToCollections(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<long, PersonContainer> personKeyToPersonContainer, ReadOnlyCollection<PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection, Dictionary<long, int> personKeyToCount, Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer, Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection, List<(PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer)
{ {
PersonBirthday? personBirthday; PersonBirthday? personBirthday;
Dictionary<int, Dictionary<int, List<PersonContainer>>> idThenWholePercentagesToPersonContainers = new(); Dictionary<int, Dictionary<int, List<PersonContainer>>> idThenWholePercentagesToPersonContainers = [];
(long, PersonContainer)[] collection = GetDistinctCollection(configuration, personContainers, personKeyToPersonContainerCollection, personKeyFormattedToPersonContainer); (long, PersonContainer)[] collection = GetDistinctCollection(configuration, personContainers, personKeyToPersonContainerCollection, personKeyFormattedToPersonContainer);
foreach ((long personKey, PersonContainer personContainer) in collection) foreach ((long personKey, PersonContainer personContainer) in collection)
personKeyToPersonContainer.Add(personKey, personContainer); personKeyToPersonContainer.Add(personKey, personContainer);
@ -733,11 +733,11 @@ internal abstract class MapLogic
internal static ReadOnlyCollection<PersonKeyFormattedIdThenWholePercentages> GetPersonKeyFormattedIdThenWholePercentages(Configuration configuration, long ticks, List<Record> collection) internal static ReadOnlyCollection<PersonKeyFormattedIdThenWholePercentages> GetPersonKeyFormattedIdThenWholePercentages(Configuration configuration, long ticks, List<Record> collection)
{ {
List<PersonKeyFormattedIdThenWholePercentages> results = new(); List<PersonKeyFormattedIdThenWholePercentages> results = [];
int? id; int? id;
int? wholePercentages; int? wholePercentages;
List<int> wholePercentagesCollection; List<int> wholePercentagesCollection;
Dictionary<int, List<int>> idToWholePercentagesCollection = new(); Dictionary<int, List<int>> idToWholePercentagesCollection = [];
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); 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)"; string message = $") {collection.Count:000} join from ticks Director(ies) - C - {totalSeconds} total second(s)";
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
@ -749,7 +749,7 @@ internal abstract class MapLogic
if (id is null || wholePercentages is null) if (id is null || wholePercentages is null)
continue; continue;
if (!idToWholePercentagesCollection.ContainsKey(id.Value)) if (!idToWholePercentagesCollection.ContainsKey(id.Value))
idToWholePercentagesCollection.Add(id.Value, new()); idToWholePercentagesCollection.Add(id.Value, []);
wholePercentagesCollection = idToWholePercentagesCollection[id.Value]; wholePercentagesCollection = idToWholePercentagesCollection[id.Value];
wholePercentagesCollection.Add(wholePercentages.Value); wholePercentagesCollection.Add(wholePercentages.Value);
idToWholePercentagesCollection[id.Value].Add(wholePercentages.Value); idToWholePercentagesCollection[id.Value].Add(wholePercentages.Value);
@ -760,9 +760,9 @@ internal abstract class MapLogic
internal static List<PersonContainer> GetNotMappedPersonContainers(Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, ReadOnlyDictionary<long, int> personKeyToCount) internal static List<PersonContainer> GetNotMappedPersonContainers(Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, ReadOnlyDictionary<long, int> personKeyToCount)
{ {
List<PersonContainer> results = new(); List<PersonContainer> results = [];
List<PersonContainer> notMappedAndNotNamedPersonKeys = new(); List<PersonContainer> notMappedAndNotNamedPersonKeys = [];
List<PersonContainer> notMappedAndWithNamedPersonKeys = new(); List<PersonContainer> notMappedAndWithNamedPersonKeys = [];
List<long> personKeys = IPersonContainer.GetPersonKeys(personContainers); List<long> personKeys = IPersonContainer.GetPersonKeys(personContainers);
foreach (PersonContainer personContainer in personContainers) foreach (PersonContainer personContainer in personContainers)
{ {
@ -826,7 +826,7 @@ internal abstract class MapLogic
const int zero = 0; const int zero = 0;
string personKeyFormatted; string personKeyFormatted;
string[] deleteCollection; string[] deleteCollection;
List<string> distinct = new(); List<string> distinct = [];
PersonBirthday personBirthday; PersonBirthday personBirthday;
string personDisplayDirectory; string personDisplayDirectory;
DateTime dateTime = new(ticks); DateTime dateTime = new(ticks);
@ -878,7 +878,7 @@ internal abstract class MapLogic
internal static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(int maxDegreeOfParallelism, Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<int, List<(string, int)>> skipCollection, List<Record> records) internal static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(int maxDegreeOfParallelism, Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<int, List<(string, int)>> skipCollection, List<Record> records)
{ {
List<LocationContainer<MetadataExtractor.Directory>> results = new(); List<LocationContainer<MetadataExtractor.Directory>> results = [];
List<MappedFile> mappedFiles = GetMappedFiles(configuration, personContainers, records); List<MappedFile> mappedFiles = GetMappedFiles(configuration, personContainers, records);
if (mappedFiles.Count > 0 && (configuration.DistanceMoveUnableToMatch || configuration.DistanceRenameToMatch)) if (mappedFiles.Count > 0 && (configuration.DistanceMoveUnableToMatch || configuration.DistanceRenameToMatch))
{ {
@ -912,7 +912,7 @@ internal abstract class MapLogic
string checkDirectory; string checkDirectory;
string personKeyFormatted; string personKeyFormatted;
PersonBirthday personBirthday; PersonBirthday personBirthday;
List<string> distinct = new(); List<string> distinct = [];
DateTime dateTime = new(ticks); DateTime dateTime = new(ticks);
string by = nameof(Shared.Models.Stateless.IMapLogic.ManualCopy); string by = nameof(Shared.Models.Stateless.IMapLogic.ManualCopy);
foreach (PersonContainer personContainer in personContainers) foreach (PersonContainer personContainer in personContainers)
@ -1005,7 +1005,7 @@ internal abstract class MapLogic
WindowsShortcut windowsShortcut; WindowsShortcut windowsShortcut;
string personDisplayDirectoryName; string personDisplayDirectoryName;
(string, string)[] yearDirectoryNameCheck; (string, string)[] yearDirectoryNameCheck;
List<(string, string)> yearDirectoryNames = new(); List<(string, string)> yearDirectoryNames = [];
string[] personKeyDirectories = Directory.GetDirectories(mappingDirectory, "*", SearchOption.TopDirectoryOnly); string[] personKeyDirectories = Directory.GetDirectories(mappingDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string personKeyDirectory in personKeyDirectories) foreach (string personKeyDirectory in personKeyDirectories)
{ {
@ -1057,7 +1057,7 @@ internal abstract class MapLogic
internal static ReadOnlyDictionary<int, List<long>> GetIdToPersonKeys(ReadOnlyDictionary<long, List<int>> personKeyToIds) internal static ReadOnlyDictionary<int, List<long>> GetIdToPersonKeys(ReadOnlyDictionary<long, List<int>> personKeyToIds)
{ {
Dictionary<int, List<long>> results = new(); Dictionary<int, List<long>> results = [];
List<long>? collection; List<long>? collection;
foreach (KeyValuePair<long, List<int>> keyValuePair in personKeyToIds) foreach (KeyValuePair<long, List<int>> keyValuePair in personKeyToIds)
{ {
@ -1065,7 +1065,7 @@ internal abstract class MapLogic
{ {
if (!results.TryGetValue(id, out collection)) if (!results.TryGetValue(id, out collection))
{ {
results.Add(id, new()); results.Add(id, []);
if (!results.TryGetValue(id, out collection)) if (!results.TryGetValue(id, out collection))
throw new Exception(); throw new Exception();
} }
@ -1079,7 +1079,7 @@ internal abstract class MapLogic
internal static ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> GetIdToWholePercentagesToFace(ReadOnlyCollection<Mapping> mappingCollection) internal static ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> GetIdToWholePercentagesToFace(ReadOnlyCollection<Mapping> mappingCollection)
{ {
Dictionary<int, Dictionary<int, Mapping>> results = new(); Dictionary<int, Dictionary<int, Mapping>> results = [];
Dictionary<int, Mapping>? keyValuePairs; Dictionary<int, Mapping>? keyValuePairs;
foreach (Mapping mapping in mappingCollection) foreach (Mapping mapping in mappingCollection)
{ {
@ -1087,7 +1087,7 @@ internal abstract class MapLogic
continue; continue;
if (!results.TryGetValue(mapping.MappingFromItem.Id, out keyValuePairs)) 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)) if (!results.TryGetValue(mapping.MappingFromItem.Id, out keyValuePairs))
throw new Exception(); throw new Exception();
} }
@ -1106,14 +1106,14 @@ internal abstract class MapLogic
int totalFiles = 0; int totalFiles = 0;
string checkDirectory; string checkDirectory;
WindowsShortcut windowsShortcut; WindowsShortcut windowsShortcut;
List<string> resolvedDirectories = new(); List<string> resolvedDirectories = [];
if (string.IsNullOrEmpty(genealogicalDataCommunicationFile)) if (string.IsNullOrEmpty(genealogicalDataCommunicationFile))
results = GetDirectoryAndTicksCollection(jLinks, personBirthdayFormat, a2PeopleContentDirectory); results = GetDirectoryAndTicksCollection(jLinks, personBirthdayFormat, a2PeopleContentDirectory);
else else
results = GetGenealogicalDataCommunicationDirectories(genealogicalDataCommunicationFile, jLinks, personBirthdayFormat); results = GetGenealogicalDataCommunicationDirectories(genealogicalDataCommunicationFile, jLinks, personBirthdayFormat);
if (results.Count == 0 || results.Count < jLinks.Length) 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)) foreach (string directory in Directory.GetDirectories(a2PeopleSingletonDirectory, "*", SearchOption.AllDirectories))
a2PeopleSingletonDirectories.Add((directory, Path.GetFileName(directory), Path.GetFileName(directory).Split(personCharacters).First())); a2PeopleSingletonDirectories.Add((directory, Path.GetFileName(directory), Path.GetFileName(directory).Split(personCharacters).First()));
foreach (string directoryName in jLinks) foreach (string directoryName in jLinks)
@ -1144,7 +1144,7 @@ internal abstract class MapLogic
else else
{ {
resolvedDirectories.Clear(); resolvedDirectories.Clear();
results = new(); results = [];
} }
} }
return results; return results;
@ -1205,13 +1205,13 @@ internal abstract class MapLogic
internal static ReadOnlyDictionary<int, List<int>> ConvertSkip(Dictionary<int, List<(string, int)>> skipCollection) internal static ReadOnlyDictionary<int, List<int>> ConvertSkip(Dictionary<int, List<(string, int)>> skipCollection)
{ {
Dictionary<int, List<int>> results = new(); Dictionary<int, List<int>> results = [];
List<int>? wholePercentagesCollection; List<int>? wholePercentagesCollection;
foreach (KeyValuePair<int, List<(string, int)>> keyValuePair in skipCollection) foreach (KeyValuePair<int, List<(string, int)>> keyValuePair in skipCollection)
{ {
if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection)) if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection))
{ {
results.Add(keyValuePair.Key, new()); results.Add(keyValuePair.Key, []);
if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection)) if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection))
throw new Exception(); throw new Exception();
} }
@ -1223,13 +1223,13 @@ internal abstract class MapLogic
internal static ReadOnlyDictionary<int, List<int>> ConvertSkipNotSkip(Dictionary<int, List<(string, int)>> skipNotSkipCollection) internal static ReadOnlyDictionary<int, List<int>> ConvertSkipNotSkip(Dictionary<int, List<(string, int)>> skipNotSkipCollection)
{ {
Dictionary<int, List<int>> results = new(); Dictionary<int, List<int>> results = [];
List<int>? wholePercentagesCollection; List<int>? wholePercentagesCollection;
foreach (KeyValuePair<int, List<(string, int)>> keyValuePair in skipNotSkipCollection) foreach (KeyValuePair<int, List<(string, int)>> keyValuePair in skipNotSkipCollection)
{ {
if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection)) if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection))
{ {
results.Add(keyValuePair.Key, new()); results.Add(keyValuePair.Key, []);
if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection)) if (!results.TryGetValue(keyValuePair.Key, out wholePercentagesCollection))
throw new Exception(); throw new Exception();
} }
@ -1241,11 +1241,11 @@ internal abstract class MapLogic
internal static ReadOnlyDictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> ConvertLocationContainers(List<LocationContainer<MetadataExtractor.Directory>> locationContainers) internal static ReadOnlyDictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> ConvertLocationContainers(List<LocationContainer<MetadataExtractor.Directory>> locationContainers)
{ {
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> results = new(); Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> results = [];
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers) foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
{ {
if (!results.ContainsKey(locationContainer.Id)) if (!results.ContainsKey(locationContainer.Id))
results.Add(locationContainer.Id, new()); results.Add(locationContainer.Id, []);
results[locationContainer.Id].Add(locationContainer); results[locationContainer.Id].Add(locationContainer);
} }
return new(results); return new(results);

View File

@ -14,7 +14,7 @@ internal abstract class RelationLogic
{ {
List<LocationContainer<MetadataExtractor.Directory>>? collection; List<LocationContainer<MetadataExtractor.Directory>>? collection;
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>? yearTo; Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>? yearTo;
Dictionary<long, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>> personKeyTo = new(); Dictionary<long, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>> personKeyTo = [];
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers) foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
{ {
if (!locationContainer.FromDistanceContent) if (!locationContainer.FromDistanceContent)
@ -23,13 +23,13 @@ internal abstract class RelationLogic
continue; continue;
if (!personKeyTo.TryGetValue(locationContainer.PersonKey, out yearTo)) if (!personKeyTo.TryGetValue(locationContainer.PersonKey, out yearTo))
{ {
personKeyTo.Add(locationContainer.PersonKey, new()); personKeyTo.Add(locationContainer.PersonKey, []);
if (!personKeyTo.TryGetValue(locationContainer.PersonKey, out yearTo)) if (!personKeyTo.TryGetValue(locationContainer.PersonKey, out yearTo))
throw new Exception(); throw new Exception();
} }
if (!yearTo.TryGetValue(locationContainer.CreationDateOnly.Year, out collection)) 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)) if (!yearTo.TryGetValue(locationContainer.CreationDateOnly.Year, out collection))
throw new Exception(); throw new Exception();
} }
@ -40,13 +40,13 @@ internal abstract class RelationLogic
private static ReadOnlyCollection<Group> GetGroups(Configuration configuration, List<LocationContainer<MetadataExtractor.Directory>> locationContainers) private static ReadOnlyCollection<Group> GetGroups(Configuration configuration, List<LocationContainer<MetadataExtractor.Directory>> locationContainers)
{ {
List<Group> results = new(); List<Group> results = [];
string key; string key;
int lastIndex; int lastIndex;
List<int> years = new(); List<int> years = [];
List<int> indices = new(); List<int> indices = [];
List<(int Index, int Year)> sort = new(); List<(int Index, int Year)> sort = [];
List<LocationContainer<MetadataExtractor.Directory>> collection = new(); List<LocationContainer<MetadataExtractor.Directory>> collection = [];
KeyValuePair<int, List<LocationContainer<MetadataExtractor.Directory>>> keyValue; KeyValuePair<int, List<LocationContainer<MetadataExtractor.Directory>>> keyValue;
Dictionary<long, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>> personKeyTo = GetPersonKeyTo(configuration, locationContainers); Dictionary<long, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>> personKeyTo = GetPersonKeyTo(configuration, locationContainers);
foreach (KeyValuePair<long, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>> keyValuePair in personKeyTo) foreach (KeyValuePair<long, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>> keyValuePair in personKeyTo)
@ -77,7 +77,7 @@ internal abstract class RelationLogic
if (collection.Count == 0) if (collection.Count == 0)
continue; continue;
results.Add(new(key, collection[0].PersonKey, new(collection))); results.Add(new(key, collection[0].PersonKey, new(collection)));
collection = new(); collection = [];
years.Clear(); years.Clear();
} }
} }
@ -86,7 +86,7 @@ internal abstract class RelationLogic
private static ReadOnlyDictionary<string, string> MoveFiles(Configuration configuration, string key, bool isCounterPersonYear, string? displayDirectoryName, ReadOnlyCollection<RelationContainer> relationContainers, List<string> linked1, List<string> linked2, List<string> linked3, List<string> linked4, List<string> linked5, List<string> linked6, List<string> linked7, List<string> linked8, List<string> linked9) private static ReadOnlyDictionary<string, string> MoveFiles(Configuration configuration, string key, bool isCounterPersonYear, string? displayDirectoryName, ReadOnlyCollection<RelationContainer> relationContainers, List<string> linked1, List<string> linked2, List<string> linked3, List<string> linked4, List<string> linked5, List<string> linked6, List<string> linked7, List<string> linked8, List<string> linked9)
{ {
Dictionary<string, string> results = new(); Dictionary<string, string> results = [];
string value; string value;
string checkFile; string checkFile;
string debugFile; string debugFile;
@ -231,15 +231,15 @@ internal abstract class RelationLogic
private static ReadOnlyDictionary<string, string> GetMoveFiles(Configuration configuration, string key, int take, bool isCounterPersonYear, string? displayDirectoryName, ReadOnlyCollection<RelationContainer> relationContainers) private static ReadOnlyDictionary<string, string> GetMoveFiles(Configuration configuration, string key, int take, bool isCounterPersonYear, string? displayDirectoryName, ReadOnlyCollection<RelationContainer> relationContainers)
{ {
ReadOnlyDictionary<string, string> results; ReadOnlyDictionary<string, string> results;
List<string> linked1 = new(); List<string> linked1 = [];
List<string> linked2 = new(); List<string> linked2 = [];
List<string> linked3 = new(); List<string> linked3 = [];
List<string> linked4 = new(); List<string> linked4 = [];
List<string> linked5 = new(); List<string> linked5 = [];
List<string> linked6 = new(); List<string> linked6 = [];
List<string> linked7 = new(); List<string> linked7 = [];
List<string> linked8 = new(); List<string> linked8 = [];
List<string> linked9 = new(); List<string> linked9 = [];
foreach ((FileHolder fileHolder, ReadOnlyCollection<Relation> relations) in relationContainers) foreach ((FileHolder fileHolder, ReadOnlyCollection<Relation> relations) in relationContainers)
{ {
foreach (Relation relation in relations.Take(take)) foreach (Relation relation in relations.Take(take))
@ -306,7 +306,7 @@ internal abstract class RelationLogic
string markDownFile; string markDownFile;
FileHolder fileHolder; FileHolder fileHolder;
string originalString; string originalString;
List<string> lines = new(); List<string> lines = [];
string fileNameWithoutExtension; string fileNameWithoutExtension;
foreach ((FileHolder relationFileHolder, ReadOnlyCollection<Relation> relations) in relationContainers) foreach ((FileHolder relationFileHolder, ReadOnlyCollection<Relation> relations) in relationContainers)
{ {

View File

@ -66,12 +66,12 @@ public class MetadataQuery
const bool useCeilingAverage = true; const bool useCeilingAverage = true;
const string directorySearchFilter = "*"; const string directorySearchFilter = "*";
Dictionary<string, List<KeyValuePair<string, string>>>? dictionary; Dictionary<string, List<KeyValuePair<string, string>>>? 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 }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
List<string[]> filesCollection = Shared.Models.Stateless.Methods.IDirectory.GetFilesCollection(_PropertyConfiguration.RootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage); List<string[]> filesCollection = Shared.Models.Stateless.Methods.IDirectory.GetFilesCollection(_PropertyConfiguration.RootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage);
foreach (string[] files in filesCollection) foreach (string[] files in filesCollection)
{ {
if (!files.Any()) if (files.Length == 0)
continue; continue;
message = $"{ticks}) Reading files for <{files.FirstOrDefault()}> - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)"; 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); progressBar = new(files.Length, message, options);
@ -105,14 +105,14 @@ public class MetadataQuery
string key; string key;
string line; string line;
List<string>? valuePairs; List<string>? valuePairs;
Dictionary<string, List<string>> keyValuePairs = new(); Dictionary<string, List<string>> keyValuePairs = [];
foreach ((string fileName, string count, string tagGroup, string tagIdName, string value) in matches) foreach ((string fileName, string count, string tagGroup, string tagIdName, string value) in matches)
{ {
key = $"{tagGroup}\t{tagIdName}\t{value.Trim()}"; key = $"{tagGroup}\t{tagIdName}\t{value.Trim()}";
line = $"{tagGroup}\t{tagIdName}\t{value.Trim()}\t{count}\t{fileName}"; line = $"{tagGroup}\t{tagIdName}\t{value.Trim()}\t{count}\t{fileName}";
if (!keyValuePairs.TryGetValue(key, out valuePairs)) if (!keyValuePairs.TryGetValue(key, out valuePairs))
{ {
keyValuePairs.Add(key, new()); keyValuePairs.Add(key, []);
if (!keyValuePairs.TryGetValue(key, out valuePairs)) if (!keyValuePairs.TryGetValue(key, out valuePairs))
throw new Exception(); throw new Exception();
} }
@ -136,7 +136,7 @@ public class MetadataQuery
} }
} }
List<(string FileName, string Count, string TagGroup, string TagIdName, string Value)> matches = enumerable().ToList(); List<(string FileName, string Count, string TagGroup, string TagIdName, string Value)> matches = enumerable().ToList();
if (matches.Any()) if (matches.Count != 0)
{ {
matches.Sort(); matches.Sort();
StringBuilder stringBuilder = new(); StringBuilder stringBuilder = new();

View File

@ -60,7 +60,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -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<MetadataExtractor.Directory>
{
private readonly bool _PropertiesChangedForMetadata;
private readonly IPropertyConfiguration _PropertyConfiguration;
private readonly bool _ForceMetadataLastWriteTimeToCreationTime;
private readonly IReadOnlyDictionary<string, string[]> _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<string, MetadataExtractorDirectory> GetMetadataCollection(string file)
{
Dictionary<string, MetadataExtractorDirectory>? 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<MetadataExtractor.Directory> 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<MetadataExtractor.Directory>.GetDateTimes(FileHolder fileHolder, IReadOnlyList<MetadataExtractor.Directory> directories)
{
List<DateTime?> results = [];
DateTime? result = null;
return new(result, results.ToArray());
}
}

View File

@ -28,7 +28,7 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_ForceMetadataLastWriteTimeToCreationTime = false; _ForceMetadataLastWriteTimeToCreationTime = false;
_WriteIndentedJsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true }; _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) public B_Metadata(IPropertyConfiguration propertyConfiguration, bool forceMetadataLastWriteTimeToCreationTime, bool propertiesChangedForMetadata, string bResultsFullGroupDirectory)
@ -37,7 +37,7 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
_PropertiesChangedForMetadata = propertiesChangedForMetadata; _PropertiesChangedForMetadata = propertiesChangedForMetadata;
_ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime; _ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime;
_WriteIndentedJsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true }; _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() public override string ToString()
@ -69,7 +69,7 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
results = null; results = null;
else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old")) else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old"))
throw new ArgumentException("must be a *.json file"); 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; results = null;
else else
{ {
@ -92,7 +92,7 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
IReadOnlyList<MetadataExtractor.Directory> directories = ImageMetadataReader.ReadMetadata(mappingFromItem.ImageFileHolder.FullName); IReadOnlyList<MetadataExtractor.Directory> directories = ImageMetadataReader.ReadMetadata(mappingFromItem.ImageFileHolder.FullName);
results = Stateless.Methods.Metadata.Covert(directories); results = Stateless.Methods.Metadata.Covert(directories);
json = JsonSerializer.Serialize(results, DictionaryStringMetadataExtractorDirectorySourceGenerationContext.Default.DictionaryStringMetadataExtractorDirectory); 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(); DateTime? dateTime = !updateDateWhenMatches ? null : dateTimes.Max();
if (Shared.Models.Stateless.Methods.IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches, compareBeforeWrite: true, updateToWhenMatches: dateTime)) if (Shared.Models.Stateless.Methods.IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches, compareBeforeWrite: true, updateToWhenMatches: dateTime))
{ {
@ -111,7 +111,7 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
(DateTime?, DateTime?[]) IMetadata<MetadataExtractor.Directory>.GetDateTimes(FileHolder fileHolder, IReadOnlyList<MetadataExtractor.Directory> directories) (DateTime?, DateTime?[]) IMetadata<MetadataExtractor.Directory>.GetDateTimes(FileHolder fileHolder, IReadOnlyList<MetadataExtractor.Directory> directories)
{ {
List<DateTime?> results = new(); List<DateTime?> results = [];
DateTime? result = null; DateTime? result = null;
DateTime? dateTime; DateTime? dateTime;
DateTime checkDateTime; DateTime checkDateTime;

View File

@ -11,13 +11,13 @@ internal partial class Metadata
internal static Dictionary<string, MetadataExtractorDirectory> Covert(IReadOnlyList<MetadataExtractor.Directory> directories) internal static Dictionary<string, MetadataExtractorDirectory> Covert(IReadOnlyList<MetadataExtractor.Directory> directories)
{ {
Dictionary<string, MetadataExtractorDirectory> results = new(); Dictionary<string, MetadataExtractorDirectory> results = [];
MetadataExtractorTag metadataExtractorTag; MetadataExtractorTag metadataExtractorTag;
MetadataExtractorDirectory? metadataExtractorDirectory; MetadataExtractorDirectory? metadataExtractorDirectory;
Dictionary<int, MetadataExtractorTag> metadataExtractorTags; Dictionary<int, MetadataExtractorTag> metadataExtractorTags;
foreach (MetadataExtractor.Directory directory in directories) foreach (MetadataExtractor.Directory directory in directories)
{ {
metadataExtractorTags = new(); metadataExtractorTags = [];
if (results.TryGetValue(directory.Name, out metadataExtractorDirectory)) if (results.TryGetValue(directory.Name, out metadataExtractorDirectory))
continue; continue;
foreach (Tag tag in directory.Tags) foreach (Tag tag in directory.Tags)
@ -33,7 +33,7 @@ internal partial class Metadata
internal static Dictionary<string, MetadataExtractorDirectory> Deserialize(string json) internal static Dictionary<string, MetadataExtractorDirectory> Deserialize(string json)
{ {
Dictionary<string, MetadataExtractorDirectory> results = new(); Dictionary<string, MetadataExtractorDirectory> results = [];
Record? record; Record? record;
MetadataExtractorDirectory metadataExtractorDirectory; MetadataExtractorDirectory metadataExtractorDirectory;
Dictionary<string, JsonElement>? keyValuePairs = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(json); Dictionary<string, JsonElement>? keyValuePairs = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(json);
@ -53,7 +53,7 @@ internal partial class Metadata
internal static string? GetFaceEncoding(IReadOnlyList<MetadataExtractor.Directory> directories) internal static string? GetFaceEncoding(IReadOnlyList<MetadataExtractor.Directory> directories)
{ {
string? result; string? result;
List<string> results = new(); List<string> results = [];
const string comment = "Comment: "; const string comment = "Comment: ";
foreach (MetadataExtractor.Directory directory in directories) foreach (MetadataExtractor.Directory directory in directories)
{ {
@ -68,14 +68,14 @@ internal partial class Metadata
results.Add(tag.Description); results.Add(tag.Description);
} }
} }
result = results.Any() ? results[0][comment.Length..] : null; result = results.Count != 0 ? results[0][comment.Length..] : null;
return result; return result;
} }
internal static string? GetOutputResolution(IReadOnlyList<MetadataExtractor.Directory> directories) internal static string? GetOutputResolution(IReadOnlyList<MetadataExtractor.Directory> directories)
{ {
string? result; string? result;
List<string> results = new(); List<string> results = [];
const string artist = "Artist: "; const string artist = "Artist: ";
foreach (MetadataExtractor.Directory directory in directories) foreach (MetadataExtractor.Directory directory in directories)
{ {
@ -90,7 +90,7 @@ internal partial class Metadata
results.Add(tag.Description); results.Add(tag.Description);
} }
} }
result = results.Any() ? results[0][artist.Length..] : null; result = results.Count != 0 ? results[0][artist.Length..] : null;
return result; return result;
} }

View File

@ -55,13 +55,13 @@ public class MirrorLength
private static List<(string, string, DateTime, long)[]> GetToDoCollection(ProgressBar progressBar, List<string[]> filesCollection) private static List<(string, string, DateTime, long)[]> GetToDoCollection(ProgressBar progressBar, List<string[]> filesCollection)
{ {
List<(string, string, DateTime, long)[]> results = new(); List<(string, string, DateTime, long)[]> results = [];
FileInfo fileInfo; FileInfo fileInfo;
List<(string, string, DateTime, long)> collection; List<(string, string, DateTime, long)> collection;
foreach (string[] files in filesCollection) foreach (string[] files in filesCollection)
{ {
progressBar.Tick(); progressBar.Tick();
collection = new(); collection = [];
foreach (string file in files) foreach (string file in files)
{ {
if (file.EndsWith("len")) if (file.EndsWith("len"))
@ -71,7 +71,7 @@ public class MirrorLength
continue; continue;
collection.Add((fileInfo.DirectoryName, file, fileInfo.LastWriteTime, fileInfo.Length)); collection.Add((fileInfo.DirectoryName, file, fileInfo.LastWriteTime, fileInfo.Length));
} }
if (!collection.Any()) if (collection.Count == 0)
continue; continue;
results.Add(collection.ToArray()); results.Add(collection.ToArray());
} }
@ -85,7 +85,7 @@ public class MirrorLength
ProgressBar progressBar; ProgressBar progressBar;
string subDirectoryName; string subDirectoryName;
string[] subDirectories; string[] subDirectories;
List<(string, string, int)> results = new(); List<(string, string, int)> results = [];
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
string[] directories = Directory.GetDirectories(_PropertyConfiguration.RootDirectory, "*", SearchOption.TopDirectoryOnly); string[] directories = Directory.GetDirectories(_PropertyConfiguration.RootDirectory, "*", SearchOption.TopDirectoryOnly);
progressBar = new(directories.Length, message, options); progressBar = new(directories.Length, message, options);
@ -112,7 +112,7 @@ public class MirrorLength
string checkFile; string checkFile;
string checkDirectory; string checkDirectory;
string? firstDirectory; string? firstDirectory;
List<string> directories = new(); List<string> directories = [];
foreach ((string Directory, string, DateTime, long)[] collection in results) foreach ((string Directory, string, DateTime, long)[] collection in results)
{ {
progressBar.Tick(); progressBar.Tick();
@ -153,20 +153,20 @@ public class MirrorLength
string text; string text;
string subKey; string subKey;
string checkFile; string checkFile;
Dictionary<string, List<string>> directoryNameToCount = new(); Dictionary<string, List<string>> directoryNameToCount = [];
Dictionary<string, List<string>> subDirectoryNameToCount = new(); Dictionary<string, List<string>> subDirectoryNameToCount = [];
foreach ((string directoryName, string subDirectoryName, int count) in collection) foreach ((string directoryName, string subDirectoryName, int count) in collection)
{ {
key = directoryName.Replace(today, string.Empty).Replace(")", "-"); key = directoryName.Replace(today, string.Empty).Replace(")", "-");
subKey = subDirectoryName.Replace(today, string.Empty).Replace(") ", "-").Replace(" ", "-"); subKey = subDirectoryName.Replace(today, string.Empty).Replace(") ", "-").Replace(" ", "-");
if (!directoryNameToCount.ContainsKey(key)) 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) if (count == 0)
directoryNameToCount[key].Add($"- <00000000> '{subDirectoryName}'"); directoryNameToCount[key].Add($"- <00000000> '{subDirectoryName}'");
else else
directoryNameToCount[key].Add($"- <{count:00000000}> [[{subKey}]]"); directoryNameToCount[key].Add($"- <{count:00000000}> [[{subKey}]]");
if (!subDirectoryNameToCount.ContainsKey(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) if (count == 0)
subDirectoryNameToCount[subKey].Add($"- <00000000> '{directoryName}'"); subDirectoryNameToCount[subKey].Add($"- <00000000> '{directoryName}'");
else else
@ -194,15 +194,15 @@ public class MirrorLength
List<(string, string, int)> collectionForMarkDown; List<(string, string, int)> collectionForMarkDown;
bool inPlaceSave = _PropertyConfiguration.RootDirectory.First() == _AppSettings.Destination; bool inPlaceSave = _PropertyConfiguration.RootDirectory.First() == _AppSettings.Destination;
if (!inPlaceSave) if (!inPlaceSave)
collectionForMarkDown = new(); collectionForMarkDown = [];
else else
{ {
string today = DateTime.Now.ToString("yyyy-MM-dd-"); string today = DateTime.Now.ToString("yyyy-MM-dd-");
collectionForMarkDown = GetToDoCollectionForMarkDown(message, today); collectionForMarkDown = GetToDoCollectionForMarkDown(message, today);
if (collectionForMarkDown.Any()) if (collectionForMarkDown.Count != 0)
Write(today, collectionForMarkDown); Write(today, collectionForMarkDown);
} }
if (!collectionForMarkDown.Any()) if (collectionForMarkDown.Count == 0)
{ {
ProgressBar progressBar; ProgressBar progressBar;
const bool useCeilingAverage = true; const bool useCeilingAverage = true;
@ -214,7 +214,7 @@ public class MirrorLength
List<(string, string, DateTime, long)[]> collection = GetToDoCollection(progressBar, filesCollection); List<(string, string, DateTime, long)[]> collection = GetToDoCollection(progressBar, filesCollection);
progressBar.Dispose(); progressBar.Dispose();
progressBar = new(filesCollection.Count, message, options); progressBar = new(filesCollection.Count, message, options);
if (collection.Any()) if (collection.Count != 0)
Write(ticks, inPlaceSave, progressBar, collection); Write(ticks, inPlaceSave, progressBar, collection);
progressBar.Dispose(); progressBar.Dispose();
} }

View File

@ -60,7 +60,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -45,7 +45,7 @@ public class MoveById
MatchNginx[]? matchNginxCollection = System.Text.Json.JsonSerializer.Deserialize<MatchNginx[]>(json); MatchNginx[]? matchNginxCollection = System.Text.Json.JsonSerializer.Deserialize<MatchNginx[]>(json);
if (matchNginxCollection is null) if (matchNginxCollection is null)
throw new NullReferenceException(nameof(matchNginxCollection)); throw new NullReferenceException(nameof(matchNginxCollection));
if (matchNginxCollection.Any()) if (matchNginxCollection.Length != 0)
{ {
List<string> lines = MoveFilesByIdInDirectories(options, matchNginxCollection); List<string> lines = MoveFilesByIdInDirectories(options, matchNginxCollection);
File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines);
@ -70,7 +70,7 @@ public class MoveById
private static List<string> GetAllFiles(MatchNginx[] matchNginxCollection) private static List<string> GetAllFiles(MatchNginx[] matchNginxCollection)
{ {
List<string> allFiles = new(); List<string> allFiles = [];
string[] files; string[] files;
string directoryName; string directoryName;
ReadOnlySpan<char> span; ReadOnlySpan<char> span;
@ -101,7 +101,7 @@ public class MoveById
private List<string> GetToDoCollection(ProgressBar progressBar, List<string> allFiles) private List<string> GetToDoCollection(ProgressBar progressBar, List<string> allFiles)
{ {
List<string> results = new(); List<string> results = [];
int? id; int? id;
string? message; string? message;
string[] matches; string[] matches;
@ -136,7 +136,7 @@ public class MoveById
if (id is null) if (id is null)
continue; continue;
matches = (from l in allFiles where l.Contains($"{id}{fileHolder.ExtensionLowered}") select l).ToArray(); matches = (from l in allFiles where l.Contains($"{id}{fileHolder.ExtensionLowered}") select l).ToArray();
if (!matches.Any()) if (matches.Length == 0)
continue; continue;
results.Add(fileHolder.FullName); results.Add(fileHolder.FullName);
results.AddRange(matches); results.AddRange(matches);
@ -156,16 +156,16 @@ public class MoveById
private List<string> MoveFilesByIdInDirectories(ProgressBarOptions options, MatchNginx[] matchNginxCollection) private List<string> MoveFilesByIdInDirectories(ProgressBarOptions options, MatchNginx[] matchNginxCollection)
{ {
List<string> results = new(); List<string> results = [];
string moveTo; string moveTo;
string? directory; string? directory;
string message = "Moving allFiles"; string message = "Moving allFiles";
List<string> distinctDirectories = new(); List<string> distinctDirectories = [];
List<string> allFiles = GetAllFiles(matchNginxCollection); List<string> allFiles = GetAllFiles(matchNginxCollection);
ProgressBar progressBar = new(allFiles.Count, message, options); ProgressBar progressBar = new(allFiles.Count, message, options);
List<string> toDoCollection = GetToDoCollection(progressBar, allFiles); List<string> toDoCollection = GetToDoCollection(progressBar, allFiles);
progressBar.Dispose(); progressBar.Dispose();
List<(string, string)> moveCollection = new(); List<(string, string)> moveCollection = [];
foreach (string file in toDoCollection) foreach (string file in toDoCollection)
{ {
moveTo = $"{_AppSettings.MoveTo}{file[1..]}"; moveTo = $"{_AppSettings.MoveTo}{file[1..]}";

View File

@ -58,7 +58,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -47,7 +47,7 @@ public class OffsetDateTimeOriginal
logger?.LogInformation(propertyConfiguration.RootDirectory); logger?.LogInformation(propertyConfiguration.RootDirectory);
Verify(); Verify();
List<string> lines = OffsetDateTimeOriginalFilesInDirectories(logger); List<string> lines = OffsetDateTimeOriginalFilesInDirectories(logger);
if (lines.Any()) if (lines.Count != 0)
File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines);
} }
@ -71,7 +71,7 @@ public class OffsetDateTimeOriginal
private List<Record> GetRecords(ASCIIEncoding asciiEncoding, string checkDirectory, DateTime minimumDateTime, DateTime maximumDateTime, long ticks) private List<Record> GetRecords(ASCIIEncoding asciiEncoding, string checkDirectory, DateTime minimumDateTime, DateTime maximumDateTime, long ticks)
{ {
List<Record> results = new(); List<Record> results = [];
DateTime dateTime; DateTime dateTime;
int? id; int? id;
string? message; string? message;
@ -125,7 +125,7 @@ public class OffsetDateTimeOriginal
ticks++; ticks++;
} }
List<Record> records = GetRecords(asciiEncoding, checkDirectory, minimumDateTime, maximumDateTime, ticks); List<Record> records = GetRecords(asciiEncoding, checkDirectory, minimumDateTime, maximumDateTime, ticks);
ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty<Type>(), null) ?? throw new Exception(); ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, [], null) ?? throw new Exception();
string? message = nameof(OffsetDateTimeOriginal); string? message = nameof(OffsetDateTimeOriginal);
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
ProgressBar progressBar = new(records.Count, message, options); ProgressBar progressBar = new(records.Count, message, options);
@ -177,8 +177,8 @@ public class OffsetDateTimeOriginal
{ {
string format = "yyyy-MM-dd"; string format = "yyyy-MM-dd";
string[] maximumDirectory = Directory.GetDirectories(minimumDirectory.First(), "*", SearchOption.TopDirectoryOnly); string[] maximumDirectory = Directory.GetDirectories(minimumDirectory.First(), "*", SearchOption.TopDirectoryOnly);
string[] badFiles = !Directory.Exists(badDirectory) ? Array.Empty<string>() : Directory.GetFiles(badDirectory, "*", SearchOption.TopDirectoryOnly); string[] badFiles = !Directory.Exists(badDirectory) ? [] : Directory.GetFiles(badDirectory, "*", SearchOption.TopDirectoryOnly);
string[] targetFiles = !Directory.Exists(targetDirectory) ? Array.Empty<string>() : Directory.GetFiles(targetDirectory, "*", SearchOption.TopDirectoryOnly); string[] targetFiles = !Directory.Exists(targetDirectory) ? [] : Directory.GetFiles(targetDirectory, "*", SearchOption.TopDirectoryOnly);
if (badFiles.Length != 1 || targetFiles.Length != 1 || maximumDirectory.Length != 1) 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!"); logger?.LogError("bad file(s) or target file(s) or maximum directory doesn't equal 1!");
else else
@ -204,12 +204,12 @@ public class OffsetDateTimeOriginal
(badDateTimeOriginal, badDateTimes, badId, badMessage) = Property.Models.Stateless.IProperty.Get(_PropertyConfiguration.PopulatePropertyId, badFileHolder, badIsIgnoreExtension, badIsValidImageFormatExtension, asciiEncoding); (badDateTimeOriginal, badDateTimes, badId, badMessage) = Property.Models.Stateless.IProperty.Get(_PropertyConfiguration.PopulatePropertyId, badFileHolder, badIsIgnoreExtension, badIsValidImageFormatExtension, asciiEncoding);
if (badMessage is not null) if (badMessage is not null)
throw new Exception(badMessage); throw new Exception(badMessage);
if (!badDateTimes.Any() || badId is null) if (badDateTimes.Length == 0 || badId is null)
throw new Exception(badMessage); throw new Exception(badMessage);
(targetDateTimeOriginal, targetDateTimes, targetId, targetMessage) = Property.Models.Stateless.IProperty.Get(_PropertyConfiguration.PopulatePropertyId, targetFileHolder, targetIsIgnoreExtension, targetIsValidImageFormatExtension, asciiEncoding); (targetDateTimeOriginal, targetDateTimes, targetId, targetMessage) = Property.Models.Stateless.IProperty.Get(_PropertyConfiguration.PopulatePropertyId, targetFileHolder, targetIsIgnoreExtension, targetIsValidImageFormatExtension, asciiEncoding);
if (targetMessage is not null) if (targetMessage is not null)
throw new Exception(targetMessage); throw new Exception(targetMessage);
if (!targetDateTimes.Any() || targetId is null) if (targetDateTimes.Length == 0 || targetId is null)
throw new Exception(targetMessage); throw new Exception(targetMessage);
if (badDateTimeOriginal is null || targetDateTimeOriginal is null) if (badDateTimeOriginal is null || targetDateTimeOriginal is null)
logger?.LogError("Date is null!"); logger?.LogError("Date is null!");
@ -226,7 +226,7 @@ public class OffsetDateTimeOriginal
private List<string> OffsetDateTimeOriginalFilesInDirectories(ILogger<Program>? logger) private List<string> OffsetDateTimeOriginalFilesInDirectories(ILogger<Program>? logger)
{ {
List<string> results = new(); List<string> results = [];
DateFix(logger, _PropertyConfiguration.RootDirectory); DateFix(logger, _PropertyConfiguration.RootDirectory);
return results; return results;
} }

View File

@ -60,7 +60,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -14,18 +14,18 @@ public class F_PhotoPrism
{ {
JsonProperty[] results; JsonProperty[] results;
if (!File.Exists(fileName)) if (!File.Exists(fileName))
results = Array.Empty<JsonProperty>(); results = [];
else else
{ {
string json = File.ReadAllText(fileName); string json = File.ReadAllText(fileName);
JsonElement[]? jsonElements = JsonSerializer.Deserialize<JsonElement[]>(json); JsonElement[]? jsonElements = JsonSerializer.Deserialize<JsonElement[]>(json);
if (jsonElements is null || jsonElements.Length == 0) if (jsonElements is null || jsonElements.Length == 0)
results = Array.Empty<JsonProperty>(); results = [];
else else
{ {
JsonElement jsonElement = jsonElements.Last(); JsonElement jsonElement = jsonElements.Last();
if (jsonElement.ValueKind != JsonValueKind.Object) if (jsonElement.ValueKind != JsonValueKind.Object)
results = Array.Empty<JsonProperty>(); results = [];
else else
results = jsonElement.EnumerateObject().ToArray(); results = jsonElement.EnumerateObject().ToArray();
} }
@ -47,7 +47,7 @@ public class F_PhotoPrism
private static Dictionary<string, List<Shared.Models.Marker>> GetFileUIdToMarkers(string fPhotoPrismSingletonDirectory) private static Dictionary<string, List<Shared.Models.Marker>> GetFileUIdToMarkers(string fPhotoPrismSingletonDirectory)
{ {
Dictionary<string, List<Shared.Models.Marker>> results = new(); Dictionary<string, List<Shared.Models.Marker>> results = [];
string fileUid; string fileUid;
Marker[]? markers = GetMarkers(fPhotoPrismSingletonDirectory); Marker[]? markers = GetMarkers(fPhotoPrismSingletonDirectory);
if (markers is null) if (markers is null)
@ -56,7 +56,7 @@ public class F_PhotoPrism
{ {
fileUid = HexStringToString(marker.FileUid); fileUid = HexStringToString(marker.FileUid);
if (!results.ContainsKey(fileUid)) if (!results.ContainsKey(fileUid))
results.Add(fileUid, new()); results.Add(fileUid, []);
results[fileUid].Add(Marker.Map(marker)); results[fileUid].Add(Marker.Map(marker));
} }
return results; return results;
@ -84,7 +84,7 @@ public class F_PhotoPrism
results = null; results = null;
else else
{ {
results = new(); results = [];
DatabaseFile[]? databaseFiles = JsonSerializer.Deserialize<DatabaseFile[]>(jsonProperties.Last().Value); DatabaseFile[]? databaseFiles = JsonSerializer.Deserialize<DatabaseFile[]>(jsonProperties.Last().Value);
if (databaseFiles is null) if (databaseFiles is null)
results = null; results = null;
@ -105,7 +105,7 @@ public class F_PhotoPrism
if (results is null) if (results is null)
{ {
int id; int id;
results = new(); results = [];
string fileNameWithoutExtension; string fileNameWithoutExtension;
List<Shared.Models.Marker>? makers; List<Shared.Models.Marker>? makers;
MappingFromPhotoPrism mappingFromPhotoPrism; MappingFromPhotoPrism mappingFromPhotoPrism;
@ -124,12 +124,12 @@ public class F_PhotoPrism
if (!results.TryGetValue(id, out mappingFromPhotoPrismCollection)) if (!results.TryGetValue(id, out mappingFromPhotoPrismCollection))
{ {
results.Add(id, new()); results.Add(id, []);
if (!results.TryGetValue(id, out mappingFromPhotoPrismCollection)) if (!results.TryGetValue(id, out mappingFromPhotoPrismCollection))
throw new Exception(); throw new Exception();
} }
if (!fileUIdToMarkers.TryGetValue(databaseFile.FileUid, out makers)) if (!fileUIdToMarkers.TryGetValue(databaseFile.FileUid, out makers))
mappingFromPhotoPrism = new(databaseFile, new()); mappingFromPhotoPrism = new(databaseFile, []);
else else
mappingFromPhotoPrism = new(databaseFile, makers); mappingFromPhotoPrism = new(databaseFile, makers);
mappingFromPhotoPrismCollection.Add(mappingFromPhotoPrism); mappingFromPhotoPrismCollection.Add(mappingFromPhotoPrism);
@ -179,7 +179,7 @@ public class F_PhotoPrism
int width, height; int width, height;
int? wholePercentages; int? wholePercentages;
RectangleF? prismRectangle; RectangleF? prismRectangle;
List<string> subjects = new(); List<string> subjects = [];
DateTime dateTime = new(ticks); DateTime dateTime = new(ticks);
int dlibLocationWholePercentages; int dlibLocationWholePercentages;
StringBuilder stringBuilder = new(); StringBuilder stringBuilder = new();
@ -188,7 +188,7 @@ public class F_PhotoPrism
float rectangleIntersectMinimum = rectangleIntersectMinimums.Min(); float rectangleIntersectMinimum = rectangleIntersectMinimums.Min();
ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers; ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers;
(MappingFromPhotoPrism MappingFromPhotoPrism, Shared.Models.Marker Marker, float Percent)[] sortedCollection; (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) foreach (Face face in distinctFilteredFaces)
{ {
collection.Clear(); collection.Clear();

View File

@ -58,7 +58,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -26,14 +26,14 @@ public class A_Property
public A_Property(int maxDegreeOfParallelism, Configuration propertyConfiguration, string outputExtension, bool reverse, string aResultsFullGroupDirectory) public A_Property(int maxDegreeOfParallelism, Configuration propertyConfiguration, string outputExtension, bool reverse, string aResultsFullGroupDirectory)
{ {
Reverse = reverse; Reverse = reverse;
_ExceptionsDirectories = new(); _ExceptionsDirectories = [];
_OutputExtension = outputExtension; _OutputExtension = outputExtension;
_ASCIIEncoding = new ASCIIEncoding(); _ASCIIEncoding = new ASCIIEncoding();
_Configuration = propertyConfiguration; _Configuration = propertyConfiguration;
_AngleBracketCollection = new List<string>(); _AngleBracketCollection = [];
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_MaxDegreeOfParallelism = maxDegreeOfParallelism; _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() public override string ToString()
@ -49,7 +49,7 @@ public class A_Property
FileInfo fileInfo; FileInfo fileInfo;
string? json = null; string? json = null;
bool hasWrongYearProperty = false; bool hasWrongYearProperty = false;
string[] changesFrom = Array.Empty<string>(); string[] changesFrom = [];
string angleBracket = _AngleBracketCollection[0]; string angleBracket = _AngleBracketCollection[0];
bool populateId = _Configuration.PopulatePropertyId; bool populateId = _Configuration.PopulatePropertyId;
if (!item.IsUniqueFileName) if (!item.IsUniqueFileName)
@ -76,7 +76,7 @@ public class A_Property
result = null; result = null;
else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old")) else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old"))
throw new ArgumentException("must be a *.json file"); 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; result = null;
else else
{ {
@ -181,7 +181,7 @@ public class A_Property
private void SavePropertyParallelForWork(Shared.Models.Methods.IMetadata<MetadataExtractor.Directory> metadata, string sourceDirectory, List<Tuple<string, DateTime>> sourceDirectoryFileTuples, List<Tuple<string, DateTime>> sourceDirectoryChanges, Item item) private void SavePropertyParallelForWork(Shared.Models.Methods.IMetadata<MetadataExtractor.Directory> metadata, string sourceDirectory, List<Tuple<string, DateTime>> sourceDirectoryFileTuples, List<Tuple<string, DateTime>> sourceDirectoryChanges, Item item)
{ {
Shared.Models.Property property; Shared.Models.Property property;
List<string> parseExceptions = new(); List<string> parseExceptions = [];
bool isIgnoreExtension = item.IsValidImageFormatExtension && _PropertyConfiguration.IgnoreExtensions.Contains(item.ImageFileHolder.ExtensionLowered); bool isIgnoreExtension = item.IsValidImageFormatExtension && _PropertyConfiguration.IgnoreExtensions.Contains(item.ImageFileHolder.ExtensionLowered);
string filteredSourceDirectoryFileExtensionLowered = Path.Combine(sourceDirectory, $"{item.ImageFileHolder.NameWithoutExtension}{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) 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<MetadataExtractor.Directory> metadata, List<Exception> exceptions, List<Tuple<string, DateTime>> sourceDirectoryChanges, Container container, List<Item> items, string message) private void SavePropertyParallelWork(int maxDegreeOfParallelism, Shared.Models.Methods.IMetadata<MetadataExtractor.Directory> metadata, List<Exception> exceptions, List<Tuple<string, DateTime>> sourceDirectoryChanges, Container container, List<Item> items, string message)
{ {
List<Tuple<string, DateTime>> sourceDirectoryFileTuples = new(); List<Tuple<string, DateTime>> sourceDirectoryFileTuples = [];
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism }; ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism };
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
using ProgressBar progressBar = new(items.Count, message, options); using ProgressBar progressBar = new(items.Count, message, options);
@ -222,7 +222,7 @@ public class A_Property
DateTime dateTime = DateTime.Now; DateTime dateTime = DateTime.Now;
List<Tuple<string, DateTime>> collection; List<Tuple<string, DateTime>> collection;
SavePropertyParallelForWork(metadata, container.SourceDirectory, sourceDirectoryChanges, sourceDirectoryFileTuples, items[i]); SavePropertyParallelForWork(metadata, container.SourceDirectory, sourceDirectoryChanges, sourceDirectoryFileTuples, items[i]);
if (i == 0 || sourceDirectoryChanges.Any()) if (i == 0 || sourceDirectoryChanges.Count != 0)
progressBar.Tick(); progressBar.Tick();
lock (sourceDirectoryFileTuples) lock (sourceDirectoryFileTuples)
collection = (from l in sourceDirectoryFileTuples where l.Item2 > dateTime select l).ToList(); collection = (from l in sourceDirectoryFileTuples where l.Item2 > dateTime select l).ToList();
@ -244,18 +244,18 @@ public class A_Property
int totalSeconds; int totalSeconds;
Container container; Container container;
bool anyNullOrNoIsUniqueFileName; bool anyNullOrNoIsUniqueFileName;
List<Exception> exceptions = new(); List<Exception> exceptions = [];
int containersLength = containers.Length; int containersLength = containers.Length;
const string outputResolution = "Original"; const string outputResolution = "Original";
List<Tuple<string, DateTime>> sourceDirectoryChanges = new(); List<Tuple<string, DateTime>> sourceDirectoryChanges = [];
string propertyRoot = IResult.GetResultsGroupDirectory(_PropertyConfiguration, nameof(A_Property)); string propertyRoot = IResult.GetResultsGroupDirectory(_PropertyConfiguration, nameof(A_Property));
for (int i = 0; i < containers.Length; i++) for (int i = 0; i < containers.Length; i++)
{ {
container = containers[i]; container = containers[i];
if (!container.Items.Any()) if (container.Items.Count == 0)
continue; continue;
sourceDirectoryChanges.Clear(); sourceDirectoryChanges.Clear();
if (!container.Items.Any()) if (container.Items.Count == 0)
continue; continue;
anyNullOrNoIsUniqueFileName = container.Items.Any(l => !l.IsUniqueFileName); anyNullOrNoIsUniqueFileName = container.Items.Any(l => !l.IsUniqueFileName);
SetAngleBracketCollection(container.SourceDirectory, anyNullOrNoIsUniqueFileName); SetAngleBracketCollection(container.SourceDirectory, anyNullOrNoIsUniqueFileName);
@ -273,7 +273,7 @@ public class A_Property
public Shared.Models.Property GetProperty(Shared.Models.Methods.IMetadata<MetadataExtractor.Directory> metadata, Item item, List<Tuple<string, DateTime>> sourceDirectoryFileTuples, List<string> parseExceptions) public Shared.Models.Property GetProperty(Shared.Models.Methods.IMetadata<MetadataExtractor.Directory> metadata, Item item, List<Tuple<string, DateTime>> sourceDirectoryFileTuples, List<string> parseExceptions)
{ {
Shared.Models.Property result; Shared.Models.Property result;
bool angleBracketCollectionAny = _AngleBracketCollection.Any(); bool angleBracketCollectionAny = _AngleBracketCollection.Count != 0;
if (!angleBracketCollectionAny) if (!angleBracketCollectionAny)
{ {
if (item.ImageFileHolder.DirectoryName is null) if (item.ImageFileHolder.DirectoryName is null)

View File

@ -81,7 +81,7 @@ public class Configuration
configuration.PopulatePropertyId.Value, configuration.PopulatePropertyId.Value,
configuration.PredictorModelName, configuration.PredictorModelName,
configuration.PropertiesChangedForProperty.Value, configuration.PropertiesChangedForProperty.Value,
configuration.PropertyContentCollectionFiles ?? Array.Empty<string>(), configuration.PropertyContentCollectionFiles ?? [],
configuration.ResultAllInOne, configuration.ResultAllInOne,
configuration.ResultAllInOneSubdirectoryLength.Value, configuration.ResultAllInOneSubdirectoryLength.Value,
configuration.ResultCollection, configuration.ResultCollection,
@ -89,7 +89,7 @@ public class Configuration
configuration.ResultSingleton, configuration.ResultSingleton,
Path.GetFullPath(configuration.RootDirectory), Path.GetFullPath(configuration.RootDirectory),
configuration.ValidImageFormatExtensions, configuration.ValidImageFormatExtensions,
configuration.VerifyToSeason ?? Array.Empty<string>()); configuration.VerifyToSeason ?? []);
return result; return result;
} }

View File

@ -12,12 +12,15 @@ using View_by_Distance.Shared.Models.Stateless;
namespace View_by_Distance.Property.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<DateTime> GetDateTimes(DateTime dateTimeFromName, DateTime?[] dateTimes) private static List<DateTime> GetDateTimes(DateTime dateTimeFromName, DateTime?[] dateTimes)
{ {
List<DateTime> results = new() { dateTimeFromName }; List<DateTime> results = [dateTimeFromName];
foreach (DateTime? dateTime in dateTimes) foreach (DateTime? dateTime in dateTimes)
{ {
if (dateTime is null) if (dateTime is null)
@ -29,7 +32,7 @@ internal class Property
private static List<DateTime> GetDateTimes(DateTime?[] dateTimes, DateTime?[] metadataDateTimes) private static List<DateTime> GetDateTimes(DateTime?[] dateTimes, DateTime?[] metadataDateTimes)
{ {
List<DateTime> results = new(); List<DateTime> results = [];
foreach (DateTime? dateTime in metadataDateTimes) foreach (DateTime? dateTime in metadataDateTimes)
{ {
if (dateTime is null || results.Contains(dateTime.Value)) if (dateTime is null || results.Contains(dateTime.Value))
@ -47,8 +50,8 @@ internal class Property
private static List<DateTime> GetDateTimes(FileHolder fileHolder, DateTime?[] dateTimes) private static List<DateTime> GetDateTimes(FileHolder fileHolder, DateTime?[] dateTimes)
{ {
List<DateTime> results = new(); List<DateTime> results = [];
string[] digits = Regex.Split(fileHolder.FullName, @"\D+"); string[] digits = Digit().Split(fileHolder.FullName);
foreach (string digit in digits) foreach (string digit in digits)
{ {
if (digit.Length != 4 || digit[..2] is not "19" and not "20" || !int.TryParse(digit, out int year)) 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; string fullFormat;
StringBuilder value = new(); StringBuilder value = new();
const string ticksExample = "##################"; const string ticksExample = "##################";
string[][] dateFormats = new string[][] string[][] dateFormats =
{ [
new string[] { string.Empty, "yyyyMMdd_HHmmss", string.Empty }, [string.Empty, "yyyyMMdd_HHmmss", string.Empty],
new string[] { string.Empty, "yyyyMMddHHmmssfff", string.Empty }, [string.Empty, "yyyyMMddHHmmssfff", string.Empty],
new string[] { string.Empty, "yyyyMMdd_", ticksExample }, [string.Empty, "yyyyMMdd_", ticksExample],
new string[] { string.Empty, "yyyy-MM-dd_", ticksExample }, [string.Empty, "yyyy-MM-dd_", ticksExample],
new string[] { string.Empty, "yyyy-MM-dd.", ticksExample }, [string.Empty, "yyyy-MM-dd.", ticksExample],
new string[] { string.Empty, "yyyy-MM-dd.", $"{ticksExample}.{fileHolder.Length}" }, [string.Empty, "yyyy-MM-dd.", $"{ticksExample}.{fileHolder.Length}"],
new string[] { string.Empty, "yyyy-MM-dd HH.mm.ss", string.Empty }, [string.Empty, "yyyy-MM-dd HH.mm.ss", string.Empty],
new string[] { string.Empty, "yyyyMMdd_HHmmss", "_LLS" }, [string.Empty, "yyyyMMdd_HHmmss", "_LLS"],
new string[] { string.Empty, "yyyyMMdd_HHmmss", "_HDR" }, [string.Empty, "yyyyMMdd_HHmmss", "_HDR"],
new string[] { "WIN_", "yyyyMMdd_HH_mm_ss", "_Pro" }, ["WIN_", "yyyyMMdd_HH_mm_ss", "_Pro"],
new string[] { "IMG_", "yyyyMMdd_HHmmss", string.Empty }, ["IMG_", "yyyyMMdd_HHmmss", string.Empty],
new string[] { "IMG#####-", "yyyyMMdd-HHmm", string.Empty }, ["IMG#####-", "yyyyMMdd-HHmm", string.Empty],
new string[] { "CameraZOOM-", "yyyyMMddHHmmss", string.Empty }, ["CameraZOOM-", "yyyyMMddHHmmss", string.Empty],
new string[] { "VideoCapture_", "yyyyMMdd-HHmmss ", string.Empty } ["VideoCapture_", "yyyyMMdd-HHmmss ", string.Empty]
}; ];
foreach (string[] dateFormat in dateFormats) foreach (string[] dateFormat in dateFormats)
{ {
_ = value.Clear(); _ = value.Clear();
@ -126,7 +129,7 @@ internal class Property
private static List<DateTime> GetDateTimes(DateTime?[] metadataDateTimes) private static List<DateTime> GetDateTimes(DateTime?[] metadataDateTimes)
{ {
List<DateTime> results = new(); List<DateTime> results = [];
foreach (DateTime? dateTime in metadataDateTimes) foreach (DateTime? dateTime in metadataDateTimes)
{ {
if (dateTime is null || results.Contains(dateTime.Value)) if (dateTime is null || results.Contains(dateTime.Value))
@ -236,7 +239,7 @@ internal class Property
} }
catch (Exception) catch (Exception)
{ {
dateTimesByLogic = new(); dateTimesByLogic = [];
message = string.Concat(new StackFrame().GetMethod()?.Name, " <", fileHolder.FullName, ">"); message = string.Concat(new StackFrame().GetMethod()?.Name, " <", fileHolder.FullName, ">");
} }
} }
@ -338,11 +341,11 @@ internal class Property
} }
} }
message = null; message = null;
dateTimes = new DateTime?[] { fileHolder.LastWriteTime, fileHolder.CreationTime, dateTime, dateTimeDigitized, dateTimeOriginal, gpsDateStamp }; dateTimes = [fileHolder.LastWriteTime, fileHolder.CreationTime, dateTime, dateTimeDigitized, dateTimeOriginal, gpsDateStamp];
} }
catch (Exception) catch (Exception)
{ {
dateTimes = Array.Empty<DateTime?>(); dateTimes = [];
message = string.Concat(new StackFrame().GetMethod()?.Name, " <", fileHolder.FullName, ">"); message = string.Concat(new StackFrame().GetMethod()?.Name, " <", fileHolder.FullName, ">");
} }
if (metadata is not null && dateTimeOriginal is null) if (metadata is not null && dateTimeOriginal is null)
@ -362,7 +365,7 @@ internal class Property
(dateTimeOriginalByLogic, dateTimesByLogic) = (dateTimeOriginal, GetDateTimes(dateTimeFromName.Value, dateTimes)); (dateTimeOriginalByLogic, dateTimesByLogic) = (dateTimeOriginal, GetDateTimes(dateTimeFromName.Value, dateTimes));
} }
else else
(message, dateTimeOriginalByLogic, dateTimesByLogic) = (null, null, new()); (message, dateTimeOriginalByLogic, dateTimesByLogic) = (null, null, []);
if (fileHolder.Length is null) if (fileHolder.Length is null)
fileLength = 0; fileLength = 0;
else else
@ -389,7 +392,7 @@ internal class Property
DateTime[] dateTimes; DateTime[] dateTimes;
Shared.Models.Property? property = null; Shared.Models.Property? property = null;
if (isIgnoreExtension || !isValidImageFormatExtension) if (isIgnoreExtension || !isValidImageFormatExtension)
(message, dateTimes, property) = (null, Array.Empty<DateTime>(), null); (message, dateTimes, property) = (null, [], null);
else else
(message, dateTimes, property) = GetProperty(populateId, metadata, fileHolder, property, isIgnoreExtension, isValidImageFormatExtension, id, asciiEncoding); (message, dateTimes, property) = GetProperty(populateId, metadata, fileHolder, property, isIgnoreExtension, isValidImageFormatExtension, id, asciiEncoding);
return new(property?.DateTimeOriginal, dateTimes, property?.Id, message); return new(property?.DateTimeOriginal, dateTimes, property?.Id, message);

View File

@ -105,7 +105,7 @@ internal class Result
internal static List<string> GetDirectoryInfoCollection(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) internal static List<string> GetDirectoryInfoCollection(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted)
{ {
List<string> results = new(); List<string> results = [];
string sourceDirectorySegment = GetRelativePath(propertyConfiguration, sourceDirectory); string sourceDirectorySegment = GetRelativePath(propertyConfiguration, sourceDirectory);
string result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment); string result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
if (!string.IsNullOrEmpty(contentDescription)) if (!string.IsNullOrEmpty(contentDescription))

View File

@ -7,13 +7,10 @@ namespace View_by_Distance.Rename.Models.Binder;
public class Configuration public class Configuration
{ {
#nullable disable public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; }
public string[]? IgnoreExtensions { get; set; }
public string[] IgnoreExtensions { get; set; } public string? PersonBirthdayFormat { get; set; }
public Property.Models.Configuration PropertyConfiguration { get; set; } public bool? PropertiesChangedForMetadata { get; set; }
public string PersonBirthdayFormat { get; set; }
#nullable restore
public override string ToString() public override string ToString()
{ {
@ -21,16 +18,19 @@ public class Configuration
return result; return result;
} }
private static Models.Configuration Get(Configuration? configuration) private static Models.Configuration Get(Configuration? configuration, Property.Models.Configuration propertyConfiguration)
{ {
Models.Configuration result; Models.Configuration result;
if (configuration is null) throw new NullReferenceException(nameof(configuration)); 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.IgnoreExtensions is null) throw new NullReferenceException(nameof(configuration.IgnoreExtensions));
if (configuration.PersonBirthdayFormat is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat)); if (configuration.PersonBirthdayFormat is null) throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat));
result = new( if (configuration.PropertiesChangedForMetadata is null) throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata));
result = new(propertyConfiguration,
configuration.ForceMetadataLastWriteTimeToCreationTime.Value,
configuration.IgnoreExtensions, configuration.IgnoreExtensions,
configuration.PersonBirthdayFormat, configuration.PersonBirthdayFormat,
configuration.PropertyConfiguration); configuration.PropertiesChangedForMetadata.Value);
return result; return result;
} }
@ -47,7 +47,7 @@ public class Configuration
IConfigurationSection configurationSection = configurationRoot.GetSection(section); IConfigurationSection configurationSection = configurationRoot.GetSection(section);
configuration = configurationSection.Get<Configuration>(); configuration = configurationSection.Get<Configuration>();
} }
result = Get(configuration); result = Get(configuration, propertyConfiguration);
return result; return result;
} }

View File

@ -1,6 +1,8 @@
namespace View_by_Distance.Rename.Models; namespace View_by_Distance.Rename.Models;
public record Configuration(string[] IgnoreExtensions, public record Configuration(Property.Models.Configuration PropertyConfiguration,
bool ForceMetadataLastWriteTimeToCreationTime,
string[] IgnoreExtensions,
string PersonBirthdayFormat, string PersonBirthdayFormat,
Property.Models.Configuration PropertyConfiguration); bool PropertiesChangedForMetadata);

View File

@ -58,7 +58,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -3,6 +3,7 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Phares.Shared; using Phares.Shared;
using ShellProgressBar; using ShellProgressBar;
using System.Collections.ObjectModel;
using System.Text; using System.Text;
using View_by_Distance.Metadata.Models; using View_by_Distance.Metadata.Models;
using View_by_Distance.Rename.Models; using View_by_Distance.Rename.Models;
@ -15,6 +16,9 @@ namespace View_by_Distance.Rename;
public class Rename public class Rename
{ {
private record Result(string File,
ReadOnlyDictionary<string, MetadataExtractorDirectory> KeyValuePairs);
private record Record(int Index, private record Record(int Index,
bool IsIgnoreExtension, bool IsIgnoreExtension,
bool IsValidImageFormatExtension, bool IsValidImageFormatExtension,
@ -45,11 +49,17 @@ public class Rename
Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_Configuration = configuration; _Configuration = configuration;
logger?.LogInformation(propertyConfiguration.RootDirectory); logger?.LogInformation("{RootDirectory}", propertyConfiguration.RootDirectory);
Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false); Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false);
Verify(); Verify();
List<string> 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<string> lines = RenameFilesInDirectories(logger); List<string> lines = RenameFilesInDirectories(logger);
if (lines.Any()) if (lines.Count != 0)
{ {
File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines); File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines);
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory); _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory);
@ -72,27 +82,46 @@ public class Rename
throw new NullReferenceException(nameof(_PropertyConfiguration)); throw new NullReferenceException(nameof(_PropertyConfiguration));
} }
private static Action<string> GetResultCollection(A_Metadata metadata, List<Result> results, Action tick)
{
tick.Invoke();
return file => results.Add(new(file, metadata.GetMetadataCollection(file)));
}
private List<string> IteratedRenameFilesInDirectories(ILogger? logger)
{
List<string> old = [];
List<Result> results = [];
string rootDirectoryFullPath = Path.GetFullPath(_PropertyConfiguration.RootDirectory);
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism };
IEnumerable<string> 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<string> RenameFilesInDirectories(ILogger? logger) private List<string> RenameFilesInDirectories(ILogger? logger)
{ {
List<string> results = new(); List<string> results = [];
string message; string message;
bool nefPresentCheck; bool nefPresentCheck;
bool nefPresent = false; bool nefPresent = false;
ProgressBar progressBar; ProgressBar progressBar;
List<Record> records = new(); List<Record> records = [];
const string fileSearchFilter = "*"; const string fileSearchFilter = "*";
const bool useCeilingAverage = false; const bool useCeilingAverage = false;
const string directorySearchFilter = "*"; const string directorySearchFilter = "*";
List<string> distinctDirectories = new(); List<string> distinctDirectories = [];
B_Metadata metadata = new(_PropertyConfiguration); B_Metadata metadata = new(_PropertyConfiguration);
List<(FileHolder, string, string)> toDoCollection = new(); List<(FileHolder, string, string)> toDoCollection = [];
List<(FileHolder, string)> verifiedToDoCollection = new(); List<(FileHolder, string)> verifiedToDoCollection = [];
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
List<string[]> filesCollection = IDirectory.GetFilesCollection(_PropertyConfiguration.RootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage); List<string[]> filesCollection = IDirectory.GetFilesCollection(_PropertyConfiguration.RootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage);
int count = filesCollection.Select(l => l.Length).Sum(); int count = filesCollection.Select(l => l.Length).Sum();
foreach (string[] files in filesCollection) foreach (string[] files in filesCollection)
{ {
if (!files.Any()) if (files.Length == 0)
continue; continue;
// foreach (string files[i] in files) // foreach (string files[i] in files)
// { // {
@ -124,7 +153,7 @@ public class Rename
} }
progressBar.Dispose(); progressBar.Dispose();
} }
if (records.Any()) if (records.Count != 0)
{ {
int intMinValueLength = int.MinValue.ToString().Length; int intMinValueLength = int.MinValue.ToString().Length;
foreach (Record record in records) foreach (Record record in records)
@ -158,7 +187,7 @@ public class Rename
File.WriteAllText($"{to}.paddedId", $"{to}{Environment.NewLine}{fileHolder.FullName}"); File.WriteAllText($"{to}.paddedId", $"{to}{Environment.NewLine}{fileHolder.FullName}");
} }
ConsoleKey? consoleKey = null; 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++) 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"); 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) 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[] lines;
string fileName; string fileName;
string? directory; string? directory;
FileHolder fileHolder; FileHolder fileHolder;
List<string> distinct = new(); List<string> distinct = [];
foreach (string file in files) foreach (string file in files)
{ {
progressBar.Tick(); progressBar.Tick();
@ -211,7 +240,7 @@ public class Rename
private List<Record> GetRecords(B_Metadata metadata, int offset, ProgressBar progressBar, string[] files) private List<Record> GetRecords(B_Metadata metadata, int offset, ProgressBar progressBar, string[] files)
{ {
List<Record> results = new(); List<Record> results = [];
int? id; int? id;
string? message; string? message;
string? directory; string? directory;
@ -259,7 +288,7 @@ public class Rename
.ExecuteAsync(); .ExecuteAsync();
result.Task.Wait(); result.Task.Wait();
ffmpegFiles = Directory.GetFiles(fileHolder.DirectoryName, $"{fileHolder.Name}-*.jpg", SearchOption.TopDirectoryOnly); ffmpegFiles = Directory.GetFiles(fileHolder.DirectoryName, $"{fileHolder.Name}-*.jpg", SearchOption.TopDirectoryOnly);
if (!ffmpegFiles.Any()) if (ffmpegFiles.Length == 0)
continue; continue;
fileHolder = new(ffmpegFiles.First()); fileHolder = new(ffmpegFiles.First());
if (!fileHolder.Name.EndsWith("-0001.jpg")) if (!fileHolder.Name.EndsWith("-0001.jpg"))
@ -280,14 +309,14 @@ public class Rename
} }
if (message is not null) if (message is not null)
throw new Exception(message); 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; return results;
} }
private List<(FileHolder, string, string)> GetToDoCollection(ProgressBar progressBar, bool nefPresent, List<Record> records, int intMinValueLength) private List<(FileHolder, string, string)> GetToDoCollection(ProgressBar progressBar, bool nefPresent, List<Record> records, int intMinValueLength)
{ {
List<(FileHolder, string, string)> results = new(); List<(FileHolder, string, string)> results = [];
int season; int season;
string paddedId; string paddedId;
string checkFile; string checkFile;
@ -303,7 +332,7 @@ public class Rename
string checkFileExtension; string checkFileExtension;
DateTime? dateTimeFromName; DateTime? dateTimeFromName;
const string jpeg = ".jpeg"; const string jpeg = ".jpeg";
List<string> distinct = new(); List<string> distinct = [];
string[] directoryNameSegments; string[] directoryNameSegments;
DateTime? dateTimeOriginalByLogic; DateTime? dateTimeOriginalByLogic;
foreach (Record record in records) foreach (Record record in records)
@ -316,7 +345,7 @@ public class Rename
continue; continue;
if (string.IsNullOrEmpty(fileHolder.DirectoryName)) if (string.IsNullOrEmpty(fileHolder.DirectoryName))
continue; continue;
dateTimeFromName = !record.DateTimes.Any() ? null : record.DateTimes.First(); dateTimeFromName = record.DateTimes.Length == 0 ? null : record.DateTimes.First();
if (fileHolder.ExtensionLowered == jpeg) if (fileHolder.ExtensionLowered == jpeg)
{ {
if (!record.IsIgnoreExtension && record.IsValidImageFormatExtension) if (!record.IsIgnoreExtension && record.IsValidImageFormatExtension)
@ -431,7 +460,7 @@ public class Rename
private static List<string> Move(ProgressBar progressBar, List<(FileHolder, string)> verifiedToDoCollection) private static List<string> Move(ProgressBar progressBar, List<(FileHolder, string)> verifiedToDoCollection)
{ {
List<string> results = new(); List<string> results = [];
foreach ((FileHolder fileHolder, string to) in verifiedToDoCollection) foreach ((FileHolder fileHolder, string to) in verifiedToDoCollection)
{ {
progressBar.Tick(); progressBar.Tick();

View File

@ -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) public C_Resize(IPropertyConfiguration propertyConfiguration, bool forceResizeLastWriteTimeToCreationTime, bool overrideForResizeImages, bool propertiesChangedForResize, string[] validResolutions, ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension)
{ {
_FileGroups = new(); _FileGroups = [];
_Original = "Original"; _Original = "Original";
_TempResolutionWidth = 3; _TempResolutionWidth = 3;
_TempResolutionHeight = 4; _TempResolutionHeight = 4;
@ -56,13 +56,13 @@ public class C_Resize
_OutputResolutionOrientationIndex = 2; _OutputResolutionOrientationIndex = 2;
_EncoderParameters = encoderParameters; _EncoderParameters = encoderParameters;
_FileNameExtension = filenameExtension; _FileNameExtension = filenameExtension;
AngleBracketCollection = new List<string>(); AngleBracketCollection = [];
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
_OverrideForResizeImages = overrideForResizeImages; _OverrideForResizeImages = overrideForResizeImages;
_PropertiesChangedForResize = propertiesChangedForResize; _PropertiesChangedForResize = propertiesChangedForResize;
_ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime; _ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime;
_WriteIndentedJsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true }; _WriteIndentedJsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true };
ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty<Type>(), null) ?? throw new Exception(); ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, [], null) ?? throw new Exception();
_ConstructorInfo = constructorInfo; _ConstructorInfo = constructorInfo;
} }
@ -75,7 +75,7 @@ public class C_Resize
public void Update(string cResultsFullGroupDirectory) public void Update(string cResultsFullGroupDirectory)
{ {
_FileGroups.Clear(); _FileGroups.Clear();
Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, cResultsFullGroupDirectory, new string[] { _PropertyConfiguration.ResultSingleton }); Dictionary<string, string[]> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, cResultsFullGroupDirectory, [_PropertyConfiguration.ResultSingleton]);
foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs) foreach (KeyValuePair<string, string[]> keyValuePair in keyValuePairs)
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value); _FileGroups.Add(keyValuePair.Key, keyValuePair.Value);
} }
@ -323,7 +323,7 @@ public class C_Resize
int outputResolutionHeight = resize[_OutputResolutionHeightIndex]; int outputResolutionHeight = resize[_OutputResolutionHeightIndex];
int outputResolutionOrientation = resize[_OutputResolutionOrientationIndex]; int outputResolutionOrientation = resize[_OutputResolutionOrientationIndex];
int[] originalCollection = outputResolutionToResize[_Original]; 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<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList(); List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList();
if (_OverrideForResizeImages) if (_OverrideForResizeImages)
check = true; check = true;
@ -331,7 +331,7 @@ public class C_Resize
check = true; check = true;
if (outputResolutionWidth == originalCollection[_OutputResolutionWidthIndex] && outputResolutionHeight == originalCollection[_OutputResolutionHeightIndex] && outputResolutionOrientation == originalCollection[_OutputResolutionOrientationIndex]) 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; check = true;
if (check) if (check)
{ {
@ -344,7 +344,7 @@ public class C_Resize
} }
else else
{ {
if (!check && dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime) if (!check && dateTimes.Count != 0 && dateTimes.Max() > fileInfo.LastWriteTime)
check = true; check = true;
if (check) if (check)
{ {
@ -357,7 +357,7 @@ public class C_Resize
private static int[] GetCollection(string outputResolution) private static int[] GetCollection(string outputResolution)
{ {
List<int> results = new(); List<int> results = [];
string[] segments = outputResolution.Split('x'); string[] segments = outputResolution.Split('x');
results.Add(int.Parse(segments[0])); results.Add(int.Parse(segments[0]));
results.Add(int.Parse(segments[1])); results.Add(int.Parse(segments[1]));
@ -366,7 +366,7 @@ public class C_Resize
private Dictionary<string, int[]> GetImageResizes(Shared.Models.Property property) private Dictionary<string, int[]> GetImageResizes(Shared.Models.Property property)
{ {
Dictionary<string, int[]> results = new(); Dictionary<string, int[]> results = [];
int[] desired; int[] desired;
int checkWidth; int checkWidth;
int checkHeight; int checkHeight;
@ -378,7 +378,7 @@ public class C_Resize
checkWidth = property.Width.Value; checkWidth = property.Width.Value;
checkHeight = property.Height.Value; checkHeight = property.Height.Value;
if (!_ValidResolutions.Contains(_Original)) if (!_ValidResolutions.Contains(_Original))
results.Add(_Original, new int[] { checkWidth, checkHeight, orientation }); results.Add(_Original, [checkWidth, checkHeight, orientation]);
foreach (string validResolution in _ValidResolutions) foreach (string validResolution in _ValidResolutions)
{ {
if (validResolution == _Original) if (validResolution == _Original)
@ -393,22 +393,22 @@ public class C_Resize
desiredHeight = desired[1]; desiredHeight = desired[1];
} }
if (checkWidth <= desiredWidth && checkHeight <= desiredHeight) if (checkWidth <= desiredWidth && checkHeight <= desiredHeight)
results.Add(validResolution, new int[] { checkWidth, checkHeight, orientation }); results.Add(validResolution, [checkWidth, checkHeight, orientation]);
else else
{ {
if (desiredWidth != desiredHeight) if (desiredWidth != desiredHeight)
{ {
if (checkWidth * desiredHeight > desiredWidth * checkHeight) 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 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 else
{ {
if (checkWidth * desiredHeight <= desiredWidth * checkHeight) 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 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<string, int[]>? results; Dictionary<string, int[]>? results;
string json; string json;
string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata) }; string[] changesFrom = [nameof(A_Property), nameof(B_Metadata)];
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList(); List<DateTime> 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); (_, 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")); 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; results = null;
else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old")) else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old"))
throw new ArgumentException("must be a *.json file"); 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; results = null;
else else
{ {
@ -480,7 +480,7 @@ public class C_Resize
{ {
results = GetImageResizes(property); results = GetImageResizes(property);
json = JsonSerializer.Serialize(results, _WriteIndentedJsonSerializerOptions); 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(); DateTime? dateTime = !updateDateWhenMatches ? null : dateTimes.Max();
if (Shared.Models.Stateless.Methods.IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches, compareBeforeWrite: true, updateToWhenMatches: dateTime)) if (Shared.Models.Stateless.Methods.IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches, compareBeforeWrite: true, updateToWhenMatches: dateTime))
{ {

View File

@ -60,7 +60,7 @@ public class Program
if (args is not null) if (args is not null)
Secondary(logger, args.ToList()); Secondary(logger, args.ToList());
else else
Secondary(logger, new List<string>()); Secondary(logger, []);
} }
} }

View File

@ -34,7 +34,7 @@ public class SetCreatedDate
_WorkingDirectory = workingDirectory; _WorkingDirectory = workingDirectory;
_ConfigurationRoot = configurationRoot; _ConfigurationRoot = configurationRoot;
Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, 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); _FileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, appSettings.CopyTo, directories);
Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration); Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
_PropertyConfiguration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration;
@ -65,7 +65,7 @@ public class SetCreatedDate
private List<Record> GetRecords(ProgressBar progressBar, ASCIIEncoding asciiEncoding, B_Metadata metadata, string[] files) private List<Record> GetRecords(ProgressBar progressBar, ASCIIEncoding asciiEncoding, B_Metadata metadata, string[] files)
{ {
List<Record> results = new(); List<Record> results = [];
int? id; int? id;
string? message; string? message;
DateTime[] dateTimes; DateTime[] dateTimes;
@ -96,13 +96,13 @@ public class SetCreatedDate
private List<Record> GetToDoCollection(ProgressBar progressBar, List<string[]> filesCollection) private List<Record> GetToDoCollection(ProgressBar progressBar, List<string[]> filesCollection)
{ {
List<Record> results = new(); List<Record> results = [];
int minutes; int minutes;
Record[] records; Record[] records;
List<Record> unordered; List<Record> unordered;
ASCIIEncoding asciiEncoding = new(); ASCIIEncoding asciiEncoding = new();
B_Metadata metadata = new(_PropertyConfiguration); B_Metadata metadata = new(_PropertyConfiguration);
List<Record[]> collections = new(); List<Record[]> collections = [];
foreach (string[] files in filesCollection) foreach (string[] files in filesCollection)
{ {
minutes = 0; minutes = 0;
@ -126,7 +126,7 @@ public class SetCreatedDate
private static List<string> SetCreatedDateForeach(ProgressBar progressBar, List<Record> toDoCollection) private static List<string> SetCreatedDateForeach(ProgressBar progressBar, List<Record> toDoCollection)
{ {
List<string> results = new(); List<string> results = [];
foreach (Record record in toDoCollection) foreach (Record record in toDoCollection)
{ {
progressBar.Tick(); progressBar.Tick();
@ -140,7 +140,7 @@ public class SetCreatedDate
private List<string> SetCreatedDateFilesInDirectories(ILogger<Program>? logger) private List<string> SetCreatedDateFilesInDirectories(ILogger<Program>? logger)
{ {
List<string> results = new(); List<string> results = [];
ProgressBar progressBar; ProgressBar progressBar;
ConsoleKey? consoleKey = null; ConsoleKey? consoleKey = null;
const bool useCeilingAverage = true; const bool useCeilingAverage = true;

15
Shared/.vscode/mklink.md vendored Normal file
View File

@ -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"
```

View File

@ -46,7 +46,7 @@ internal abstract partial class XDirectory
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ continue; } { continue; }
} }
int ceilingAverage = directory[^1] == '_' || !results.Any() ? 0 : GetCeilingAverage(results); int ceilingAverage = directory[^1] == '_' || results.Count == 0 ? 0 : GetCeilingAverage(results);
if (useCeilingAverage) if (useCeilingAverage)
results = GetFilesCollection(results, ceilingAverage); results = GetFilesCollection(results, ceilingAverage);
return results; return results;

View File

@ -190,7 +190,7 @@ public class Configuration
result = new(propertyConfiguration, result = new(propertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckDFaceAndUpWriteDates.Value,
configuration.CheckJsonForDistanceResults.Value, configuration.CheckJsonForDistanceResults.Value,
configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(), configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? [],
configuration.CrossDirectoryMaxItemsInDistanceCollection.Value, configuration.CrossDirectoryMaxItemsInDistanceCollection.Value,
configuration.DeletePossibleDuplicates.Value, configuration.DeletePossibleDuplicates.Value,
configuration.DistanceFactor.Value, configuration.DistanceFactor.Value,
@ -208,10 +208,10 @@ public class Configuration
configuration.ForceMetadataLastWriteTimeToCreationTime.Value, configuration.ForceMetadataLastWriteTimeToCreationTime.Value,
configuration.ForceResizeLastWriteTimeToCreationTime.Value, configuration.ForceResizeLastWriteTimeToCreationTime.Value,
configuration.GenealogicalDataCommunicationFile, configuration.GenealogicalDataCommunicationFile,
configuration.IgnoreExtensions ?? Array.Empty<string>(), configuration.IgnoreExtensions ?? [],
configuration.JLinks ?? Array.Empty<string>(), configuration.JLinks ?? [],
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? Array.Empty<string>(), configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? [],
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? Array.Empty<string>(), configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? [],
configuration.LoadPhotoPrismLocations.Value, configuration.LoadPhotoPrismLocations.Value,
configuration.LocationContainerDistanceTolerance, configuration.LocationContainerDistanceTolerance,
configuration.LocationDigits.Value, configuration.LocationDigits.Value,
@ -220,12 +220,12 @@ public class Configuration
configuration.MappingDefaultName, configuration.MappingDefaultName,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value,
configuration.MixedYearRelativePaths ?? Array.Empty<string>(), configuration.MixedYearRelativePaths ?? [],
configuration.ModelDirectory, configuration.ModelDirectory,
configuration.ModelName, configuration.ModelName,
configuration.OutputExtension, configuration.OutputExtension,
configuration.OutputQuality.Value, configuration.OutputQuality.Value,
configuration.OutputResolutions ?? Array.Empty<string>(), configuration.OutputResolutions ?? [],
configuration.OverrideForFaceImages.Value, configuration.OverrideForFaceImages.Value,
configuration.OverrideForFaceLandmarkImages.Value, configuration.OverrideForFaceLandmarkImages.Value,
configuration.OverrideForResizeImages.Value, configuration.OverrideForResizeImages.Value,
@ -241,25 +241,25 @@ public class Configuration
configuration.PropertiesChangedForMetadata.Value, configuration.PropertiesChangedForMetadata.Value,
configuration.PropertiesChangedForResize.Value, configuration.PropertiesChangedForResize.Value,
configuration.RadomUseBirthdayMinimum.Value, configuration.RadomUseBirthdayMinimum.Value,
configuration.RangeDaysDeltaTolerance ?? Array.Empty<int>(), configuration.RangeDaysDeltaTolerance ?? [],
configuration.RangeDistanceTolerance ?? Array.Empty<float>(), configuration.RangeDistanceTolerance ?? [],
configuration.RangeFaceAreaTolerance ?? Array.Empty<float>(), configuration.RangeFaceAreaTolerance ?? [],
configuration.RangeFaceConfidence ?? Array.Empty<float>(), configuration.RangeFaceConfidence ?? [],
configuration.RectangleIntersectMinimums ?? Array.Empty<float>(), configuration.RectangleIntersectMinimums ?? [],
configuration.Reverse.Value, configuration.Reverse.Value,
configuration.SaveBlurHashForOutputResolutions ?? Array.Empty<string>(), configuration.SaveBlurHashForOutputResolutions ?? [],
configuration.SaveFaceDistancesForOutputResolutions ?? Array.Empty<string>(), configuration.SaveFaceDistancesForOutputResolutions ?? [],
configuration.SaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(), configuration.SaveFaceLandmarkForOutputResolutions ?? [],
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? Array.Empty<string>(), configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? [],
configuration.SaveIndividually.Value, configuration.SaveIndividually.Value,
configuration.SaveFullYearOfRandomFiles.Value, configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveMappedForOutputResolutions ?? Array.Empty<string>(), configuration.SaveMappedForOutputResolutions ?? [],
configuration.SavePropertyShortcutsForOutputResolutions ?? Array.Empty<string>(), configuration.SavePropertyShortcutsForOutputResolutions ?? [],
configuration.SaveRandomForOutputResolutions ?? Array.Empty<string>(), configuration.SaveRandomForOutputResolutions ?? [],
configuration.SaveResizedSubfiles.Value, configuration.SaveResizedSubfiles.Value,
configuration.SaveShortcutsForOutputResolutions ?? Array.Empty<string>(), configuration.SaveShortcutsForOutputResolutions ?? [],
configuration.SaveSortingWithoutPerson.Value, configuration.SaveSortingWithoutPerson.Value,
configuration.SkipNotSkipDirectories ?? Array.Empty<string>(), configuration.SkipNotSkipDirectories ?? [],
configuration.SkipOlderThanDays, configuration.SkipOlderThanDays,
configuration.SkipPersonWithMoreThen, configuration.SkipPersonWithMoreThen,
configuration.SkipSearch.Value, configuration.SkipSearch.Value,
@ -268,8 +268,8 @@ public class Configuration
configuration.SortingMinimumToUseSigma.Value, configuration.SortingMinimumToUseSigma.Value,
configuration.TestDistanceResults.Value, configuration.TestDistanceResults.Value,
configuration.UseFilterTries.Value, configuration.UseFilterTries.Value,
configuration.ValidKeyWordsToIgnoreInRandom ?? Array.Empty<string>(), configuration.ValidKeyWordsToIgnoreInRandom ?? [],
configuration.ValidResolutions ?? Array.Empty<string>()); configuration.ValidResolutions ?? []);
return result; return result;
} }

View File

@ -91,7 +91,7 @@ public partial class UnitTestHardCoded
{ {
char numberSign = '#'; char numberSign = '#';
string? minusOne = null; string? minusOne = null;
char[] personCharacters = new char[] { '^' }; char[] personCharacters = ['^'];
string personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory); string personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory);
string personBirthdayFormat = _Configuration.PropertyConfiguration.PersonBirthdayFormat; string personBirthdayFormat = _Configuration.PropertyConfiguration.PersonBirthdayFormat;
string[] personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly); string[] personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly);
@ -148,7 +148,7 @@ public partial class UnitTestHardCoded
string sourceDirectory = @""; string sourceDirectory = @"";
string sourceFile = @"\People - C.tsv"; string sourceFile = @"\People - C.tsv";
if (!File.Exists(sourceFile)) if (!File.Exists(sourceFile))
lines = Array.Empty<string>(); lines = [];
else else
lines = File.ReadAllLines(sourceFile); lines = File.ReadAllLines(sourceFile);
for (int i = 0; i < lines.Length; i++) for (int i = 0; i < lines.Length; i++)

View File

@ -132,13 +132,13 @@ public class UnitTestResize
Item item; Item item;
bool reverse = false; bool reverse = false;
FileHolder resizedFileHolder; FileHolder resizedFileHolder;
List<string> parseExceptions = new(); List<string> parseExceptions = [];
Shared.Models.Property? property = null; Shared.Models.Property? property = null;
const bool isValidImageFormatExtension = true; const bool isValidImageFormatExtension = true;
List<Tuple<string, DateTime>> subFileTuples = new(); List<Tuple<string, DateTime>> subFileTuples = [];
string[] alternateFileLines = Array.Empty<string>(); string[] alternateFileLines = [];
int length = _PropertyConfiguration.RootDirectory.Length; int length = _PropertyConfiguration.RootDirectory.Length;
string[] changesFrom = new string[] { nameof(A_Property) }; string[] changesFrom = [nameof(A_Property)];
string outputResolution = _Configuration.OutputResolutions[0]; string outputResolution = _Configuration.OutputResolutions[0];
bool outputResolutionHasNumber = outputResolution.Any(l => char.IsNumber(l)); bool outputResolutionHasNumber = outputResolution.Any(l => char.IsNumber(l));
(string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution); (string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution);

View File

@ -190,7 +190,7 @@ public class Configuration
result = new(propertyConfiguration, result = new(propertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value, configuration.CheckDFaceAndUpWriteDates.Value,
configuration.CheckJsonForDistanceResults.Value, configuration.CheckJsonForDistanceResults.Value,
configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(), configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ?? [],
configuration.CrossDirectoryMaxItemsInDistanceCollection.Value, configuration.CrossDirectoryMaxItemsInDistanceCollection.Value,
configuration.DeletePossibleDuplicates.Value, configuration.DeletePossibleDuplicates.Value,
configuration.DistanceFactor.Value, configuration.DistanceFactor.Value,
@ -208,10 +208,10 @@ public class Configuration
configuration.ForceMetadataLastWriteTimeToCreationTime.Value, configuration.ForceMetadataLastWriteTimeToCreationTime.Value,
configuration.ForceResizeLastWriteTimeToCreationTime.Value, configuration.ForceResizeLastWriteTimeToCreationTime.Value,
configuration.GenealogicalDataCommunicationFile, configuration.GenealogicalDataCommunicationFile,
configuration.IgnoreExtensions ?? Array.Empty<string>(), configuration.IgnoreExtensions ?? [],
configuration.JLinks ?? Array.Empty<string>(), configuration.JLinks ?? [],
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? Array.Empty<string>(), configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? [],
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? Array.Empty<string>(), configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? [],
configuration.LoadPhotoPrismLocations.Value, configuration.LoadPhotoPrismLocations.Value,
configuration.LocationContainerDistanceTolerance, configuration.LocationContainerDistanceTolerance,
configuration.LocationDigits.Value, configuration.LocationDigits.Value,
@ -220,12 +220,12 @@ public class Configuration
configuration.MappingDefaultName, configuration.MappingDefaultName,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value,
configuration.MixedYearRelativePaths ?? Array.Empty<string>(), configuration.MixedYearRelativePaths ?? [],
configuration.ModelDirectory, configuration.ModelDirectory,
configuration.ModelName, configuration.ModelName,
configuration.OutputExtension, configuration.OutputExtension,
configuration.OutputQuality.Value, configuration.OutputQuality.Value,
configuration.OutputResolutions ?? Array.Empty<string>(), configuration.OutputResolutions ?? [],
configuration.OverrideForFaceImages.Value, configuration.OverrideForFaceImages.Value,
configuration.OverrideForFaceLandmarkImages.Value, configuration.OverrideForFaceLandmarkImages.Value,
configuration.OverrideForResizeImages.Value, configuration.OverrideForResizeImages.Value,
@ -241,25 +241,25 @@ public class Configuration
configuration.PropertiesChangedForMetadata.Value, configuration.PropertiesChangedForMetadata.Value,
configuration.PropertiesChangedForResize.Value, configuration.PropertiesChangedForResize.Value,
configuration.RadomUseBirthdayMinimum.Value, configuration.RadomUseBirthdayMinimum.Value,
configuration.RangeDaysDeltaTolerance ?? Array.Empty<int>(), configuration.RangeDaysDeltaTolerance ?? [],
configuration.RangeDistanceTolerance ?? Array.Empty<float>(), configuration.RangeDistanceTolerance ?? [],
configuration.RangeFaceAreaTolerance ?? Array.Empty<float>(), configuration.RangeFaceAreaTolerance ?? [],
configuration.RangeFaceConfidence ?? Array.Empty<float>(), configuration.RangeFaceConfidence ?? [],
configuration.RectangleIntersectMinimums ?? Array.Empty<float>(), configuration.RectangleIntersectMinimums ?? [],
configuration.Reverse.Value, configuration.Reverse.Value,
configuration.SaveBlurHashForOutputResolutions ?? Array.Empty<string>(), configuration.SaveBlurHashForOutputResolutions ?? [],
configuration.SaveFaceDistancesForOutputResolutions ?? Array.Empty<string>(), configuration.SaveFaceDistancesForOutputResolutions ?? [],
configuration.SaveFaceLandmarkForOutputResolutions ?? Array.Empty<string>(), configuration.SaveFaceLandmarkForOutputResolutions ?? [],
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? Array.Empty<string>(), configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ?? [],
configuration.SaveIndividually.Value, configuration.SaveIndividually.Value,
configuration.SaveFullYearOfRandomFiles.Value, configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveMappedForOutputResolutions ?? Array.Empty<string>(), configuration.SaveMappedForOutputResolutions ?? [],
configuration.SavePropertyShortcutsForOutputResolutions ?? Array.Empty<string>(), configuration.SavePropertyShortcutsForOutputResolutions ?? [],
configuration.SaveRandomForOutputResolutions ?? Array.Empty<string>(), configuration.SaveRandomForOutputResolutions ?? [],
configuration.SaveResizedSubfiles.Value, configuration.SaveResizedSubfiles.Value,
configuration.SaveShortcutsForOutputResolutions ?? Array.Empty<string>(), configuration.SaveShortcutsForOutputResolutions ?? [],
configuration.SaveSortingWithoutPerson.Value, configuration.SaveSortingWithoutPerson.Value,
configuration.SkipNotSkipDirectories ?? Array.Empty<string>(), configuration.SkipNotSkipDirectories ?? [],
configuration.SkipOlderThanDays, configuration.SkipOlderThanDays,
configuration.SkipPersonWithMoreThen, configuration.SkipPersonWithMoreThen,
configuration.SkipSearch.Value, configuration.SkipSearch.Value,
@ -268,8 +268,8 @@ public class Configuration
configuration.SortingMinimumToUseSigma.Value, configuration.SortingMinimumToUseSigma.Value,
configuration.TestDistanceResults.Value, configuration.TestDistanceResults.Value,
configuration.UseFilterTries.Value, configuration.UseFilterTries.Value,
configuration.ValidKeyWordsToIgnoreInRandom ?? Array.Empty<string>(), configuration.ValidKeyWordsToIgnoreInRandom ?? [],
configuration.ValidResolutions ?? Array.Empty<string>()); configuration.ValidResolutions ?? []);
return result; return result;
} }

View File

@ -205,13 +205,13 @@ public class UnitTestFace
Item item; Item item;
bool reverse = false; bool reverse = false;
FileHolder resizedFileHolder; FileHolder resizedFileHolder;
List<string> parseExceptions = new(); List<string> parseExceptions = [];
Shared.Models.Property? property = null; Shared.Models.Property? property = null;
const bool isValidImageFormatExtension = true; const bool isValidImageFormatExtension = true;
List<Tuple<string, DateTime>> subFileTuples = new(); List<Tuple<string, DateTime>> subFileTuples = [];
string[] alternateFileLines = Array.Empty<string>(); string[] alternateFileLines = [];
int length = _PropertyConfiguration.RootDirectory.Length; int length = _PropertyConfiguration.RootDirectory.Length;
string[] changesFrom = new string[] { nameof(A_Property) }; string[] changesFrom = [nameof(A_Property)];
string outputResolution = _Configuration.OutputResolutions[0]; string outputResolution = _Configuration.OutputResolutions[0];
bool outputResolutionHasNumber = outputResolution.Any(l => char.IsNumber(l)); bool outputResolutionHasNumber = outputResolution.Any(l => char.IsNumber(l));
(string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution); (string cResultsFullGroupDirectory, _, _) = GetResultsFullGroupDirectories(outputResolution);
@ -266,7 +266,7 @@ public class UnitTestFace
(Model model, PredictorModel predictorModel, ModelParameter modelParameter) = GetModel(_Configuration); (Model model, PredictorModel predictorModel, ModelParameter modelParameter) = GetModel(_Configuration);
FaceRecognition faceRecognition = new(_PropertyConfiguration.NumberOfJitters.Value, _PropertyConfiguration.NumberOfTimesToUpsample.Value, model, modelParameter, predictorModel); FaceRecognition faceRecognition = new(_PropertyConfiguration.NumberOfJitters.Value, _PropertyConfiguration.NumberOfTimesToUpsample.Value, model, modelParameter, predictorModel);
List<(Location Location, FaceRecognitionDotNet.FaceEncoding? FaceEncoding, Dictionary<FacePart, FacePoint[]>? FaceParts)> collection; List<(Location Location, FaceRecognitionDotNet.FaceEncoding? FaceEncoding, Dictionary<FacePart, FacePoint[]>? 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); Assert.IsTrue(collection.Count == 2);
List<FaceDistance> faceDistanceEncodings = (from l in collection where l.FaceEncoding is not null select new FaceDistance(l.FaceEncoding)).ToList(); List<FaceDistance> faceDistanceEncodings = (from l in collection where l.FaceEncoding is not null select new FaceDistance(l.FaceEncoding)).ToList();
List<FaceDistance> faceDistanceLengths = FaceRecognition.FaceDistances(new(faceDistanceEncodings), faceDistanceEncodings[0]); List<FaceDistance> faceDistanceLengths = FaceRecognition.FaceDistances(new(faceDistanceEncodings), faceDistanceEncodings[0]);