PersonCharactersCopyCount
This commit is contained in:
@ -79,7 +79,7 @@
|
|||||||
"/zzz Phares Slides/Slides 2015-06-10/Magazine 01"
|
"/zzz Phares Slides/Slides 2015-06-10/Magazine 01"
|
||||||
],
|
],
|
||||||
"Configuration": {
|
"Configuration": {
|
||||||
"DateGroup": "2022-12-30",
|
"DateGroup": "45f4401",
|
||||||
"DiffPropertyDirectory": "",
|
"DiffPropertyDirectory": "",
|
||||||
"FileNameDirectorySeparator": ".Z.",
|
"FileNameDirectorySeparator": ".Z.",
|
||||||
"ForcePropertyLastWriteTimeToCreationTime": false,
|
"ForcePropertyLastWriteTimeToCreationTime": false,
|
||||||
@ -87,7 +87,7 @@
|
|||||||
"Pattern": "[^ABCDEFGHIJKLMNOPQRSTUVWXYZbcdfghjklmnpqrstvwxyz0-9]",
|
"Pattern": "[^ABCDEFGHIJKLMNOPQRSTUVWXYZbcdfghjklmnpqrstvwxyz0-9]",
|
||||||
"PopulatePropertyId": true,
|
"PopulatePropertyId": true,
|
||||||
"PropertiesChangedForProperty": false,
|
"PropertiesChangedForProperty": false,
|
||||||
"RootDirectory": "C:/Tmp/Phares/Compare/Images-ec5a909",
|
"RootDirectory": "C:/Tmp/Phares/Compare/Images-45f4401",
|
||||||
"WriteBitmapDataBytes": false,
|
"WriteBitmapDataBytes": false,
|
||||||
"IgnoreExtensions": [
|
"IgnoreExtensions": [
|
||||||
".gif",
|
".gif",
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
"WorkingDirectoryName": "PharesApps",
|
"WorkingDirectoryName": "PharesApps",
|
||||||
"Windows": {
|
"Windows": {
|
||||||
"Configuration": {
|
"Configuration": {
|
||||||
"DateGroup": "2022-12-30",
|
"DateGroup": "45f4401",
|
||||||
"DiffPropertyDirectory": "",
|
"DiffPropertyDirectory": "",
|
||||||
"FileNameDirectorySeparator": ".Z.",
|
"FileNameDirectorySeparator": ".Z.",
|
||||||
"ForcePropertyLastWriteTimeToCreationTime": false,
|
"ForcePropertyLastWriteTimeToCreationTime": false,
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
"ByHash": false,
|
"ByHash": false,
|
||||||
"BySeason": true,
|
"BySeason": true,
|
||||||
"ByWeek": false,
|
"ByWeek": false,
|
||||||
"DateGroup": "2022-12-30",
|
"DateGroup": "45f4401",
|
||||||
"FileNameDirectorySeparator": ".Z.",
|
"FileNameDirectorySeparator": ".Z.",
|
||||||
"ForcePropertyLastWriteTimeToCreationTime": false,
|
"ForcePropertyLastWriteTimeToCreationTime": false,
|
||||||
"KeepFullPath": false,
|
"KeepFullPath": false,
|
||||||
@ -68,11 +68,12 @@
|
|||||||
"ResultContent": "()",
|
"ResultContent": "()",
|
||||||
"ResultSingleton": "{}",
|
"ResultSingleton": "{}",
|
||||||
"xRootDirectory": "C:/Tmp/phares/Pictures",
|
"xRootDirectory": "C:/Tmp/phares/Pictures",
|
||||||
"xxRootDirectory": "C:/Tmp/Phares/Compare/Images-ec5a909",
|
"xxRootDirectory": "C:/Tmp/Phares/Compare/Images-45f4401",
|
||||||
"xxxRootDirectory": "F:/Tmp/Phares/Compare/Not-Copy-Copy-ec5a909",
|
"xxxRootDirectory": "F:/Tmp/Phares/Compare/Not-Copy-Copy-45f4401",
|
||||||
"xxxxRootDirectory": "C:/Tmp/Phares/Compare/Not-Copy-Copy-ec5a909",
|
"xxxxRootDirectory": "C:/Tmp/Phares/Compare/Not-Copy-Copy-45f4401",
|
||||||
"xxxxxRootDirectory": "F:/Tmp/Phares/2022-11-03-DCIM/DCIM/100D3400 2022",
|
"xxxxxRootDirectory": "F:/Tmp/Phares/2022-11-03-DCIM/DCIM/100D3400 2022",
|
||||||
"RootDirectory": "E:/- - - Videos/-",
|
"xxxxxxRootDirectory": "E:/- - - Videos/-",
|
||||||
|
"RootDirectory": "D:/2) Images B/Not-Copy-Copy/New folder/-",
|
||||||
"WriteBitmapDataBytes": false,
|
"WriteBitmapDataBytes": false,
|
||||||
"IgnoreExtensions": [
|
"IgnoreExtensions": [
|
||||||
".gif",
|
".gif",
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
"ByHash": false,
|
"ByHash": false,
|
||||||
"BySeason": false,
|
"BySeason": false,
|
||||||
"ByWeek": false,
|
"ByWeek": false,
|
||||||
"DateGroup": "2022-12-30",
|
"DateGroup": "45f4401",
|
||||||
"FileNameDirectorySeparator": ".Z.",
|
"FileNameDirectorySeparator": ".Z.",
|
||||||
"ForcePropertyLastWriteTimeToCreationTime": false,
|
"ForcePropertyLastWriteTimeToCreationTime": false,
|
||||||
"KeepFullPath": false,
|
"KeepFullPath": false,
|
||||||
@ -68,8 +68,8 @@
|
|||||||
"ResultContent": "()",
|
"ResultContent": "()",
|
||||||
"ResultSingleton": "{}",
|
"ResultSingleton": "{}",
|
||||||
"xRootDirectory": "C:/Tmp/phares/Pictures",
|
"xRootDirectory": "C:/Tmp/phares/Pictures",
|
||||||
"xxRootDirectory": "C:/Tmp/Phares/Compare/Images-ec5a909",
|
"xxRootDirectory": "C:/Tmp/Phares/Compare/Images-45f4401",
|
||||||
"RootDirectory": "F:/Tmp/Phares/Compare/Not-Copy-Copy-ec5a909",
|
"RootDirectory": "F:/Tmp/Phares/Compare/Not-Copy-Copy-45f4401",
|
||||||
"xxxxRootDirectory": "F:/Tmp/Phares/2022-11-03-DCIM/DCIM/100D3400 2022",
|
"xxxxRootDirectory": "F:/Tmp/Phares/2022-11-03-DCIM/DCIM/100D3400 2022",
|
||||||
"WriteBitmapDataBytes": false,
|
"WriteBitmapDataBytes": false,
|
||||||
"IgnoreExtensions": [
|
"IgnoreExtensions": [
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"xCompareRootDirectory": "",
|
"xCompareRootDirectory": "",
|
||||||
"CompareRootDirectory": "D:/7) Question/- - - Images",
|
"CompareRootDirectory": "D:/2) Images B/Not-Copy-Copy-45f4401",
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Log4netProvider": "Debug"
|
"Log4netProvider": "Debug"
|
||||||
@ -14,8 +14,8 @@
|
|||||||
"Windows": {
|
"Windows": {
|
||||||
"Configuration": {
|
"Configuration": {
|
||||||
"xRootDirectory": "D:/2) Images B/Corrupt",
|
"xRootDirectory": "D:/2) Images B/Corrupt",
|
||||||
"xxRootDirectory": "D:/2) Images B/Not-Copy-Copy-ec5a909",
|
"xxRootDirectory": "D:/2) Images B/Not-Copy-Copy-45f4401",
|
||||||
"RootDirectory": "D:/1) Images A/Images-ec5a909",
|
"RootDirectory": "D:/1) Images A/Images-45f4401",
|
||||||
"VerifyToSeason": [
|
"VerifyToSeason": [
|
||||||
". 2000",
|
". 2000",
|
||||||
". 2001",
|
". 2001",
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
"WorkingDirectoryName": "PharesApps",
|
"WorkingDirectoryName": "PharesApps",
|
||||||
"Windows": {
|
"Windows": {
|
||||||
"Configuration": {
|
"Configuration": {
|
||||||
"DateGroup": "2022-12-30",
|
"DateGroup": "45f4401",
|
||||||
"DiffPropertyDirectory": "",
|
"DiffPropertyDirectory": "",
|
||||||
"FileNameDirectorySeparator": ".Z.",
|
"FileNameDirectorySeparator": ".Z.",
|
||||||
"ForcePropertyLastWriteTimeToCreationTime": false,
|
"ForcePropertyLastWriteTimeToCreationTime": false,
|
||||||
@ -65,7 +65,7 @@
|
|||||||
"ResultCollection": "[]",
|
"ResultCollection": "[]",
|
||||||
"ResultContent": "()",
|
"ResultContent": "()",
|
||||||
"ResultSingleton": "{}",
|
"ResultSingleton": "{}",
|
||||||
"RootDirectory": "C:/Tmp/Phares/Compare/Images-ec5a909",
|
"RootDirectory": "C:/Tmp/Phares/Compare/Images-45f4401",
|
||||||
"WriteBitmapDataBytes": false,
|
"WriteBitmapDataBytes": false,
|
||||||
"IgnoreExtensions": [
|
"IgnoreExtensions": [
|
||||||
".gif",
|
".gif",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"xCompareRootDirectory": "D:/Tmp/Phares/Not-Copy-Copy-ec5a909",
|
"xCompareRootDirectory": "D:/Tmp/Phares/Not-Copy-Copy-45f4401",
|
||||||
"xxCompareRootDirectory": "E:/www/Images - Results/C) Resize/2021-11-03/2256 x 1496/()",
|
"xxCompareRootDirectory": "E:/www/Images - Results/C) Resize/2021-11-03/2256 x 1496/()",
|
||||||
"xxxCompareRootDirectory": "C:/Tmp/Phares/Compare/.Delete-Not-Copy-Copy-ec5a909",
|
"xxxCompareRootDirectory": "C:/Tmp/Phares/Compare/.Delete-Not-Copy-Copy-45f4401",
|
||||||
"CompareRootDirectory": "C:/Tmp/Phares/Compare/Not-Copy-Copy-Duplicates",
|
"CompareRootDirectory": "C:/Tmp/Phares/Compare/Not-Copy-Copy-Duplicates",
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
"WorkingDirectoryName": "PharesApps",
|
"WorkingDirectoryName": "PharesApps",
|
||||||
"Windows": {
|
"Windows": {
|
||||||
"Configuration": {
|
"Configuration": {
|
||||||
"DateGroup": "2022-12-30",
|
"DateGroup": "45f4401",
|
||||||
"DiffPropertyDirectory": "",
|
"DiffPropertyDirectory": "",
|
||||||
"FileNameDirectorySeparator": ".Z.",
|
"FileNameDirectorySeparator": ".Z.",
|
||||||
"ForcePropertyLastWriteTimeToCreationTime": false,
|
"ForcePropertyLastWriteTimeToCreationTime": false,
|
||||||
@ -64,7 +64,7 @@
|
|||||||
"ResultCollection": "[]",
|
"ResultCollection": "[]",
|
||||||
"ResultContent": "()",
|
"ResultContent": "()",
|
||||||
"ResultSingleton": "{}",
|
"ResultSingleton": "{}",
|
||||||
"RootDirectory": "C:/Tmp/Phares/Compare/Images-ec5a909",
|
"RootDirectory": "C:/Tmp/Phares/Compare/Images-45f4401",
|
||||||
"WriteBitmapDataBytes": false,
|
"WriteBitmapDataBytes": false,
|
||||||
"IgnoreExtensions": [
|
"IgnoreExtensions": [
|
||||||
".gif",
|
".gif",
|
||||||
|
@ -38,7 +38,6 @@
|
|||||||
<PackageReference Include="MetadataExtractor" Version="2.7.2" />
|
<PackageReference Include="MetadataExtractor" Version="2.7.2" />
|
||||||
<PackageReference Include="Serilog" Version="2.12.0" />
|
<PackageReference Include="Serilog" Version="2.12.0" />
|
||||||
<PackageReference Include="ShellProgressBar" Version="5.2.0" />
|
<PackageReference Include="ShellProgressBar" Version="5.2.0" />
|
||||||
<PackageReference Include="WindowsShortcutFactory" Version="1.1.0" />
|
|
||||||
<PackageReference Include="System.Text.Json" Version="7.0.1" />
|
<PackageReference Include="System.Text.Json" Version="7.0.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -4,7 +4,6 @@ using View_by_Distance.FaceRecognitionDotNet;
|
|||||||
using View_by_Distance.Map.Models;
|
using View_by_Distance.Map.Models;
|
||||||
using View_by_Distance.Shared.Models;
|
using View_by_Distance.Shared.Models;
|
||||||
using View_by_Distance.Shared.Models.Properties;
|
using View_by_Distance.Shared.Models.Properties;
|
||||||
using WindowsShortcutFactory;
|
|
||||||
|
|
||||||
namespace View_by_Distance.Distance.Models;
|
namespace View_by_Distance.Distance.Models;
|
||||||
|
|
||||||
@ -363,55 +362,4 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool TryToFind(string a2PeopleSingletonDirectory, string file, string path)
|
|
||||||
{
|
|
||||||
bool result = false;
|
|
||||||
string? pathName = Path.GetFileName(path);
|
|
||||||
string? group = Path.GetDirectoryName(path);
|
|
||||||
string? groupName = Path.GetFileName(group);
|
|
||||||
if (pathName is not null && group is not null && groupName is not null)
|
|
||||||
{
|
|
||||||
WindowsShortcut windowsShortcut;
|
|
||||||
string checkDirectory = Path.Combine(a2PeopleSingletonDirectory, groupName, pathName);
|
|
||||||
if (Directory.Exists(checkDirectory))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
windowsShortcut = new() { Path = checkDirectory };
|
|
||||||
windowsShortcut.Save(file);
|
|
||||||
windowsShortcut.Dispose();
|
|
||||||
result = true;
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void BeforeSaveFilteredOriginalImagesFromJLinks(string[] jLinks, string a2PeopleSingletonDirectory)
|
|
||||||
{
|
|
||||||
string[] files;
|
|
||||||
string checkDirectory;
|
|
||||||
WindowsShortcut windowsShortcut;
|
|
||||||
foreach (string directoryName in jLinks)
|
|
||||||
{
|
|
||||||
checkDirectory = Path.Combine(a2PeopleSingletonDirectory, directoryName);
|
|
||||||
if (!Directory.Exists(checkDirectory))
|
|
||||||
continue;
|
|
||||||
files = Directory.GetFiles(checkDirectory, "*.lnk", SearchOption.TopDirectoryOnly);
|
|
||||||
foreach (string file in files)
|
|
||||||
{
|
|
||||||
windowsShortcut = WindowsShortcut.Load(file);
|
|
||||||
if (windowsShortcut.Path is null)
|
|
||||||
continue;
|
|
||||||
if (!Directory.Exists(windowsShortcut.Path))
|
|
||||||
{
|
|
||||||
if (!TryToFind(a2PeopleSingletonDirectory, file, windowsShortcut.Path))
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -394,7 +394,7 @@ public partial class Form : System.Windows.Forms.Form
|
|||||||
string? directoryName;
|
string? directoryName;
|
||||||
foreach (string path in paths)
|
foreach (string path in paths)
|
||||||
{
|
{
|
||||||
name = Path.GetFileName(path);
|
name = Path.GetFileName(path).Trim();
|
||||||
if (name.Length < 1 || (!name.StartsWith("zzz =20") && !name.StartsWith("=20") && !name.StartsWith("#20")))
|
if (name.Length < 1 || (!name.StartsWith("zzz =20") && !name.StartsWith("=20") && !name.StartsWith("#20")))
|
||||||
// if (name.Length < 1 || !name.Contains(".Z.#20"))
|
// if (name.Length < 1 || !name.Contains(".Z.#20"))
|
||||||
continue;
|
continue;
|
||||||
@ -463,33 +463,22 @@ public partial class Form : System.Windows.Forms.Form
|
|||||||
_ProgressBar.Visible = false;
|
_ProgressBar.Visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Form1_DragDrop(object? sender, DragEventArgs e)
|
private static void MoveMatches(string argZero)
|
||||||
{
|
{
|
||||||
try
|
string moveDirectory;
|
||||||
|
string checkDirectory;
|
||||||
|
int length = argZero.Length;
|
||||||
|
string compareDirectory = "D:/";
|
||||||
|
string[] directories = Directory.GetDirectories(argZero, "*", SearchOption.TopDirectoryOnly);
|
||||||
|
foreach (string directory in directories)
|
||||||
{
|
{
|
||||||
if (e.Data is null || e.Data.GetData(DataFormats.FileDrop) is not string[] paths)
|
if (!string.IsNullOrEmpty(directory))
|
||||||
_TextBox.Text = string.Empty;
|
continue;
|
||||||
else
|
checkDirectory = string.Concat(compareDirectory, directory[length..]);
|
||||||
{
|
if (!Directory.Exists(checkDirectory))
|
||||||
if (paths.All(l => l.Contains("=20")) || paths.All(l => l.Contains("#20")))
|
continue;
|
||||||
// if (paths.All(l => l.Contains('#')))
|
moveDirectory = string.Concat(compareDirectory[..^1], directory[length..]);
|
||||||
Rename2000(paths);
|
Directory.Move(checkDirectory, moveDirectory);
|
||||||
else
|
|
||||||
{
|
|
||||||
List<string> directories = GetDirectoriesOrDoDragDrop(paths);
|
|
||||||
if (directories.Any())
|
|
||||||
{
|
|
||||||
RenameFilesInDirectories(directories);
|
|
||||||
string? parentDirectory = Path.GetDirectoryName(directories[0]);
|
|
||||||
if (parentDirectory is not null && parentDirectory != Path.GetPathRoot(directories[0]))
|
|
||||||
_ = IPath.DeleteEmptyDirectories(parentDirectory);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -526,4 +515,36 @@ public partial class Form : System.Windows.Forms.Form
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Form1_DragDrop(object? sender, DragEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (e.Data is null || e.Data.GetData(DataFormats.FileDrop) is not string[] paths)
|
||||||
|
_TextBox.Text = string.Empty;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (paths.Length == 0 && paths[0].Contains("~~~"))
|
||||||
|
MoveMatches(paths[0]);
|
||||||
|
else if (paths.All(l => l.Contains("=20")) || paths.All(l => l.Contains("#20")))
|
||||||
|
// if (paths.All(l => l.Contains('#')))
|
||||||
|
Rename2000(paths);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
List<string> directories = GetDirectoriesOrDoDragDrop(paths);
|
||||||
|
if (directories.Any())
|
||||||
|
{
|
||||||
|
RenameFilesInDirectories(directories);
|
||||||
|
string? parentDirectory = Path.GetDirectoryName(directories[0]);
|
||||||
|
if (parentDirectory is not null && parentDirectory != Path.GetPathRoot(directories[0]))
|
||||||
|
_ = IPath.DeleteEmptyDirectories(parentDirectory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -124,8 +124,8 @@
|
|||||||
],
|
],
|
||||||
"Windows": {
|
"Windows": {
|
||||||
"Configuration": {
|
"Configuration": {
|
||||||
"xRootDirectory": "F:/Tmp/Phares/Compare/Images-ec5a909",
|
"xRootDirectory": "F:/Tmp/Phares/Compare/Images-45f4401",
|
||||||
"xxRootDirectory": "F:/Tmp/Phares/Compare/Not-Copy-Copy-ec5a909",
|
"xxRootDirectory": "F:/Tmp/Phares/Compare/Not-Copy-Copy-45f4401",
|
||||||
"RootDirectory": "E:/",
|
"RootDirectory": "E:/",
|
||||||
"VerifyToSeason": [
|
"VerifyToSeason": [
|
||||||
". 2000",
|
". 2000",
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
"WorkingDirectoryName": "PharesApps",
|
"WorkingDirectoryName": "PharesApps",
|
||||||
"Windows": {
|
"Windows": {
|
||||||
"Configuration": {
|
"Configuration": {
|
||||||
"DateGroup": "2022-12-30",
|
"DateGroup": "45f4401",
|
||||||
"DiffPropertyDirectory": "",
|
"DiffPropertyDirectory": "",
|
||||||
"FileNameDirectorySeparator": ".Z.",
|
"FileNameDirectorySeparator": ".Z.",
|
||||||
"ForcePropertyLastWriteTimeToCreationTime": false,
|
"ForcePropertyLastWriteTimeToCreationTime": false,
|
||||||
@ -66,7 +66,7 @@
|
|||||||
"ResultCollection": "[]",
|
"ResultCollection": "[]",
|
||||||
"ResultContent": "()",
|
"ResultContent": "()",
|
||||||
"ResultSingleton": "{}",
|
"ResultSingleton": "{}",
|
||||||
"RootDirectory": "C:/Tmp/Phares/Compare/Images-ec5a909",
|
"RootDirectory": "C:/Tmp/Phares/Compare/Images-45f4401",
|
||||||
"WriteBitmapDataBytes": false,
|
"WriteBitmapDataBytes": false,
|
||||||
"IgnoreExtensions": [
|
"IgnoreExtensions": [
|
||||||
".gif",
|
".gif",
|
||||||
|
@ -63,7 +63,7 @@ public partial class DlibDotNet
|
|||||||
Models.Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
|
Models.Configuration configuration = Models.Binder.Configuration.Get(isEnvironment, configurationRoot, propertyConfiguration);
|
||||||
_Log.Information(propertyConfiguration.RootDirectory);
|
_Log.Information(propertyConfiguration.RootDirectory);
|
||||||
Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false);
|
Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false);
|
||||||
OpenPossibleDuplicates(configuration);
|
Verify(configuration);
|
||||||
VerifyExtra(args, propertyConfiguration, configuration);
|
VerifyExtra(args, propertyConfiguration, configuration);
|
||||||
_Configuration = configuration;
|
_Configuration = configuration;
|
||||||
_Index = new(configuration);
|
_Index = new(configuration);
|
||||||
@ -206,7 +206,7 @@ public partial class DlibDotNet
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OpenPossibleDuplicates(Models.Configuration configuration)
|
private void Verify(Models.Configuration configuration)
|
||||||
{
|
{
|
||||||
if (!configuration.OutputResolutions.Any() || string.IsNullOrEmpty(configuration.OutputResolutions[0]) || !configuration.ValidResolutions.Contains(configuration.OutputResolutions[0]))
|
if (!configuration.OutputResolutions.Any() || string.IsNullOrEmpty(configuration.OutputResolutions[0]) || !configuration.ValidResolutions.Contains(configuration.OutputResolutions[0]))
|
||||||
throw new NullReferenceException($"{nameof(configuration.OutputResolutions)} must be _FileNameToCollection valid outputResolution!");
|
throw new NullReferenceException($"{nameof(configuration.OutputResolutions)} must be _FileNameToCollection valid outputResolution!");
|
||||||
@ -274,7 +274,8 @@ public partial class DlibDotNet
|
|||||||
configuration.MappingDefaultName,
|
configuration.MappingDefaultName,
|
||||||
configuration.PersonBirthdayFirstYear,
|
configuration.PersonBirthdayFirstYear,
|
||||||
configuration.PersonBirthdayFormat,
|
configuration.PersonBirthdayFormat,
|
||||||
configuration.PersonCharacters,
|
configuration.PersonCharacters.ToArray(),
|
||||||
|
configuration.PersonCharactersCopyCount,
|
||||||
configuration.RangeDaysDeltaTolerance,
|
configuration.RangeDaysDeltaTolerance,
|
||||||
configuration.RangeDistanceTolerance,
|
configuration.RangeDistanceTolerance,
|
||||||
configuration.SaveSortingWithoutPerson,
|
configuration.SaveSortingWithoutPerson,
|
||||||
@ -783,6 +784,52 @@ public partial class DlibDotNet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void RenameAbandoned(string argZero, Container[] containers)
|
||||||
|
{
|
||||||
|
List<string> renameCollection = new();
|
||||||
|
foreach (Container container in containers)
|
||||||
|
{
|
||||||
|
if (!container.Items.Any())
|
||||||
|
continue;
|
||||||
|
if (!_ArgZeroIsConfigurationRootDirectory && !container.SourceDirectory.StartsWith(argZero))
|
||||||
|
continue;
|
||||||
|
foreach (Item item in container.Items)
|
||||||
|
{
|
||||||
|
if (item.Abandoned is not null && item.Abandoned.Value)
|
||||||
|
renameCollection.Add(item.SourceDirectoryFileHolder.FullName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (renameCollection.Any())
|
||||||
|
{
|
||||||
|
foreach (string rename in renameCollection)
|
||||||
|
File.Move(rename, $"{rename}.abd");
|
||||||
|
throw new Exception($"Renamed {renameCollection.Count}(s) files!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RenameMoved(string argZero, Container[] containers)
|
||||||
|
{
|
||||||
|
List<string> renameCollection = new();
|
||||||
|
foreach (Container container in containers)
|
||||||
|
{
|
||||||
|
if (!container.Items.Any())
|
||||||
|
continue;
|
||||||
|
if (!_ArgZeroIsConfigurationRootDirectory && !container.SourceDirectory.StartsWith(argZero))
|
||||||
|
continue;
|
||||||
|
foreach (Item item in container.Items)
|
||||||
|
{
|
||||||
|
if (item.Moved is not null && item.Moved.Value)
|
||||||
|
renameCollection.Add(item.SourceDirectoryFileHolder.FullName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (renameCollection.Any())
|
||||||
|
{
|
||||||
|
foreach (string rename in renameCollection)
|
||||||
|
File.Move(rename, $"{rename}.mvd");
|
||||||
|
throw new Exception($"Renamed {renameCollection.Count}(s) files!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private List<Shared.Models.Face> GetFilteredDistinctFaces(string argZero, Container[] containers)
|
private List<Shared.Models.Face> GetFilteredDistinctFaces(string argZero, Container[] containers)
|
||||||
{
|
{
|
||||||
List<Shared.Models.Face> results = new();
|
List<Shared.Models.Face> results = new();
|
||||||
@ -845,13 +892,12 @@ public partial class DlibDotNet
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MapLogic(string argZero, long ticks, Container[] containers, string a2PeopleSingletonDirectory, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, string fPhotoPrismContentDirectory, MapLogicSupport mapLogicSupport, MapLogic mapLogic, string outputResolution, List<Shared.Models.Face> distinctFilteredFaces, Mapping[] mappingCollection, int totalNotMapped)
|
private void MapLogic(string argZero, long ticks, Container[] containers, string a2PeopleSingletonDirectory, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, string fPhotoPrismContentDirectory, MapLogicSupport mapLogicSupport, MapLogic mapLogic, string outputResolution, List<Shared.Models.Face> distinctFilteredFaces, Mapping[] mappingCollection, int totalNotMapped, Dictionary<long, int> personKeyToCount)
|
||||||
{
|
{
|
||||||
int? useFiltersCounter = null;
|
int? useFiltersCounter = null;
|
||||||
SortingContainer[] sortingContainers;
|
SortingContainer[] sortingContainers;
|
||||||
string dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()");
|
string dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()");
|
||||||
string d2FacePartsContentDirectory = Path.Combine(d2ResultsFullGroupDirectory, "()");
|
string d2FacePartsContentDirectory = Path.Combine(d2ResultsFullGroupDirectory, "()");
|
||||||
Dictionary<long, int> personKeyToCount = mapLogic.GetPersonKeyToCount(mappingCollection);
|
|
||||||
string dFacesCollectionDirectory = Path.Combine(dResultsFullGroupDirectory, "[]", _Configuration.PropertyConfiguration.ResultAllInOne);
|
string dFacesCollectionDirectory = Path.Combine(dResultsFullGroupDirectory, "[]", _Configuration.PropertyConfiguration.ResultAllInOne);
|
||||||
Dictionary<int, Dictionary<int, Mapping>> idToNormalizedRectangleToMapping = MapLogicSupport.GetIdToNormalizedRectangleToFace(mappingCollection);
|
Dictionary<int, Dictionary<int, Mapping>> idToNormalizedRectangleToMapping = MapLogicSupport.GetIdToNormalizedRectangleToFace(mappingCollection);
|
||||||
if (Directory.Exists(fPhotoPrismContentDirectory))
|
if (Directory.Exists(fPhotoPrismContentDirectory))
|
||||||
@ -861,13 +907,11 @@ public partial class DlibDotNet
|
|||||||
List<Item> filteredItems = GetItems(argZero, containers);
|
List<Item> filteredItems = GetItems(argZero, containers);
|
||||||
mapLogic.SaveShortcutsForOutputResolutions(filteredItems, mappingCollection, personKeyToCount);
|
mapLogic.SaveShortcutsForOutputResolutions(filteredItems, mappingCollection, personKeyToCount);
|
||||||
}
|
}
|
||||||
if (_Configuration.PersonCharactersToCopyTo.Length == 1 && _Configuration.PersonCharacters.ToArray().Contains(_Configuration.PersonCharactersToCopyTo[0]))
|
if (_Configuration.PersonCharactersCopyCount > 0 && !string.IsNullOrEmpty(_Configuration.PersonCharacters))
|
||||||
mapLogic.CopyAtLeastOneMappedFiles(_Configuration.PersonCharactersToCopyTo[0], dFacesContentDirectory, a2PeopleSingletonDirectory, mappingCollection);
|
mapLogic.CopyAtLeastOneMappedFiles(dFacesContentDirectory, a2PeopleSingletonDirectory, mappingCollection);
|
||||||
mapLogic.CopyManualFiles(dFacesContentDirectory, idToNormalizedRectangleToMapping);
|
mapLogic.CopyManualFiles(dFacesContentDirectory, idToNormalizedRectangleToMapping);
|
||||||
if (_Configuration.SaveMappedForOutputResolutions.Contains(outputResolution))
|
if (_Configuration.SaveMappedForOutputResolutions.Contains(outputResolution))
|
||||||
mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedRectangleToMapping, personKeyToCount, totalNotMapped);
|
mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedRectangleToMapping, personKeyToCount, totalNotMapped);
|
||||||
if (_Configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions.Contains(outputResolution))
|
|
||||||
mapLogic.SaveFilteredOriginalImagesFromJLinks(_Configuration.JLinks, _PersonContainers, a2PeopleSingletonDirectory, mappingCollection, personKeyToCount, totalNotMapped);
|
|
||||||
if (_Configuration.SaveFaceDistancesForOutputResolutions.Contains(outputResolution))
|
if (_Configuration.SaveFaceDistancesForOutputResolutions.Contains(outputResolution))
|
||||||
{
|
{
|
||||||
MapLogicSupport.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces);
|
MapLogicSupport.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces);
|
||||||
@ -1014,6 +1058,7 @@ public partial class DlibDotNet
|
|||||||
string key;
|
string key;
|
||||||
double? percent;
|
double? percent;
|
||||||
Rectangle? rectangle;
|
Rectangle? rectangle;
|
||||||
|
List<string> delete = new();
|
||||||
Rectangle intersectRectangle;
|
Rectangle intersectRectangle;
|
||||||
(string File, int NormalizedRectangle) item;
|
(string File, int NormalizedRectangle) item;
|
||||||
Dictionary<string, (string, int)> distinct = new();
|
Dictionary<string, (string, int)> distinct = new();
|
||||||
@ -1038,21 +1083,28 @@ public partial class DlibDotNet
|
|||||||
percent = intersectRectangle.Width * intersectRectangle.Height;
|
percent = intersectRectangle.Width * intersectRectangle.Height;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!_Configuration.DeletePossibleDuplicates)
|
delete.Add(item.File);
|
||||||
duplicates.Add(new(locationContainer.PersonKey, locationContainer.Id, locationContainer.File, percent));
|
delete.Add(locationContainer.File);
|
||||||
else
|
duplicates.Add(new(locationContainer.PersonKey, locationContainer.Id, locationContainer.File, percent));
|
||||||
{
|
|
||||||
if (File.Exists(item.File))
|
|
||||||
File.Delete(item.File);
|
|
||||||
if (File.Exists(locationContainer.File))
|
|
||||||
File.Delete(locationContainer.File);
|
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
distinct.Add(key, new(locationContainer.File, locationContainer.NormalizedRectangle));
|
distinct.Add(key, new(locationContainer.File, locationContainer.NormalizedRectangle));
|
||||||
}
|
}
|
||||||
if (duplicates.Any() && _IsEnvironment.Development)
|
if (!_Configuration.DeletePossibleDuplicates)
|
||||||
OpenPossibleDuplicates(duplicates);
|
{
|
||||||
|
if (duplicates.Any() && _IsEnvironment.Development)
|
||||||
|
OpenPossibleDuplicates(duplicates);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (delete.Count > 5)
|
||||||
|
throw new Exception("Something maybe wrong!");
|
||||||
|
foreach (string file in delete)
|
||||||
|
{
|
||||||
|
if (File.Exists(file))
|
||||||
|
File.Delete(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<LocationContainer<MetadataExtractor.Directory>> GetCollection(long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory)
|
private List<LocationContainer<MetadataExtractor.Directory>> GetCollection(long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory)
|
||||||
@ -1107,9 +1159,7 @@ public partial class DlibDotNet
|
|||||||
int f;
|
int f;
|
||||||
int j;
|
int j;
|
||||||
int t;
|
int t;
|
||||||
int totalNotMapped;
|
|
||||||
Container[] containers;
|
Container[] containers;
|
||||||
Mapping[] mappingCollection;
|
|
||||||
string eDistanceContentDirectory;
|
string eDistanceContentDirectory;
|
||||||
string? a2PeopleContentDirectory;
|
string? a2PeopleContentDirectory;
|
||||||
string aResultsFullGroupDirectory;
|
string aResultsFullGroupDirectory;
|
||||||
@ -1119,7 +1169,6 @@ public partial class DlibDotNet
|
|||||||
string d2ResultsFullGroupDirectory;
|
string d2ResultsFullGroupDirectory;
|
||||||
string fPhotoPrismContentDirectory;
|
string fPhotoPrismContentDirectory;
|
||||||
string fPhotoPrismSingletonDirectory;
|
string fPhotoPrismSingletonDirectory;
|
||||||
List<Shared.Models.Face> distinctFilteredFaces;
|
|
||||||
string a2PeopleSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A2_People), "{}");
|
string a2PeopleSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A2_People), "{}");
|
||||||
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 = $") Building Container(s) - {totalSeconds} total second(s)";
|
string message = $") Building Container(s) - {totalSeconds} total second(s)";
|
||||||
@ -1130,6 +1179,8 @@ public partial class DlibDotNet
|
|||||||
progressBar.Tick();
|
progressBar.Tick();
|
||||||
(j, f, t, containers) = Property.Models.Stateless.Container.GetContainers(_Configuration.PropertyConfiguration, propertyLogic);
|
(j, f, t, containers) = Property.Models.Stateless.Container.GetContainers(_Configuration.PropertyConfiguration, propertyLogic);
|
||||||
}
|
}
|
||||||
|
RenameMoved(argZero, containers);
|
||||||
|
RenameAbandoned(argZero, containers);
|
||||||
Container? container = AreAllSameEndsWith(argZero, containers);
|
Container? container = AreAllSameEndsWith(argZero, containers);
|
||||||
if (!_ArgZeroIsConfigurationRootDirectory || container is null)
|
if (!_ArgZeroIsConfigurationRootDirectory || container is null)
|
||||||
{
|
{
|
||||||
@ -1168,25 +1219,26 @@ public partial class DlibDotNet
|
|||||||
FullDoWork(argZero, propertyRoot, ticks, propertyLogic, t, containers, a2PeopleContentDirectory, eDistanceContentDirectory);
|
FullDoWork(argZero, propertyRoot, ticks, propertyLogic, t, containers, a2PeopleContentDirectory, eDistanceContentDirectory);
|
||||||
_Distance.Clear();
|
_Distance.Clear();
|
||||||
mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory, mapLogicSupport);
|
mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory, mapLogicSupport);
|
||||||
|
SetMapping(_FileNameToCollection, argZero, containers);
|
||||||
|
List<Shared.Models.Face> distinctFilteredFaces = GetFilteredDistinctFaces(argZero, containers);
|
||||||
|
Mapping[] mappingCollection = MapLogicSupport.GetSelectedMappingCollection(distinctFilteredFaces);
|
||||||
|
Dictionary<long, int> personKeyToCount = mapLogic.GetPersonKeyToCount(mappingCollection);
|
||||||
|
int totalNotMapped = mapLogic.UpdateMappingFromPerson(mappingCollection);
|
||||||
|
if (a2PeopleContentDirectory is not null && false)
|
||||||
|
mapLogic.CreateTree(ticks, a2PeopleContentDirectory);
|
||||||
foreach (string outputResolution in _Configuration.OutputResolutions)
|
foreach (string outputResolution in _Configuration.OutputResolutions)
|
||||||
{
|
{
|
||||||
if (_PropertyRootExistedBefore || container is not null)
|
if (_PropertyRootExistedBefore || container is not null)
|
||||||
break;
|
break;
|
||||||
(aResultsFullGroupDirectory, bResultsFullGroupDirectory, cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
|
(aResultsFullGroupDirectory, bResultsFullGroupDirectory, cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
|
||||||
if (_Configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions.Contains(outputResolution))
|
if (!string.IsNullOrEmpty(a2PeopleContentDirectory) && _Configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions.Contains(outputResolution))
|
||||||
MapLogicSupport.BeforeSaveFilteredOriginalImagesFromJLinks(_Configuration.JLinks, a2PeopleSingletonDirectory);
|
mapLogic.SaveFilteredOriginalImagesFromJLinks(_Configuration.JLinks, _PersonContainers, a2PeopleContentDirectory, mappingCollection, personKeyToCount, totalNotMapped);
|
||||||
SetMapping(_FileNameToCollection, argZero, containers);
|
|
||||||
distinctFilteredFaces = GetFilteredDistinctFaces(argZero, containers);
|
|
||||||
mappingCollection = MapLogicSupport.GetSelectedMappingCollection(distinctFilteredFaces);
|
|
||||||
totalNotMapped = mapLogic.UpdateMappingFromPerson(mappingCollection);
|
|
||||||
if (a2PeopleContentDirectory is not null)
|
|
||||||
mapLogic.CreateTree(ticks, a2PeopleContentDirectory);
|
|
||||||
if (_ArgZeroIsConfigurationRootDirectory
|
if (_ArgZeroIsConfigurationRootDirectory
|
||||||
&& _Configuration.SaveResizedSubfiles
|
&& _Configuration.SaveResizedSubfiles
|
||||||
&& outputResolution == _Configuration.OutputResolutions[0]
|
&& outputResolution == _Configuration.OutputResolutions[0]
|
||||||
&& _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution)
|
&& _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution)
|
||||||
&& _Exceptions.Count == 0)
|
&& _Exceptions.Count == 0)
|
||||||
MapLogic(argZero, ticks, containers, a2PeopleSingletonDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, fPhotoPrismContentDirectory, mapLogicSupport, mapLogic, outputResolution, distinctFilteredFaces, mappingCollection, totalNotMapped);
|
MapLogic(argZero, ticks, containers, a2PeopleSingletonDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, fPhotoPrismContentDirectory, mapLogicSupport, mapLogic, outputResolution, distinctFilteredFaces, mappingCollection, totalNotMapped, personKeyToCount);
|
||||||
if (_Configuration.SaveRandomForOutputResolutions.Contains(outputResolution))
|
if (_Configuration.SaveRandomForOutputResolutions.Contains(outputResolution))
|
||||||
_Random.Random(_Configuration.PropertyConfiguration, mapLogic, outputResolution, mappingCollection);
|
_Random.Random(_Configuration.PropertyConfiguration, mapLogic, outputResolution, mappingCollection);
|
||||||
if (_IsEnvironment.Development)
|
if (_IsEnvironment.Development)
|
||||||
|
@ -51,7 +51,7 @@ public class Configuration
|
|||||||
[Display(Name = "Person Birthday First Year"), Required] public int? PersonBirthdayFirstYear { get; set; }
|
[Display(Name = "Person Birthday First Year"), Required] public int? PersonBirthdayFirstYear { get; set; }
|
||||||
[Display(Name = "Person Birthday Format"), Required] public string PersonBirthdayFormat { get; set; }
|
[Display(Name = "Person Birthday Format"), Required] public string PersonBirthdayFormat { get; set; }
|
||||||
[Display(Name = "Person Characters"), Required] public string PersonCharacters { get; set; }
|
[Display(Name = "Person Characters"), Required] public string PersonCharacters { get; set; }
|
||||||
[Display(Name = "Person Characters To Copy To"), Required] public string PersonCharactersToCopyTo { get; set; }
|
[Display(Name = "Person Characters Copy Count"), Required] public int? PersonCharactersCopyCount { get; set; }
|
||||||
[Display(Name = "PersonKey Format"), Required] public string PersonKeyFormat { get; set; }
|
[Display(Name = "PersonKey Format"), Required] public string PersonKeyFormat { get; set; }
|
||||||
[Display(Name = "Predictor Model Name"), Required] public string PredictorModelName { get; set; }
|
[Display(Name = "Predictor Model Name"), Required] public string PredictorModelName { get; set; }
|
||||||
[Display(Name = "Properties Changed For Distance"), Required] public bool? PropertiesChangedForDistance { get; set; }
|
[Display(Name = "Properties Changed For Distance"), Required] public bool? PropertiesChangedForDistance { get; set; }
|
||||||
@ -164,8 +164,8 @@ public class Configuration
|
|||||||
throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat));
|
throw new NullReferenceException(nameof(configuration.PersonBirthdayFormat));
|
||||||
if (configuration.PersonCharacters is null)
|
if (configuration.PersonCharacters is null)
|
||||||
throw new NullReferenceException(nameof(configuration.PersonCharacters));
|
throw new NullReferenceException(nameof(configuration.PersonCharacters));
|
||||||
if (configuration.PersonCharactersToCopyTo is null)
|
if (configuration.PersonCharactersCopyCount is null)
|
||||||
throw new NullReferenceException(nameof(configuration.PersonCharactersToCopyTo));
|
throw new NullReferenceException(nameof(configuration.PersonCharactersCopyCount));
|
||||||
if (configuration.PersonKeyFormat is null)
|
if (configuration.PersonKeyFormat is null)
|
||||||
throw new NullReferenceException(nameof(configuration.PersonKeyFormat));
|
throw new NullReferenceException(nameof(configuration.PersonKeyFormat));
|
||||||
if (configuration.PropertiesChangedForDistance is null)
|
if (configuration.PropertiesChangedForDistance is null)
|
||||||
@ -254,7 +254,7 @@ public class Configuration
|
|||||||
configuration.PersonBirthdayFirstYear.Value,
|
configuration.PersonBirthdayFirstYear.Value,
|
||||||
configuration.PersonBirthdayFormat,
|
configuration.PersonBirthdayFormat,
|
||||||
configuration.PersonCharacters,
|
configuration.PersonCharacters,
|
||||||
configuration.PersonCharactersToCopyTo,
|
configuration.PersonCharactersCopyCount.Value,
|
||||||
configuration.PersonKeyFormat,
|
configuration.PersonKeyFormat,
|
||||||
configuration.PredictorModelName,
|
configuration.PredictorModelName,
|
||||||
configuration.PropertiesChangedForDistance.Value,
|
configuration.PropertiesChangedForDistance.Value,
|
||||||
|
@ -48,7 +48,7 @@ public class Configuration
|
|||||||
public int PersonBirthdayFirstYear { init; get; }
|
public int PersonBirthdayFirstYear { init; get; }
|
||||||
public string PersonBirthdayFormat { init; get; }
|
public string PersonBirthdayFormat { init; get; }
|
||||||
public string PersonCharacters { init; get; }
|
public string PersonCharacters { init; get; }
|
||||||
public string PersonCharactersToCopyTo { init; get; }
|
public int PersonCharactersCopyCount { init; get; }
|
||||||
public string PersonKeyFormat { init; get; }
|
public string PersonKeyFormat { init; get; }
|
||||||
public string PredictorModelName { init; get; }
|
public string PredictorModelName { init; get; }
|
||||||
public bool PropertiesChangedForDistance { init; get; }
|
public bool PropertiesChangedForDistance { init; get; }
|
||||||
@ -118,7 +118,7 @@ public class Configuration
|
|||||||
int personBirthdayFirstYear,
|
int personBirthdayFirstYear,
|
||||||
string personBirthdayFormat,
|
string personBirthdayFormat,
|
||||||
string personCharacters,
|
string personCharacters,
|
||||||
string personCharactersToCopyTo,
|
int personCharactersCopyCount,
|
||||||
string personKeyFormat,
|
string personKeyFormat,
|
||||||
string predictorModelName,
|
string predictorModelName,
|
||||||
bool propertiesChangedForDistance,
|
bool propertiesChangedForDistance,
|
||||||
@ -187,7 +187,7 @@ public class Configuration
|
|||||||
PersonBirthdayFirstYear = personBirthdayFirstYear;
|
PersonBirthdayFirstYear = personBirthdayFirstYear;
|
||||||
PersonBirthdayFormat = personBirthdayFormat;
|
PersonBirthdayFormat = personBirthdayFormat;
|
||||||
PersonCharacters = personCharacters;
|
PersonCharacters = personCharacters;
|
||||||
PersonCharactersToCopyTo = personCharactersToCopyTo;
|
PersonCharactersCopyCount = personCharactersCopyCount;
|
||||||
PersonKeyFormat = personKeyFormat;
|
PersonKeyFormat = personKeyFormat;
|
||||||
PredictorModelName = predictorModelName;
|
PredictorModelName = predictorModelName;
|
||||||
PropertiesChangedForDistance = propertiesChangedForDistance;
|
PropertiesChangedForDistance = propertiesChangedForDistance;
|
||||||
|
@ -10,24 +10,18 @@
|
|||||||
},
|
},
|
||||||
"Windows": {
|
"Windows": {
|
||||||
"Configuration": {
|
"Configuration": {
|
||||||
"DeletePossibleDuplicates": false,
|
"DateGroup": "45f4401",
|
||||||
|
"DeletePossibleDuplicates": true,
|
||||||
"DistanceRenameToMatch": true,
|
"DistanceRenameToMatch": true,
|
||||||
"DistanceMoveUnableToMatch": true,
|
"DistanceMoveUnableToMatch": true,
|
||||||
"PersonCharacters": "!#]^_`~+",
|
"PersonCharacters": "!#]^_`~+",
|
||||||
"PersonCharactersToCopyTo": "x",
|
"PersonCharactersCopyCount": 0,
|
||||||
"xPersonCharactersToCopyTo": "!",
|
"xPersonCharactersCopyCount": 2,
|
||||||
"xxPersonCharactersToCopyTo": "#",
|
|
||||||
"xxxPersonCharactersToCopyTo": "]",
|
|
||||||
"xxxxPersonCharactersToCopyTo": "^",
|
|
||||||
"xxxxxPersonCharactersToCopyTo": "_",
|
|
||||||
"xxxxxxPersonCharactersToCopyTo": "`",
|
|
||||||
"xxxxxxxPersonCharactersToCopyTo": "~",
|
|
||||||
"xxxxxxxxPersonCharactersToCopyTo": "+",
|
|
||||||
"xRootDirectory": "D:/Tmp/phares/Pictures",
|
"xRootDirectory": "D:/Tmp/phares/Pictures",
|
||||||
"xxRootDirectory": "D:/Tmp/Phares/Compare/Corrupt",
|
"xxRootDirectory": "D:/Tmp/Phares/Compare/Corrupt",
|
||||||
"xxxRootDirectory": "D:/2) Images B/Not-Copy-Copy-ec5a909",
|
"RootDirectory": "D:/2) Images B/Not-Copy-Copy-45f4401",
|
||||||
"RootDirectory": "D:/1) Images A/Images-ec5a909",
|
"xxxxRootDirectory": "D:/1) Images A/Images-45f4401",
|
||||||
"xxxxxRootDirectory": "D:/1) Images A/Images-ec5a909/Facebook/=2022.3 Facebook",
|
"xxxxxRootDirectory": "D:/1) Images A/Images-45f4401/Facebook/=2022.3 Facebook",
|
||||||
"SaveSortingWithoutPerson": true,
|
"SaveSortingWithoutPerson": true,
|
||||||
"JLinks": [
|
"JLinks": [
|
||||||
"Julie"
|
"Julie"
|
||||||
@ -44,12 +38,12 @@
|
|||||||
"PropertyContentCollectionFiles": [],
|
"PropertyContentCollectionFiles": [],
|
||||||
"RangeDaysDeltaTolerance": [
|
"RangeDaysDeltaTolerance": [
|
||||||
0,
|
0,
|
||||||
1,
|
2100,
|
||||||
123456
|
123456
|
||||||
],
|
],
|
||||||
"RangeDistanceTolerance": [
|
"RangeDistanceTolerance": [
|
||||||
0,
|
0,
|
||||||
0.4,
|
0.3,
|
||||||
0.6
|
0.6
|
||||||
],
|
],
|
||||||
"RangeFaceAreaPermilleTolerance": [
|
"RangeFaceAreaPermilleTolerance": [
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
"CheckDFaceAndUpWriteDates": false,
|
"CheckDFaceAndUpWriteDates": false,
|
||||||
"CheckJsonForDistanceResults": false,
|
"CheckJsonForDistanceResults": false,
|
||||||
"CrossDirectoryMaxItemsInDistanceCollection": 7,
|
"CrossDirectoryMaxItemsInDistanceCollection": 7,
|
||||||
"DateGroup": "2022-12-30",
|
"DateGroup": "DateGroup",
|
||||||
"DeletePossibleDuplicates": false,
|
"DeletePossibleDuplicates": false,
|
||||||
"DistanceFactor": 8,
|
"DistanceFactor": 8,
|
||||||
"DistanceMoveUnableToMatch": false,
|
"DistanceMoveUnableToMatch": false,
|
||||||
@ -89,7 +89,7 @@
|
|||||||
"PersonBirthdayFirstYear": 1500,
|
"PersonBirthdayFirstYear": 1500,
|
||||||
"PersonBirthdayFormat": "yyyy-MM-dd_HH",
|
"PersonBirthdayFormat": "yyyy-MM-dd_HH",
|
||||||
"PersonCharacters": "!#]^_`~+",
|
"PersonCharacters": "!#]^_`~+",
|
||||||
"PersonCharactersToCopyTo": "~",
|
"PersonCharactersCopyCount": 0,
|
||||||
"PersonKeyFormat": "yyyy-MM-dd_HH",
|
"PersonKeyFormat": "yyyy-MM-dd_HH",
|
||||||
"PopulatePropertyId": true,
|
"PopulatePropertyId": true,
|
||||||
"PredictorModelName": "Large",
|
"PredictorModelName": "Large",
|
||||||
|
@ -12,9 +12,10 @@ public class Configuration
|
|||||||
public string FacesFileNameExtension { init; get; }
|
public string FacesFileNameExtension { init; get; }
|
||||||
public string FacesHiddenFileNameExtension { init; get; }
|
public string FacesHiddenFileNameExtension { init; get; }
|
||||||
public string MappingDefaultName { init; get; }
|
public string MappingDefaultName { init; get; }
|
||||||
public string PersonCharacters { init; get; }
|
|
||||||
public int PersonBirthdayFirstYear { init; get; }
|
public int PersonBirthdayFirstYear { init; get; }
|
||||||
public string PersonBirthdayFormat { init; get; }
|
public string PersonBirthdayFormat { init; get; }
|
||||||
|
public char[] PersonCharacters { init; get; }
|
||||||
|
public int PersonCharactersCopyCount { init; get; }
|
||||||
public int RangeDaysDeltaTolerance { init; get; }
|
public int RangeDaysDeltaTolerance { init; get; }
|
||||||
public double RangeDistanceTolerance { init; get; }
|
public double RangeDistanceTolerance { init; get; }
|
||||||
public bool SaveSortingWithoutPerson { init; get; }
|
public bool SaveSortingWithoutPerson { init; get; }
|
||||||
@ -27,7 +28,8 @@ public class Configuration
|
|||||||
string mappingDefaultName,
|
string mappingDefaultName,
|
||||||
int personBirthdayFirstYear,
|
int personBirthdayFirstYear,
|
||||||
string personBirthdayFormat,
|
string personBirthdayFormat,
|
||||||
string personCharacters,
|
char[] personCharacters,
|
||||||
|
int personCharactersCopyCount,
|
||||||
int[] rangeDaysDeltaTolerance,
|
int[] rangeDaysDeltaTolerance,
|
||||||
double[] rangeDistanceTolerance,
|
double[] rangeDistanceTolerance,
|
||||||
bool saveSortingWithoutPerson,
|
bool saveSortingWithoutPerson,
|
||||||
@ -49,6 +51,7 @@ public class Configuration
|
|||||||
SaveSortingWithoutPerson = saveSortingWithoutPerson;
|
SaveSortingWithoutPerson = saveSortingWithoutPerson;
|
||||||
SortingMinimumToUseSigma = sortingMinimumToUseSigma;
|
SortingMinimumToUseSigma = sortingMinimumToUseSigma;
|
||||||
RangeDaysDeltaTolerance = rangeDaysDeltaTolerance[1];
|
RangeDaysDeltaTolerance = rangeDaysDeltaTolerance[1];
|
||||||
|
PersonCharactersCopyCount = personCharactersCopyCount;
|
||||||
FacePartsFileNameExtension = facePartsFileNameExtension;
|
FacePartsFileNameExtension = facePartsFileNameExtension;
|
||||||
FacesHiddenFileNameExtension = facesHiddenFileNameExtension;
|
FacesHiddenFileNameExtension = facesHiddenFileNameExtension;
|
||||||
}
|
}
|
||||||
|
@ -859,7 +859,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CopyAtLeastOneMappedFiles(char personCharactersToCopyTo, string dFacesContentDirectory, string a2PeopleSingletonDirectory, Mapping[] mappingCollection)
|
public void CopyAtLeastOneMappedFiles(string dFacesContentDirectory, string a2PeopleSingletonDirectory, Mapping[] mappingCollection)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
@ -897,13 +897,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
continue;
|
continue;
|
||||||
if (!_PersonKeyToPersonContainer.TryGetValue(personKey, out personContainer))
|
if (!_PersonKeyToPersonContainer.TryGetValue(personKey, out personContainer))
|
||||||
continue;
|
continue;
|
||||||
if (personContainer.Char is null || personContainer.Char != personCharactersToCopyTo)
|
if (personContainer.Char is null || !_Configuration.PersonCharacters.Contains(personContainer.Char.Value))
|
||||||
continue;
|
continue;
|
||||||
if (personContainer.DisplayDirectoryAllFiles.Any(l => l.EndsWith(faceFileName)))
|
if (personContainer.DisplayDirectoryAllFiles.Any(l => l.EndsWith(faceFileName)))
|
||||||
continue;
|
continue;
|
||||||
if (!File.Exists(faceFile))
|
if (!File.Exists(faceFile))
|
||||||
continue;
|
continue;
|
||||||
directory = Path.Combine(a2PeopleSingletonDirectory, personCharactersToCopyTo.ToString(), personContainer.DisplayDirectoryName);
|
directory = Path.Combine(a2PeopleSingletonDirectory, personContainer.Char.Value.ToString(), personContainer.DisplayDirectoryName);
|
||||||
if (!Directory.Exists(directory))
|
if (!Directory.Exists(directory))
|
||||||
continue;
|
continue;
|
||||||
fileName = Path.Combine(directory, faceFileName);
|
fileName = Path.Combine(directory, faceFileName);
|
||||||
@ -952,7 +952,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
return new(personKeyFormatted, personBirthday);
|
return new(personKeyFormatted, personBirthday);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<string> GetPersonKeyFormattedCollection(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers, Dictionary<long, int> personKeyToCount)
|
private List<string> GetPersonKeyFormattedCollection(string[] jLinks, string a2PeopleContentDirectory, PersonContainer[] personContainers, Dictionary<long, int> personKeyToCount)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
@ -970,7 +970,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
List<(long, string)> collection = new();
|
List<(long, string)> collection = new();
|
||||||
foreach (string directoryName in jLinks)
|
foreach (string directoryName in jLinks)
|
||||||
{
|
{
|
||||||
checkDirectory = Path.Combine(a2PeopleSingletonDirectory, directoryName);
|
checkDirectory = Path.Combine(a2PeopleContentDirectory, directoryName);
|
||||||
if (!Directory.Exists(checkDirectory))
|
if (!Directory.Exists(checkDirectory))
|
||||||
continue;
|
continue;
|
||||||
checkDirectories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly);
|
checkDirectories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
@ -1012,7 +1012,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
private (int, FileHolder, int, string, string, string, string)[] GetCollectionForSaveFilteredOriginalImagesFromJLinks(string[] jLinks, string a2PeopleSingletonDirectory, PersonContainer[] personContainers, Mapping[] mappingCollection, Dictionary<long, int> personKeyToCount)
|
private (int, FileHolder, int, string, string, string, string)[] GetCollectionForSaveFilteredOriginalImagesFromJLinks(string[] jLinks, string a2PeopleContentDirectory, PersonContainer[] personContainers, Mapping[] mappingCollection, Dictionary<long, int> personKeyToCount)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
@ -1023,7 +1023,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
string personDirectory;
|
string personDirectory;
|
||||||
string personKeyFormatted;
|
string personKeyFormatted;
|
||||||
bool usePersonKeyAndDeterministicHashCodeKey = false;
|
bool usePersonKeyAndDeterministicHashCodeKey = false;
|
||||||
List<string> personKeyFormattedCollection = GetPersonKeyFormattedCollection(jLinks, a2PeopleSingletonDirectory, personContainers, personKeyToCount);
|
List<string> personKeyFormattedCollection = GetPersonKeyFormattedCollection(jLinks, a2PeopleContentDirectory, personContainers, personKeyToCount);
|
||||||
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 = new();
|
||||||
foreach (Mapping mapping in mappingCollection)
|
foreach (Mapping mapping in mappingCollection)
|
||||||
{
|
{
|
||||||
@ -1061,14 +1061,66 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveFilteredOriginalImagesFromJLinks(string[] jLinks, PersonContainer[] personContainers, string a2PeopleSingletonDirectory, Mapping[] mappingCollection, Dictionary<long, int> personKeyToCount, int totalNotMapped)
|
private static bool TryToFind(string a2PeopleSingletonDirectory, string file, string path)
|
||||||
|
{
|
||||||
|
bool result = false;
|
||||||
|
string? pathName = Path.GetFileName(path);
|
||||||
|
string? group = Path.GetDirectoryName(path);
|
||||||
|
string? groupName = Path.GetFileName(group);
|
||||||
|
if (pathName is not null && group is not null && groupName is not null)
|
||||||
|
{
|
||||||
|
WindowsShortcut windowsShortcut;
|
||||||
|
string checkDirectory = Path.Combine(a2PeopleSingletonDirectory, groupName, pathName);
|
||||||
|
if (Directory.Exists(checkDirectory))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
windowsShortcut = new() { Path = checkDirectory };
|
||||||
|
windowsShortcut.Save(file);
|
||||||
|
windowsShortcut.Dispose();
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void BeforeSaveFilteredOriginalImagesFromJLinks(string[] jLinks, string a2PeopleContentDirectory)
|
||||||
|
{
|
||||||
|
string[] files;
|
||||||
|
string checkDirectory;
|
||||||
|
WindowsShortcut windowsShortcut;
|
||||||
|
foreach (string directoryName in jLinks)
|
||||||
|
{
|
||||||
|
checkDirectory = Path.Combine(a2PeopleContentDirectory, directoryName);
|
||||||
|
if (!Directory.Exists(checkDirectory))
|
||||||
|
continue;
|
||||||
|
files = Directory.GetFiles(checkDirectory, "*.lnk", SearchOption.TopDirectoryOnly);
|
||||||
|
foreach (string file in files)
|
||||||
|
{
|
||||||
|
windowsShortcut = WindowsShortcut.Load(file);
|
||||||
|
if (windowsShortcut.Path is null)
|
||||||
|
continue;
|
||||||
|
if (!Directory.Exists(windowsShortcut.Path))
|
||||||
|
{
|
||||||
|
if (!TryToFind(a2PeopleContentDirectory, file, windowsShortcut.Path))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveFilteredOriginalImagesFromJLinks(string[] jLinks, PersonContainer[] personContainers, string a2PeopleContentDirectory, Mapping[] mappingCollection, Dictionary<long, int> personKeyToCount, int totalNotMapped)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
SaveContainer? saveContainer;
|
SaveContainer? saveContainer;
|
||||||
List<int> distinctCollection = new();
|
List<int> distinctCollection = new();
|
||||||
List<SaveContainer> saveContainers = new();
|
List<SaveContainer> saveContainers = new();
|
||||||
(int, FileHolder, int, string, string, string, string)[] collection = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleSingletonDirectory, personContainers, mappingCollection, personKeyToCount);
|
BeforeSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory);
|
||||||
|
(int, FileHolder, int, string, string, string, string)[] collection = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory, personContainers, mappingCollection, personKeyToCount);
|
||||||
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)
|
||||||
{
|
{
|
||||||
if (distinctCollection.Contains(id))
|
if (distinctCollection.Contains(id))
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
"WorkingDirectoryName": "PharesApps",
|
"WorkingDirectoryName": "PharesApps",
|
||||||
"Windows": {
|
"Windows": {
|
||||||
"Configuration": {
|
"Configuration": {
|
||||||
"DateGroup": "2022-12-30",
|
"DateGroup": "45f4401",
|
||||||
"FileNameDirectorySeparator": ".Z.",
|
"FileNameDirectorySeparator": ".Z.",
|
||||||
"ForcePropertyLastWriteTimeToCreationTime": false,
|
"ForcePropertyLastWriteTimeToCreationTime": false,
|
||||||
"MaxImagesInDirectoryForTopLevelFirstPass": 10,
|
"MaxImagesInDirectoryForTopLevelFirstPass": 10,
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
"WorkingDirectoryName": "PharesApps",
|
"WorkingDirectoryName": "PharesApps",
|
||||||
"Windows": {
|
"Windows": {
|
||||||
"Configuration": {
|
"Configuration": {
|
||||||
"DateGroup": "2022-12-30",
|
"DateGroup": "45f4401",
|
||||||
"FileNameDirectorySeparator": ".Z.",
|
"FileNameDirectorySeparator": ".Z.",
|
||||||
"ForcePropertyLastWriteTimeToCreationTime": false,
|
"ForcePropertyLastWriteTimeToCreationTime": false,
|
||||||
"KeepFullPath": false,
|
"KeepFullPath": false,
|
||||||
|
@ -78,13 +78,11 @@ public class Container
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static (int, Shared.Models.Container[]) GetContainers(Configuration configuration, A_Property propertyLogic, string aPropertySingletonDirectory, List<(int, string, FileHolder[])> fileHolderGroupCollection, List<(string, List<(string, Shared.Models.Property?)>)> collectionFromJson)
|
private static Shared.Models.Container[] GetContainers(Configuration configuration, A_Property propertyLogic, string aPropertySingletonDirectory, List<(int, string, FileHolder[])> fileHolderGroupCollection, List<(string, List<(string, Shared.Models.Property?)>)> collectionFromJson)
|
||||||
{
|
{
|
||||||
int result = 0;
|
|
||||||
Shared.Models.Container[] results;
|
Shared.Models.Container[] results;
|
||||||
Item item;
|
Item item;
|
||||||
int length;
|
int length;
|
||||||
int additional;
|
|
||||||
string inferred;
|
string inferred;
|
||||||
List<Item> items;
|
List<Item> items;
|
||||||
const int last = 9;
|
const int last = 9;
|
||||||
@ -155,7 +153,6 @@ public class Container
|
|||||||
}
|
}
|
||||||
if (items.Any())
|
if (items.Any())
|
||||||
{
|
{
|
||||||
result += items.Count;
|
|
||||||
if (keySourceDirectories.Distinct().Count() != 1)
|
if (keySourceDirectories.Distinct().Count() != 1)
|
||||||
continue;
|
continue;
|
||||||
container = new(last, items, keySourceDirectories[0]);
|
container = new(last, items, keySourceDirectories[0]);
|
||||||
@ -183,15 +180,13 @@ public class Container
|
|||||||
{
|
{
|
||||||
if (!keyValuePairs.ContainsKey(sourceDirectory))
|
if (!keyValuePairs.ContainsKey(sourceDirectory))
|
||||||
{
|
{
|
||||||
result += items.Count;
|
|
||||||
container = new(g, items, sourceDirectory);
|
container = new(g, items, sourceDirectory);
|
||||||
keyValuePairs.Add(sourceDirectory, container);
|
keyValuePairs.Add(sourceDirectory, container);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
container = keyValuePairs[sourceDirectory];
|
container = keyValuePairs[sourceDirectory];
|
||||||
(items, additional) = Shared.Models.Stateless.Methods.IItem.GetMerged(container.Items, items);
|
items = Shared.Models.Stateless.Methods.IItem.GetMerged(container.Items, items);
|
||||||
result += additional;
|
|
||||||
container = new(container.G, items, container.SourceDirectory);
|
container = new(container.G, items, container.SourceDirectory);
|
||||||
keyValuePairs[sourceDirectory] = container;
|
keyValuePairs[sourceDirectory] = container;
|
||||||
}
|
}
|
||||||
@ -200,7 +195,7 @@ public class Container
|
|||||||
if (fileHolderKeyValuePairs.Any())
|
if (fileHolderKeyValuePairs.Any())
|
||||||
throw new NotSupportedException("Unmapped left!");
|
throw new NotSupportedException("Unmapped left!");
|
||||||
results = (from l in keyValuePairs orderby l.Value.G, l.Value.Items.Count select l.Value).ToArray();
|
results = (from l in keyValuePairs orderby l.Value.G, l.Value.Items.Count select l.Value).ToArray();
|
||||||
return new(result, results);
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SetCollections(string aPropertySingletonDirectory, List<string> otherCollection, List<(string, string[])> jsonCollection)
|
private static void SetCollections(string aPropertySingletonDirectory, List<string> otherCollection, List<(string, string[])> jsonCollection)
|
||||||
@ -253,7 +248,8 @@ public class Container
|
|||||||
DeleteAbandoned(configuration, aPropertySingletonDirectory, otherCollection, fileHolderGroupCollection);
|
DeleteAbandoned(configuration, aPropertySingletonDirectory, otherCollection, fileHolderGroupCollection);
|
||||||
List<(string sourceDirectory, List<(string sourceDirectoryFile, Shared.Models.Property? property)> collection)> collectionFromJson;
|
List<(string sourceDirectory, List<(string sourceDirectoryFile, Shared.Models.Property? property)> collection)> collectionFromJson;
|
||||||
collectionFromJson = GetCollection(aPropertySingletonDirectory, jsonCollection);
|
collectionFromJson = GetCollection(aPropertySingletonDirectory, jsonCollection);
|
||||||
(int t, results) = GetContainers(configuration, propertyLogic, aPropertySingletonDirectory, fileHolderGroupCollection, collectionFromJson);
|
results = GetContainers(configuration, propertyLogic, aPropertySingletonDirectory, fileHolderGroupCollection, collectionFromJson);
|
||||||
|
int t = (from l in results select l.Items.Count).Sum();
|
||||||
int j = jsonCollection.Select(l => l.Item2.Length).Sum();
|
int j = jsonCollection.Select(l => l.Item2.Length).Sum();
|
||||||
return (j, f, t, results);
|
return (j, f, t, results);
|
||||||
}
|
}
|
||||||
|
@ -7,9 +7,9 @@ public interface IItem
|
|||||||
GetWrongYearFlag(isWrongYear);
|
GetWrongYearFlag(isWrongYear);
|
||||||
static string GetWrongYearFlag(bool? isWrongYear) => isWrongYear is null ? "#" : isWrongYear.Value ? "~" : "=";
|
static string GetWrongYearFlag(bool? isWrongYear) => isWrongYear is null ? "#" : isWrongYear.Value ? "~" : "=";
|
||||||
|
|
||||||
(List<Models.Item>, int) TestStatic_GetMerged(List<Models.Item> itemsA, List<Models.Item> itemsB) =>
|
List<Models.Item> TestStatic_GetMerged(List<Models.Item> itemsA, List<Models.Item> itemsB) =>
|
||||||
GetMerged(itemsA, itemsB);
|
GetMerged(itemsA, itemsB);
|
||||||
static (List<Models.Item>, int) GetMerged(List<Models.Item> itemsA, List<Models.Item> itemsB) =>
|
static List<Models.Item> GetMerged(List<Models.Item> itemsA, List<Models.Item> itemsB) =>
|
||||||
Item.GetMerged(itemsA, itemsB);
|
Item.GetMerged(itemsA, itemsB);
|
||||||
|
|
||||||
}
|
}
|
@ -3,9 +3,8 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
|||||||
internal abstract class Item
|
internal abstract class Item
|
||||||
{
|
{
|
||||||
|
|
||||||
internal static (List<Models.Item>, int) GetMerged(List<Models.Item> itemsA, List<Models.Item> itemsB)
|
internal static List<Models.Item> GetMerged(List<Models.Item> itemsA, List<Models.Item> itemsB)
|
||||||
{
|
{
|
||||||
int result = 0;
|
|
||||||
List<Models.Item> results = new();
|
List<Models.Item> results = new();
|
||||||
List<string> collection = new();
|
List<string> collection = new();
|
||||||
foreach (Models.Item item in itemsA)
|
foreach (Models.Item item in itemsA)
|
||||||
@ -17,10 +16,9 @@ internal abstract class Item
|
|||||||
{
|
{
|
||||||
if (collection.Contains(item.ImageFileHolder.FullName))
|
if (collection.Contains(item.ImageFileHolder.FullName))
|
||||||
continue;
|
continue;
|
||||||
result++;
|
|
||||||
results.Add(item);
|
results.Add(item);
|
||||||
}
|
}
|
||||||
return new(results, result);
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Reference in New Issue
Block a user