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