From 9dd218a5f21a8baaf8ede069774a468febb5fd6b Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Tue, 17 Jan 2023 18:18:11 -0700 Subject: [PATCH] CopyTo --- .../appsettings.Development.json | 5 +- Rename/Models/AppSettings.cs | 4 +- Rename/Models/Binder/AppSettings.cs | 2 + Rename/Rename.cs | 82 +++++++++++++------ Rename/appsettings.Development.json | 3 +- Shared/Models/Stateless/Methods/Property.cs | 1 + 6 files changed, 69 insertions(+), 28 deletions(-) diff --git a/Delete-By-Distinct/appsettings.Development.json b/Delete-By-Distinct/appsettings.Development.json index d00b7db..a5ab295 100644 --- a/Delete-By-Distinct/appsettings.Development.json +++ b/Delete-By-Distinct/appsettings.Development.json @@ -1,5 +1,5 @@ { - "CompareRootDirectory": "D:/7) Question/- - - Images", + "CompareRootDirectory": "D:/7) Question/- - - Images - 2023-01-12/fa60aa45ebb55fe3ee0ce4da8a64e40611e7d5ce", "Logging": { "LogLevel": { "Log4netProvider": "Debug" @@ -15,9 +15,10 @@ "Configuration": { "xRootDirectory": "D:/2) Images B/Corrupt", "xxRootDirectory": "D:/2) Images B/Not-Copy-Copy-45f4401", - "RootDirectory": "D:/1) Images A/Images-45f4401", + "xxxRootDirectory": "D:/1) Images A/Images-45f4401", "xxxxRootDirectory": "E:/3) Videos A/Device Videos 2_0_0_3 - Current", "xxxxxRootDirectory": "E:/4) Videos B/Device Videos 2_0_0_3 - Current - Ignore", + "RootDirectory": "C:/1) Images A/Images-45f4401", "VerifyToSeason": [] } } diff --git a/Rename/Models/AppSettings.cs b/Rename/Models/AppSettings.cs index 1fa7d89..dd67091 100644 --- a/Rename/Models/AppSettings.cs +++ b/Rename/Models/AppSettings.cs @@ -7,14 +7,16 @@ public class AppSettings { public string Company { init; get; } + public string CopyTo { init; get; } public string ComparePathsFile { init; get; } public int MaxDegreeOfParallelism { init; get; } public string WorkingDirectoryName { init; get; } [JsonConstructor] - public AppSettings(string company, string comparePathsFile, int maxDegreeOfParallelism, string workingDirectoryName) + public AppSettings(string company, string copyTo, string comparePathsFile, int maxDegreeOfParallelism, string workingDirectoryName) { Company = company; + CopyTo = copyTo; ComparePathsFile = comparePathsFile; MaxDegreeOfParallelism = maxDegreeOfParallelism; WorkingDirectoryName = workingDirectoryName; diff --git a/Rename/Models/Binder/AppSettings.cs b/Rename/Models/Binder/AppSettings.cs index d98f86f..67c81c0 100644 --- a/Rename/Models/Binder/AppSettings.cs +++ b/Rename/Models/Binder/AppSettings.cs @@ -9,6 +9,7 @@ public class AppSettings #nullable disable public string Company { get; set; } + public string CopyTo { get; set; } public string ComparePathsFile { get; set; } public int? MaxDegreeOfParallelism { get; set; } public string WorkingDirectoryName { get; set; } @@ -28,6 +29,7 @@ public class AppSettings throw new NullReferenceException(nameof(appSettings.MaxDegreeOfParallelism)); result = new( appSettings.Company, + appSettings.CopyTo, appSettings.ComparePathsFile, appSettings.MaxDegreeOfParallelism.Value, appSettings.WorkingDirectoryName diff --git a/Rename/Rename.cs b/Rename/Rename.cs index 8135d68..4b0c32b 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -92,7 +92,7 @@ public class Rename } } - private (List<(FileHolder, string)>, int) RenameFilesInDirectory(ProgressBar progressBar, string[] files) + private List<(FileHolder, string)> GetRenameCollection(ProgressBar progressBar, string[] files) { List<(FileHolder, string)> results = new(); int? id; @@ -109,27 +109,25 @@ public class Rename const string jpeg = ".jpeg"; bool isValidImageFormatExtension; bool nameWithoutExtensionIsIdFormat; - List distinctCollection = new(); IReadOnlyList directories; 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); + // results.Add(new(fileHolder, checkFile)); // continue; // } - if (!file.EndsWith(".jpg.del")) - fileHolder = new(file); - else + if (file.EndsWith(".jpg.del")) { checkFile = file[..^4]; if (File.Exists(checkFile)) continue; - File.Move(file, checkFile); + results.Add(new(fileHolder, checkFile)); continue; } if (fileHolder.ExtensionLowered == ".id" || fileHolder.DirectoryName is null) @@ -148,12 +146,12 @@ public class Rename checkFile = Path.Combine(fileHolder.DirectoryName, $"{fileHolder.NameWithoutExtension}{jpg}.id"); if (File.Exists(checkFile)) continue; - File.Move($"{fileHolder.FullName}.id", checkFile); + results.Add(new(new($"{fileHolder.FullName}.id"), checkFile)); } checkFile = Path.Combine(fileHolder.DirectoryName, $"{fileHolder.NameWithoutExtension}{jpg}"); if (File.Exists(checkFile)) continue; - File.Move(fileHolder.FullName, checkFile); + results.Add(new(fileHolder, checkFile)); } if (nameWithoutExtensionIsIdFormat) continue; @@ -178,15 +176,12 @@ public class Rename dateTime = Metadata.Models.Stateless.Methods.IMetadata.GetMinimumDateTime(dateTimes, year, directories); timeSpan = new TimeSpan(int.MaxValue); } - if (dateTime is not null && timeSpan.TotalMinutes > 2) + if (dateTime is not null && string.IsNullOrEmpty(_AppSettings.CopyTo) && timeSpan.TotalMinutes > 2) { checkFileExtension = fileHolder.ExtensionLowered == jpeg ? jpg : fileHolder.ExtensionLowered; checkFile = Path.Combine(fileHolder.DirectoryName, $"{dateTime.Value:yyyy-MM-dd}.{dateTime.Value.Ticks}.{fileHolder.Length}{checkFileExtension}"); if (checkFile == fileHolder.FullName) continue; - if (distinctCollection.Contains(checkFile)) - continue; - distinctCollection.Add(checkFile); results.Add(new(fileHolder, checkFile)); continue; } @@ -202,12 +197,9 @@ public class Rename if (File.Exists(checkFile)) continue; } - if (distinctCollection.Contains(checkFile)) - continue; - distinctCollection.Add(checkFile); results.Add(new(fileHolder, checkFile)); } - return new(results, distinctCollection.Count); + return results; } private static void Rename2000(MatchNginx[] matchNginxCollection) @@ -269,6 +261,34 @@ public class Rename return allFiles; } + private static void CreateDirectories(List directories) + { + foreach (string directory in directories) + { + if (Directory.Exists(directory)) + continue; + _ = Directory.CreateDirectory(directory); + } + } + + private void CopyInstead(List<(FileHolder, string)> renameCollection) + { + string? directory; + List distinctDirectories = new(); + foreach ((FileHolder fileHolder, string to) in renameCollection) + { + directory = Path.GetDirectoryName($"{_AppSettings.CopyTo}{to[1..]}"); + if (directory is null) + continue; + if (distinctDirectories.Contains(directory)) + continue; + distinctDirectories.Add(directory); + } + CreateDirectories(distinctDirectories); + foreach ((FileHolder fileHolder, string to) in renameCollection) + File.Copy(fileHolder.FullName, $"{_AppSettings.CopyTo}{to[1..]}"); + } + private List RenameFilesInDirectories(ProgressBarOptions options, MatchNginx[] matchNginxCollection) { List results = new(); @@ -276,6 +296,7 @@ public class Rename string message; int distinctCount; ProgressBar progressBar; + List distinctCollection = new(); List<(FileHolder, string)> renameCollection; List allFiles = GetAllFiles(matchNginxCollection); for (int i = 1; i < 3; i++) @@ -285,16 +306,29 @@ public class Rename progressBar = new(files.Length, message, options); if (!files.Any()) continue; - (renameCollection, distinctCount) = RenameFilesInDirectory(progressBar, files); + distinctCollection.Clear(); + renameCollection = GetRenameCollection(progressBar, files); foreach ((FileHolder fileHolder, string to) in renameCollection) { - results.Add(fileHolder.NameWithoutExtension); - if (renameCollection.Count != distinctCount) + if (distinctCollection.Contains(to)) continue; - if (File.Exists(to)) - continue; - File.Move(fileHolder.FullName, to); - File.WriteAllText($"{to}.id", $"{to}{Environment.NewLine}{fileHolder.FullName}"); + distinctCollection.Add(to); + } + distinctCount = distinctCollection.Count; + if (renameCollection.Count != distinctCount) + continue; + if (!string.IsNullOrEmpty(_AppSettings.CopyTo)) + CopyInstead(renameCollection); + else + { + foreach ((FileHolder fileHolder, string to) in renameCollection) + { + results.Add(fileHolder.NameWithoutExtension); + if (File.Exists(to)) + continue; + File.Move(fileHolder.FullName, to); + File.WriteAllText($"{to}.id", $"{to}{Environment.NewLine}{fileHolder.FullName}"); + } } progressBar.Dispose(); } diff --git a/Rename/appsettings.Development.json b/Rename/appsettings.Development.json index aea16aa..d332fd4 100644 --- a/Rename/appsettings.Development.json +++ b/Rename/appsettings.Development.json @@ -1,5 +1,6 @@ { - "ComparePathsFile": "C:/Users/mikep/AppData/Local/PharesApps/Drag-Drop-Explorer/2023_02/638089737585839769.json", + "ComparePathsFile": "C:/Users/mikep/AppData/Local/PharesApps/Drag-Drop-Explorer/2023_03/638095753937985087.json", + "CopyTo": "C", "Logging": { "LogLevel": { "Log4netProvider": "Debug" diff --git a/Shared/Models/Stateless/Methods/Property.cs b/Shared/Models/Stateless/Methods/Property.cs index afb2921..0390e37 100644 --- a/Shared/Models/Stateless/Methods/Property.cs +++ b/Shared/Models/Stateless/Methods/Property.cs @@ -107,6 +107,7 @@ internal abstract class Property new string[] { string.Empty, "yyyyMMdd_", ticksExample }, new string[] { string.Empty, "yyyy-MM-dd_", ticksExample }, new string[] { string.Empty, "yyyy-MM-dd.", ticksExample }, + new string[] { string.Empty, "yyyy-MM-dd.", $"{ticksExample}.{fileHolder.Length}" }, new string[] { string.Empty, "yyyy-MM-dd HH.mm.ss", string.Empty }, new string[] { string.Empty, "yyyyMMdd_HHmmss", "_LLS" }, new string[] { string.Empty, "yyyyMMdd_HHmmss", "_HDR" },