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.CA1829.severity = warning # CA1829: Use Length/Count property instead of Count() when available
dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
dotnet_diagnostic.CA1860.severity = error # CA1860: Prefer comparing 'Count' to 0 rather than using 'Any()', both for clarity and for performance
dotnet_diagnostic.CA1869.severity = none # CA1869: Avoid creating a new 'JsonSerializerOptions' instance for every serialization operation. Cache and reuse instances instead.
dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template should not vary between calls to 'LoggerExtensions.LogInformation(ILogger, string?, params object?[])'
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary
dotnet_diagnostic.IDE0028.severity = error # IDE0028: Collection initialization can be simplified
dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031)
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
dotnet_diagnostic.IDE0049.severity = warning # Use language keywords instead of framework type names for type references (IDE0049)
dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter
dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [Distance]csharp(IDE0290)
dotnet_diagnostic.IDE0300.severity = error # IDE0300: Collection initialization can be simplified
dotnet_diagnostic.IDE0301.severity = error #IDE0301: Collection initialization can be simplified
dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case
dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method

View File

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

View File

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

View File

@ -14,14 +14,14 @@ public class C2_BlurHasher : IBlurHasher
public C2_BlurHasher(IPropertyConfiguration propertyConfiguration)
{
_FileGroups = new();
_FileGroups = [];
_PropertyConfiguration = propertyConfiguration;
}
public void Update(string resultsFullGroupDirectory)
{
_FileGroups.Clear();
Dictionary<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)
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value);
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -60,7 +60,7 @@ public class Program
if (args is not null)
Secondary(logger, args.ToList());
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))
throw new Exception("Check AppSettings file!");
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 file in files)
@ -35,7 +35,7 @@ public class DeleteByRelative
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);
foreach ((_, string[] files) in rightCollection)
{

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

@ -68,7 +68,7 @@ public class D_Face
float[] rectangleIntersectMinimums)
{
_ArgZero = argZero;
_FileGroups = new();
_FileGroups = [];
_ImageCodecInfo = imageCodecInfo;
_EncoderParameters = encoderParameters;
_FileNameExtension = filenameExtension;
@ -87,7 +87,7 @@ public class D_Face
_Model = model;
_PredictorModel = predictorModel;
_ModelParameter = modelParameter;
ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty<Type>(), null) ?? throw new Exception();
ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, [], null) ?? throw new Exception();
_ConstructorInfo = constructorInfo;
_WriteIndentedAndWhenWritingNull = new JsonSerializerOptions { WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull };
}
@ -101,7 +101,7 @@ public class D_Face
public void Update(string dResultsFullGroupDirectory)
{
_FileGroups.Clear();
Dictionary<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)
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value);
}
@ -219,7 +219,7 @@ public class D_Face
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfJitters));
if (_PropertyConfiguration.NumberOfTimesToUpsample is null)
throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfTimesToUpsample));
List<Shared.Models.Face> results = new();
List<Shared.Models.Face> results = [];
FaceRecognitionDotNet.Image? unknownImage;
try
{ 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)
{
List<LocationContainer<MetadataExtractor.Directory>> results = new();
List<LocationContainer<MetadataExtractor.Directory>> results = [];
string? json;
Location? location;
Rectangle? rectangle;
List<int> skip = new();
List<int> skip = [];
OutputResolution? outputResolutionCheck = null;
(int outputResolutionWidth, int outputResolutionHeight, int outputResolutionOrientation) = Resize.Models.Stateless.Methods.IResize.Get(outputResolution, outputResolutionToResize);
foreach (Shared.Models.Face face in faces)
@ -323,7 +323,7 @@ public class D_Face
throw new NullReferenceException(nameof(dResultsFullGroupDirectory));
string? json;
List<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();
(_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.Name);
FileInfo fileInfo = new(Path.Combine(_FileGroups[_PropertyConfiguration.ResultCollection][directoryIndex], $"{mappingFromItem.ImageFileHolder.NameWithoutExtension}{mappingFromItem.ImageFileHolder.ExtensionLowered}.json"));
@ -361,7 +361,7 @@ public class D_Face
}
List<LocationContainer<MetadataExtractor.Directory>> collection;
if (results is null || locationContainers is null)
collection = new();
collection = [];
else
collection = GetLocationContainers(outputResolution, locationContainers, outputResolutionToResize, results);
if (!_LoadPhotoPrismLocations || mappingFromPhotoPrismCollection is null || results is null)
@ -396,11 +396,11 @@ public class D_Face
public List<(Shared.Models.Face, FileInfo?, string, bool)> SaveFaces(string f, string dResultsFullGroupDirectory, List<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;
FileInfo fileInfo;
string deterministicHashCodeKey;
string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize) };
string[] changesFrom = [nameof(A_Property), nameof(B_Metadata), nameof(C_Resize)];
List<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);
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)
{
_FileGroups = new();
_FileGroups = [];
_ImageCodecInfo = imageCodecInfo;
_EncoderParameters = encoderParameters;
_FileNameExtension = filenameExtension;
_AngleBracketCollection = new List<string>();
_AngleBracketCollection = [];
_PropertyConfiguration = propertyConfiguration;
_CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates;
_OverrideForFaceLandmarkImages = overrideForFaceLandmarkImages;
@ -51,7 +51,7 @@ public class D2_FaceParts
public void Update(string dResultsFullGroupDirectory)
{
_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)
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value);
}
@ -71,7 +71,7 @@ public class D2_FaceParts
public string GetFacePartsDirectory(Configuration configuration, string dResultsFullGroupDirectory, Item item, bool includeNameWithoutExtension)
{
string result;
bool angleBracketCollectionAny = _AngleBracketCollection.Any();
bool angleBracketCollectionAny = _AngleBracketCollection.Count != 0;
if (!angleBracketCollectionAny)
{
if (item.ImageFileHolder.DirectoryName is null)
@ -128,12 +128,12 @@ public class D2_FaceParts
// Rotate the image's corners to see how big
// it will be after rotation.
PointF[] points =
{
new (0, 0),
new (bitmap.Width, 0),
new (bitmap.Width, bitmap.Height),
new (0, bitmap.Height),
};
[
new(0, 0),
new(bitmap.Width, 0),
new(bitmap.Width, bitmap.Height),
new(0, bitmap.Height),
];
rotate_at_origin.TransformPoints(points);
float xMinimum, xMaximum, yMinimum, yMaximum;
GetPointBounds(points, out xMinimum, out xMaximum, out yMinimum, out yMaximum);
@ -199,7 +199,7 @@ public class D2_FaceParts
using (Image image = Image.FromFile(resizedFileHolder.FullName))
{
using Graphics graphic = Graphics.FromImage(image);
if (face.FaceParts is null || !face.FaceParts.Any())
if (face.FaceParts is null || face.FaceParts.Count == 0)
{
if (face.Location is null)
continue;
@ -254,8 +254,8 @@ public class D2_FaceParts
long ticks = DateTime.Now.Ticks;
string deterministicHashCodeKey;
bool updateDateWhenMatches = false;
List<(Shared.Models.Face, string, string)> collection = new();
string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize), nameof(D_Face) };
List<(Shared.Models.Face, string, string)> collection = [];
string[] changesFrom = [nameof(A_Property), nameof(B_Metadata), nameof(C_Resize), nameof(D_Face)];
List<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);
string directory = Path.Combine(_FileGroups[_PropertyConfiguration.ResultContent][directoryIndex], mappingFromItem.ImageFileHolder.NameWithoutExtension);
@ -283,11 +283,11 @@ public class D2_FaceParts
check = true;
else if (saveRotated && !rotatedFileInfo.Exists)
check = true;
else if (_CheckDFaceAndUpWriteDates && dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime)
else if (_CheckDFaceAndUpWriteDates && dateTimes.Count != 0 && dateTimes.Max() > fileInfo.LastWriteTime)
check = true;
if (check && !updateDateWhenMatches)
{
updateDateWhenMatches = dateTimes.Any() && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime;
updateDateWhenMatches = dateTimes.Count != 0 && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime;
dateTime = !updateDateWhenMatches ? null : dateTimes.Max();
}
}
@ -308,7 +308,7 @@ public class D2_FaceParts
using Graphics graphic = Graphics.FromImage(image);
foreach ((Shared.Models.Face face, FileInfo? fileInfo, string _, bool _) in faceCollection)
{
if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null || face.FaceParts is null || !face.FaceParts.Any())
if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null || face.FaceParts is null || face.FaceParts.Count == 0)
continue;
pen = face.Mapping?.MappingFromPerson is null ? Pens.Red : Pens.GreenYellow;
try
@ -363,7 +363,7 @@ public class D2_FaceParts
{
bool hasNotMapped = GetNotMapped(facePartsCollectionDirectory, faceCollection);
string fileName = Path.Combine(facePartsCollectionDirectory, $"{mappingFromItem.ImageFileHolder.Name}{_FileNameExtension}");
bool save = faceCollection.Any(l => l.Face.FaceEncoding is not null && l.Face.Location is not null && l.Face.OutputResolution is not null && l.Face.FaceParts is not null && l.Face.FaceParts.Any());
bool save = faceCollection.Any(l => l.Face.FaceEncoding is not null && l.Face.Location is not null && l.Face.OutputResolution is not null && l.Face.FaceParts is not null && l.Face.FaceParts.Count != 0);
FileInfo fileInfo = new(fileName);
if (save && (!fileInfo.Exists || new TimeSpan(DateTime.Now.Ticks - fileInfo.LastWriteTime.Ticks).TotalDays > 10))
{

View File

@ -12,7 +12,7 @@ internal sealed class CnnFaceDetectionModelV1
public static IEnumerable<MModRect> Detect(LossMmod net, Image image, int upsampleNumTimes)
{
using PyramidDown? pyr = new(2);
List<MModRect>? rects = new();
List<MModRect>? rects = [];
// Copy the data into dlib based objects
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)
{
List<Matrix<RgbPixel>>? destImages = new();
List<IEnumerable<MModRect>>? allRects = new();
List<Matrix<RgbPixel>>? destImages = [];
List<IEnumerable<MModRect>>? allRects = [];
try
{
@ -86,7 +86,7 @@ internal sealed class CnnFaceDetectionModelV1
OutputLabels<IEnumerable<MModRect>>? dets = net.Operator(destImages, (ulong)batchSize);
foreach (IEnumerable<MModRect>? det in dets)
{
List<MModRect>? rects = new();
List<MModRect>? rects = [];
foreach (MModRect? d in det)
{
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)
{
FullObjectDetection[]? faces = new[] { face };
FullObjectDetection[]? faces = [face];
return ComputeFaceDescriptors(net, img, faces, numberOfJitters).First();
}
public static IEnumerable<Matrix<double>> ComputeFaceDescriptors(LossMetric net, Image img, IEnumerable<FullObjectDetection> faces, int numberOfJitters)
{
Image[]? batchImage = new[] { img };
IEnumerable<FullObjectDetection>[]? batchFaces = new[] { faces };
Image[]? batchImage = [img];
IEnumerable<FullObjectDetection>[]? batchFaces = [faces];
return BatchComputeFaceDescriptors(net, batchImage, batchFaces, numberOfJitters).First();
}
@ -37,7 +37,7 @@ internal sealed class FaceRecognitionModelV1
}
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)
{
IEnumerable<FullObjectDetection>? faces = batchFaces[i];
@ -56,9 +56,9 @@ internal sealed class FaceRecognitionModelV1
det.Dispose();
}
List<List<Matrix<double>>>? faceDescriptors = new();
List<List<Matrix<double>>>? faceDescriptors = [];
for (int i = 0, count = batchImages.Count; i < count; i++)
faceDescriptors.Add(new List<Matrix<double>>());
faceDescriptors.Add([]);
if (numberOfJitters <= 1)
{
@ -115,7 +115,7 @@ internal sealed class FaceRecognitionModelV1
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)
crops.Add(DlibDotNet.Dlib.JitterImage(img, _Rand));

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -78,7 +78,7 @@ internal abstract class DistanceLogic
private static List<TicksDirectory> UpdateDateVerifyAndGetTicksDirectories(Configuration configuration, string eDistanceContentDirectory)
{
List<TicksDirectory> results = new();
List<TicksDirectory> results = [];
float? totalDays;
long? next = null;
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)
{
List<Record> results = new();
List<Record> results = [];
int? id;
string fileName;
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)
{
List<Record> results = new();
List<Record> results = [];
bool check;
string message;
string[] files;
@ -273,7 +273,7 @@ internal abstract class DistanceLogic
string personKeyFormatted;
string? personFirstInitial;
bool isReservedDirectoryName;
List<string> distinct = new();
List<string> distinct = [];
string[] personNameDirectories;
string? newestPersonKeyFormatted;
string? personDisplayDirectoryName;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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)
{
List<string> results = new();
List<string> results = [];
string sourceDirectorySegment = GetRelativePath(propertyConfiguration, sourceDirectory);
string result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
if (!string.IsNullOrEmpty(contentDescription))

View File

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

View File

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

View File

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

View File

@ -3,6 +3,7 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Phares.Shared;
using ShellProgressBar;
using System.Collections.ObjectModel;
using System.Text;
using View_by_Distance.Metadata.Models;
using View_by_Distance.Rename.Models;
@ -15,6 +16,9 @@ namespace View_by_Distance.Rename;
public class Rename
{
private record Result(string File,
ReadOnlyDictionary<string, MetadataExtractorDirectory> KeyValuePairs);
private record Record(int Index,
bool IsIgnoreExtension,
bool IsValidImageFormatExtension,
@ -45,11 +49,17 @@ public class Rename
Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
_PropertyConfiguration = propertyConfiguration;
_Configuration = configuration;
logger?.LogInformation(propertyConfiguration.RootDirectory);
logger?.LogInformation("{RootDirectory}", propertyConfiguration.RootDirectory);
Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false);
Verify();
List<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);
if (lines.Any())
if (lines.Count != 0)
{
File.WriteAllLines($"D:/Tmp/Phares/{DateTime.Now.Ticks}.tsv", lines);
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(propertyConfiguration.RootDirectory);
@ -72,27 +82,46 @@ public class Rename
throw new NullReferenceException(nameof(_PropertyConfiguration));
}
private static Action<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)
{
List<string> results = new();
List<string> results = [];
string message;
bool nefPresentCheck;
bool nefPresent = false;
ProgressBar progressBar;
List<Record> records = new();
List<Record> records = [];
const string fileSearchFilter = "*";
const bool useCeilingAverage = false;
const string directorySearchFilter = "*";
List<string> distinctDirectories = new();
List<string> distinctDirectories = [];
B_Metadata metadata = new(_PropertyConfiguration);
List<(FileHolder, string, string)> toDoCollection = new();
List<(FileHolder, string)> verifiedToDoCollection = new();
List<(FileHolder, string, string)> toDoCollection = [];
List<(FileHolder, string)> verifiedToDoCollection = [];
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
List<string[]> filesCollection = IDirectory.GetFilesCollection(_PropertyConfiguration.RootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage);
int count = filesCollection.Select(l => l.Length).Sum();
foreach (string[] files in filesCollection)
{
if (!files.Any())
if (files.Length == 0)
continue;
// foreach (string files[i] in files)
// {
@ -124,7 +153,7 @@ public class Rename
}
progressBar.Dispose();
}
if (records.Any())
if (records.Count != 0)
{
int intMinValueLength = int.MinValue.ToString().Length;
foreach (Record record in records)
@ -158,7 +187,7 @@ public class Rename
File.WriteAllText($"{to}.paddedId", $"{to}{Environment.NewLine}{fileHolder.FullName}");
}
ConsoleKey? consoleKey = null;
logger?.LogInformation($"Ready to Move {verifiedToDoCollection.Count} files[i](s)?");
logger?.LogInformation("Ready to Move {verifiedToDoCollection.Count} files[i](s)?", verifiedToDoCollection.Count);
for (int y = 0; y < int.MaxValue; y++)
{
logger?.LogInformation("Press \"Y\" key to move files[i](s), \"N\" key to log files[i](s) or close console to not move files");
@ -182,12 +211,12 @@ public class Rename
private static List<(FileHolder, string, string)> GetRenameUndoToDoCollection(ProgressBar progressBar, string[] files)
{
List<(FileHolder, string, string)> results = new();
List<(FileHolder, string, string)> results = [];
string[] lines;
string fileName;
string? directory;
FileHolder fileHolder;
List<string> distinct = new();
List<string> distinct = [];
foreach (string file in files)
{
progressBar.Tick();
@ -211,7 +240,7 @@ public class Rename
private List<Record> GetRecords(B_Metadata metadata, int offset, ProgressBar progressBar, string[] files)
{
List<Record> results = new();
List<Record> results = [];
int? id;
string? message;
string? directory;
@ -259,7 +288,7 @@ public class Rename
.ExecuteAsync();
result.Task.Wait();
ffmpegFiles = Directory.GetFiles(fileHolder.DirectoryName, $"{fileHolder.Name}-*.jpg", SearchOption.TopDirectoryOnly);
if (!ffmpegFiles.Any())
if (ffmpegFiles.Length == 0)
continue;
fileHolder = new(ffmpegFiles.First());
if (!fileHolder.Name.EndsWith("-0001.jpg"))
@ -280,14 +309,14 @@ public class Rename
}
if (message is not null)
throw new Exception(message);
results.Add(new(i + offset, isIgnoreExtension, isValidImageFormatExtension, new() { fileHolder }, ffmpegFiles is null, dateTimeOriginal, dateTimes, id));
results.Add(new(i + offset, isIgnoreExtension, isValidImageFormatExtension, [fileHolder], ffmpegFiles is null, dateTimeOriginal, dateTimes, id));
}
return results;
}
private List<(FileHolder, string, string)> GetToDoCollection(ProgressBar progressBar, bool nefPresent, List<Record> records, int intMinValueLength)
{
List<(FileHolder, string, string)> results = new();
List<(FileHolder, string, string)> results = [];
int season;
string paddedId;
string checkFile;
@ -303,7 +332,7 @@ public class Rename
string checkFileExtension;
DateTime? dateTimeFromName;
const string jpeg = ".jpeg";
List<string> distinct = new();
List<string> distinct = [];
string[] directoryNameSegments;
DateTime? dateTimeOriginalByLogic;
foreach (Record record in records)
@ -316,7 +345,7 @@ public class Rename
continue;
if (string.IsNullOrEmpty(fileHolder.DirectoryName))
continue;
dateTimeFromName = !record.DateTimes.Any() ? null : record.DateTimes.First();
dateTimeFromName = record.DateTimes.Length == 0 ? null : record.DateTimes.First();
if (fileHolder.ExtensionLowered == jpeg)
{
if (!record.IsIgnoreExtension && record.IsValidImageFormatExtension)
@ -431,7 +460,7 @@ public class Rename
private static List<string> Move(ProgressBar progressBar, List<(FileHolder, string)> verifiedToDoCollection)
{
List<string> results = new();
List<string> results = [];
foreach ((FileHolder fileHolder, string to) in verifiedToDoCollection)
{
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)
{
_FileGroups = new();
_FileGroups = [];
_Original = "Original";
_TempResolutionWidth = 3;
_TempResolutionHeight = 4;
@ -56,13 +56,13 @@ public class C_Resize
_OutputResolutionOrientationIndex = 2;
_EncoderParameters = encoderParameters;
_FileNameExtension = filenameExtension;
AngleBracketCollection = new List<string>();
AngleBracketCollection = [];
_PropertyConfiguration = propertyConfiguration;
_OverrideForResizeImages = overrideForResizeImages;
_PropertiesChangedForResize = propertiesChangedForResize;
_ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime;
_WriteIndentedJsonSerializerOptions = new JsonSerializerOptions { WriteIndented = true };
ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, Array.Empty<Type>(), null) ?? throw new Exception();
ConstructorInfo? constructorInfo = typeof(PropertyItem).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public, null, [], null) ?? throw new Exception();
_ConstructorInfo = constructorInfo;
}
@ -75,7 +75,7 @@ public class C_Resize
public void Update(string cResultsFullGroupDirectory)
{
_FileGroups.Clear();
Dictionary<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)
_FileGroups.Add(keyValuePair.Key, keyValuePair.Value);
}
@ -323,7 +323,7 @@ public class C_Resize
int outputResolutionHeight = resize[_OutputResolutionHeightIndex];
int outputResolutionOrientation = resize[_OutputResolutionOrientationIndex];
int[] originalCollection = outputResolutionToResize[_Original];
string[] changesFrom = new string[] { nameof(A_Property), nameof(B_Metadata), nameof(C_Resize) };
string[] changesFrom = [nameof(A_Property), nameof(B_Metadata), nameof(C_Resize)];
List<DateTime> dateTimes = (from l in subFileTuples where changesFrom.Contains(l.Item1) select l.Item2).ToList();
if (_OverrideForResizeImages)
check = true;
@ -331,7 +331,7 @@ public class C_Resize
check = true;
if (outputResolutionWidth == originalCollection[_OutputResolutionWidthIndex] && outputResolutionHeight == originalCollection[_OutputResolutionHeightIndex] && outputResolutionOrientation == originalCollection[_OutputResolutionOrientationIndex])
{
if (!check && dateTimes.Any() && dateTimes.Max() > fileInfo.CreationTime.AddDays(1))
if (!check && dateTimes.Count != 0 && dateTimes.Max() > fileInfo.CreationTime.AddDays(1))
check = true;
if (check)
{
@ -344,7 +344,7 @@ public class C_Resize
}
else
{
if (!check && dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime)
if (!check && dateTimes.Count != 0 && dateTimes.Max() > fileInfo.LastWriteTime)
check = true;
if (check)
{
@ -357,7 +357,7 @@ public class C_Resize
private static int[] GetCollection(string outputResolution)
{
List<int> results = new();
List<int> results = [];
string[] segments = outputResolution.Split('x');
results.Add(int.Parse(segments[0]));
results.Add(int.Parse(segments[1]));
@ -366,7 +366,7 @@ public class C_Resize
private Dictionary<string, int[]> GetImageResizes(Shared.Models.Property property)
{
Dictionary<string, int[]> results = new();
Dictionary<string, int[]> results = [];
int[] desired;
int checkWidth;
int checkHeight;
@ -378,7 +378,7 @@ public class C_Resize
checkWidth = property.Width.Value;
checkHeight = property.Height.Value;
if (!_ValidResolutions.Contains(_Original))
results.Add(_Original, new int[] { checkWidth, checkHeight, orientation });
results.Add(_Original, [checkWidth, checkHeight, orientation]);
foreach (string validResolution in _ValidResolutions)
{
if (validResolution == _Original)
@ -393,22 +393,22 @@ public class C_Resize
desiredHeight = desired[1];
}
if (checkWidth <= desiredWidth && checkHeight <= desiredHeight)
results.Add(validResolution, new int[] { checkWidth, checkHeight, orientation });
results.Add(validResolution, [checkWidth, checkHeight, orientation]);
else
{
if (desiredWidth != desiredHeight)
{
if (checkWidth * desiredHeight > desiredWidth * checkHeight)
results.Add(validResolution, new int[] { desiredWidth, Convert.ToInt32(desiredWidth * checkHeight / (double)checkWidth), orientation });
results.Add(validResolution, [desiredWidth, Convert.ToInt32(desiredWidth * checkHeight / (double)checkWidth), orientation]);
else
results.Add(validResolution, new int[] { Convert.ToInt32(desiredHeight * checkWidth / (double)checkHeight), desiredHeight, orientation });
results.Add(validResolution, [Convert.ToInt32(desiredHeight * checkWidth / (double)checkHeight), desiredHeight, orientation]);
}
else
{
if (checkWidth * desiredHeight <= desiredWidth * checkHeight)
results.Add(validResolution, new int[] { desiredWidth, desiredHeight, orientation, desiredWidth, Convert.ToInt32(desiredWidth * checkHeight / (double)checkWidth) });
results.Add(validResolution, [desiredWidth, desiredHeight, orientation, desiredWidth, Convert.ToInt32(desiredWidth * checkHeight / (double)checkWidth)]);
else
results.Add(validResolution, new int[] { desiredWidth, desiredHeight, orientation, Convert.ToInt32(desiredHeight * checkWidth / (double)checkHeight), desiredHeight });
results.Add(validResolution, [desiredWidth, desiredHeight, orientation, Convert.ToInt32(desiredHeight * checkWidth / (double)checkHeight), desiredHeight]);
}
}
}
@ -438,7 +438,7 @@ public class C_Resize
{
Dictionary<string, int[]>? results;
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();
(_, int directoryIndex) = Shared.Models.Stateless.Methods.IPath.GetDirectoryNameAndIndex(_PropertyConfiguration.ResultAllInOneSubdirectoryLength, mappingFromItem.ImageFileHolder.Name);
FileInfo fileInfo = new(Path.Combine(_FileGroups[_PropertyConfiguration.ResultSingleton][directoryIndex], $"{mappingFromItem.ImageFileHolder.NameWithoutExtension}{mappingFromItem.ImageFileHolder.ExtensionLowered}.json"));
@ -458,7 +458,7 @@ public class C_Resize
results = null;
else if (!fileInfo.FullName.EndsWith(".json") && !fileInfo.FullName.EndsWith(".old"))
throw new ArgumentException("must be a *.json file");
else if (dateTimes.Any() && dateTimes.Max() > fileInfo.LastWriteTime)
else if (dateTimes.Count != 0 && dateTimes.Max() > fileInfo.LastWriteTime)
results = null;
else
{
@ -480,7 +480,7 @@ public class C_Resize
{
results = GetImageResizes(property);
json = JsonSerializer.Serialize(results, _WriteIndentedJsonSerializerOptions);
bool updateDateWhenMatches = dateTimes.Any() && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime;
bool updateDateWhenMatches = dateTimes.Count != 0 && fileInfo.Exists && dateTimes.Max() > fileInfo.LastWriteTime;
DateTime? dateTime = !updateDateWhenMatches ? null : dateTimes.Max();
if (Shared.Models.Stateless.Methods.IPath.WriteAllText(fileInfo.FullName, json, updateDateWhenMatches, compareBeforeWrite: true, updateToWhenMatches: dateTime))
{

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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