From c5986b5cbaeb05a3c688804ef118941e032cbfed Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Thu, 12 Jan 2023 21:48:39 -0700 Subject: [PATCH] Create directory, check files and RecycleOption --- Date-Group/DateGroup.cs | 2 ++ Delete-By-Distinct/DeleteByDistinct.cs | 27 +++++++++++----- Delete-By-Distinct/Models/AppSettings.cs | 10 +++++- .../Models/Binder/AppSettings.cs | 4 +++ .../appsettings.Development.json | 1 + Delete-By-Distinct/appsettings.json | 1 + Instance/DlibDotNet.cs | 2 ++ Rename/Rename.cs | 31 +++++++++++++++++-- Shared/Models/Stateless/Methods/XDirectory.cs | 2 +- Tests/UnitTestResize.cs | 2 ++ .../UnitTestFace.cs | 2 ++ 11 files changed, 72 insertions(+), 12 deletions(-) diff --git a/Date-Group/DateGroup.cs b/Date-Group/DateGroup.cs index 0ada996..c6cb479 100644 --- a/Date-Group/DateGroup.cs +++ b/Date-Group/DateGroup.cs @@ -116,6 +116,8 @@ public class DateGroup // } string aResultsFullGroupDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A_Property)); string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}"); + if (!Directory.Exists(aPropertySingletonDirectory)) + _ = Directory.CreateDirectory(aPropertySingletonDirectory); (int f, Container[] containers) = Shared.Models.Stateless.Methods.IContainer.GetContainers(propertyConfiguration, aPropertySingletonDirectory); A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory, aResultsFullGroupDirectory); if (propertyLogic.ExceptionsDirectories.Any()) diff --git a/Delete-By-Distinct/DeleteByDistinct.cs b/Delete-By-Distinct/DeleteByDistinct.cs index 12da881..aeeaf95 100644 --- a/Delete-By-Distinct/DeleteByDistinct.cs +++ b/Delete-By-Distinct/DeleteByDistinct.cs @@ -61,9 +61,11 @@ public class DeleteByDistinct fileInfo = new(file); if (fileInfo.Length < 100) continue; - checkLength = fileInfo.Length; + if (appSettings.RecycleOption) + checkLength = 1; + else + checkLength = fileInfo.Length; // checkLength = (long)Math.Round((double)(fileInfo.Length / 1000)); - // checkLength = 1; if (!fileSizeToCollection.TryGetValue(checkLength, out fileTicksToNames)) { fileSizeToCollection.Add(checkLength, new()); @@ -76,9 +78,11 @@ public class DeleteByDistinct // if (!fileTicksToNames.TryGetValue(fileInfo.LastWriteTime.Ticks, out fileNames)) // throw new Exception(); // } - checkTicks = new DateTime(ticks).Ticks; + if (appSettings.RecycleOption) + checkTicks = 1; + else + checkTicks = new DateTime(ticks).Ticks; // checkTicks = new DateTime(fileInfo.LastWriteTime.Year, fileInfo.LastWriteTime.Month, fileInfo.LastWriteTime.Day).Ticks; - // checkTicks = 1; if (!fileTicksToNames.TryGetValue(checkTicks, out fileNames)) { fileTicksToNames.Add(checkTicks, new()); @@ -113,9 +117,18 @@ public class DeleteByDistinct { foreach (string file in deletedFiles) { - try - { File.Delete(file); } - catch (Exception) { } + if (!appSettings.RecycleOption) + { + try + { File.Delete(file); } + catch (Exception) { } + } + else + { + try + { Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(file, Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin); } + catch (Exception) { } + } } totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); message = $") Looking for empty directories from <{directory}> - {totalSeconds} total second(s)"; diff --git a/Delete-By-Distinct/Models/AppSettings.cs b/Delete-By-Distinct/Models/AppSettings.cs index 4d8471e..c8550be 100644 --- a/Delete-By-Distinct/Models/AppSettings.cs +++ b/Delete-By-Distinct/Models/AppSettings.cs @@ -10,16 +10,24 @@ public class AppSettings public string CompareRootDirectory { init; get; } public int MaxDegreeOfParallelism { init; get; } public string OutputExtension { init; get; } + public bool RecycleOption { init; get; } public string SearchPattern { init; get; } public string WorkingDirectoryName { init; get; } [JsonConstructor] - public AppSettings(string company, string compareRootDirectory, int maxDegreeOfParallelism, string outputExtension, string searchPattern, string workingDirectoryName) + public AppSettings(string company, + string compareRootDirectory, + int maxDegreeOfParallelism, + string outputExtension, + bool recycleOption, + string searchPattern, + string workingDirectoryName) { Company = company; CompareRootDirectory = compareRootDirectory; MaxDegreeOfParallelism = maxDegreeOfParallelism; OutputExtension = outputExtension; + RecycleOption = recycleOption; SearchPattern = searchPattern; WorkingDirectoryName = workingDirectoryName; } diff --git a/Delete-By-Distinct/Models/Binder/AppSettings.cs b/Delete-By-Distinct/Models/Binder/AppSettings.cs index a46d348..79f515a 100644 --- a/Delete-By-Distinct/Models/Binder/AppSettings.cs +++ b/Delete-By-Distinct/Models/Binder/AppSettings.cs @@ -12,6 +12,7 @@ public class AppSettings public string CompareRootDirectory { get; set; } public int? MaxDegreeOfParallelism { get; set; } public string OutputExtension { get; set; } + public bool? RecycleOption { get; set; } public string SearchPattern { get; set; } public string WorkingDirectoryName { get; set; } @@ -28,11 +29,14 @@ public class AppSettings Models.AppSettings result; if (appSettings?.MaxDegreeOfParallelism is null) throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism)); + if (appSettings?.RecycleOption is null) + throw new NullReferenceException(nameof(appSettings.RecycleOption)); result = new( appSettings.Company, appSettings.CompareRootDirectory, appSettings.MaxDegreeOfParallelism.Value, appSettings.OutputExtension, + appSettings.RecycleOption.Value, appSettings.SearchPattern, appSettings.WorkingDirectoryName ); diff --git a/Delete-By-Distinct/appsettings.Development.json b/Delete-By-Distinct/appsettings.Development.json index c0d6168..d00b7db 100644 --- a/Delete-By-Distinct/appsettings.Development.json +++ b/Delete-By-Distinct/appsettings.Development.json @@ -6,6 +6,7 @@ } }, "MaxDegreeOfParallelism": 6, + "RecycleOption": true, "SearchPattern": "*.*", "Serilog": { "MinimumLevel": "Debug" diff --git a/Delete-By-Distinct/appsettings.json b/Delete-By-Distinct/appsettings.json index 3041cc2..0e7c4db 100644 --- a/Delete-By-Distinct/appsettings.json +++ b/Delete-By-Distinct/appsettings.json @@ -11,6 +11,7 @@ } }, "MaxDegreeOfParallelism": 6, + "RecycleOption": false, "SearchPattern": "*.jpg", "Serilog": { "Using": [ diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index 7ee95bd..c011f2e 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -1044,6 +1044,8 @@ public partial class DlibDotNet { progressBar.Tick(); string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}"); + if (!Directory.Exists(aPropertySingletonDirectory)) + _ = Directory.CreateDirectory(aPropertySingletonDirectory); (t, containers) = Shared.Models.Stateless.Methods.IContainer.GetContainers(_Configuration.PropertyConfiguration, aPropertySingletonDirectory); progressBar.Tick(); } diff --git a/Rename/Rename.cs b/Rename/Rename.cs index 594f269..8135d68 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -114,7 +114,24 @@ public class Rename foreach (string file in files) { progressBar.Tick(); - fileHolder = new(file); + // else if (file.EndsWith(".del") && !file.Contains(".jpg")) + // { + // checkFile = string.Concat(file[..^4], ".jpg"); + // if (File.Exists(checkFile)) + // continue; + // File.Move(file, checkFile); + // continue; + // } + if (!file.EndsWith(".jpg.del")) + fileHolder = new(file); + else + { + checkFile = file[..^4]; + if (File.Exists(checkFile)) + continue; + File.Move(file, checkFile); + continue; + } if (fileHolder.ExtensionLowered == ".id" || fileHolder.DirectoryName is null) continue; if (files.Contains($"{fileHolder.FullName}.id")) @@ -127,8 +144,16 @@ public class Rename if (fileHolder.ExtensionLowered == jpeg) { if (File.Exists($"{fileHolder.FullName}.id")) - File.Move($"{fileHolder.FullName}.id", Path.Combine(fileHolder.DirectoryName, $"{fileHolder.NameWithoutExtension}{jpg}.id")); - File.Move(fileHolder.FullName, Path.Combine(fileHolder.DirectoryName, $"{fileHolder.NameWithoutExtension}{jpg}")); + { + checkFile = Path.Combine(fileHolder.DirectoryName, $"{fileHolder.NameWithoutExtension}{jpg}.id"); + if (File.Exists(checkFile)) + continue; + File.Move($"{fileHolder.FullName}.id", checkFile); + } + checkFile = Path.Combine(fileHolder.DirectoryName, $"{fileHolder.NameWithoutExtension}{jpg}"); + if (File.Exists(checkFile)) + continue; + File.Move(fileHolder.FullName, checkFile); } if (nameWithoutExtensionIsIdFormat) continue; diff --git a/Shared/Models/Stateless/Methods/XDirectory.cs b/Shared/Models/Stateless/Methods/XDirectory.cs index 8885c58..6e05cfa 100644 --- a/Shared/Models/Stateless/Methods/XDirectory.cs +++ b/Shared/Models/Stateless/Methods/XDirectory.cs @@ -38,7 +38,7 @@ internal abstract partial class XDirectory string[] directories = Directory.GetDirectories(directory, directorySearchFilter, SearchOption.TopDirectoryOnly); foreach (string innerDirectory in directories) results.Add(Directory.GetFiles(innerDirectory, fileSearchFilter, SearchOption.AllDirectories)); - int ceilingAverage = GetCeilingAverage(results); + int ceilingAverage = results.Any() ? GetCeilingAverage(results) : 0; results = GetFilesCollection(results, ceilingAverage); return results; } diff --git a/Tests/UnitTestResize.cs b/Tests/UnitTestResize.cs index 52ca590..ae50c5e 100644 --- a/Tests/UnitTestResize.cs +++ b/Tests/UnitTestResize.cs @@ -150,6 +150,8 @@ public class UnitTestResize _Logger.Information(_Configuration.ModelDirectory); A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory); string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}"); + if (!Directory.Exists(aPropertySingletonDirectory)) + _ = Directory.CreateDirectory(aPropertySingletonDirectory); (ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetTuple(_Configuration.OutputExtension, _Configuration.OutputQuality); B_Metadata metadata = new(_Configuration.PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory); _ = metadata.ToString(); diff --git a/TestsWithFaceRecognitionDotNet/UnitTestFace.cs b/TestsWithFaceRecognitionDotNet/UnitTestFace.cs index e22c58a..c427027 100644 --- a/TestsWithFaceRecognitionDotNet/UnitTestFace.cs +++ b/TestsWithFaceRecognitionDotNet/UnitTestFace.cs @@ -225,6 +225,8 @@ public class UnitTestFace _Logger.Information(_Configuration.ModelDirectory); A_Property propertyLogic = GetPropertyLogic(reverse, aResultsFullGroupDirectory); string aPropertySingletonDirectory = Path.Combine(aResultsFullGroupDirectory, "{}"); + if (!Directory.Exists(aPropertySingletonDirectory)) + _ = Directory.CreateDirectory(aPropertySingletonDirectory); (ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetTuple(_Configuration.OutputExtension, _Configuration.OutputQuality); B_Metadata metadata = new(_Configuration.PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory); _ = metadata.ToString();