diff --git a/ADO2024/PI4/Helper-2024-12-17.cs b/ADO2024/PI4/Helper-2024-12-17.cs index 6bcf1ff..df0af8f 100644 --- a/ADO2024/PI4/Helper-2024-12-17.cs +++ b/ADO2024/PI4/Helper-2024-12-17.cs @@ -57,6 +57,7 @@ internal static partial class Helper20241217 string asidePath; bool areTheyTheSame; string directoryName; + IEnumerable records; logger.LogInformation(args[0]); logger.LogInformation(args[1]); logger.LogInformation(args[2]); @@ -64,6 +65,7 @@ internal static partial class Helper20241217 logger.LogInformation(args[4]); ReadOnlyCollection files; string searchPattern = args[2]; + IEnumerable searchPatternFiles; string[] ignoreFileNames = args[3].Split('~'); string destination = Path.GetFullPath(args[4]); string sourceDirectory = Path.GetFullPath(args[0]); @@ -71,37 +73,44 @@ internal static partial class Helper20241217 logger.LogInformation("Searching <{sourceDirectory}> with search pattern {searchPattern}", args[0], searchPattern); if (Debugger.IsAttached) Verify(searchPattern, ignoreFileNames); - IEnumerable records = GetRecords(sourceDirectory, searchPattern); - foreach (Record record in records) + for (int i = 1; i < 3; i++) { - if (record.Job is null || string.IsNullOrEmpty(record.Job.Extension)) - continue; - logger.LogInformation("Searching <{directory}>", record.Directory); - files = GetFiles(searchPattern, ignoreFileNames, record); - jobNew = GetJob(searchPattern, ignoreFileNames, record, files); - json = JsonSerializer.Serialize(jobNew, JobSourceGenerationContext.Default.Job); - areTheyTheSame = GetAreTheyTheSame(logger, searchPattern, ignoreFileNames, record, jobNew); - if (areTheyTheSame) + if (i == 1) { - WriteAllText(record.Path, json); - continue; + searchPatternFiles = Directory.EnumerateFiles(sourceDirectory, searchPattern, new EnumerationOptions { IgnoreInaccessible = true, RecurseSubdirectories = true }); + } + else if (i == 2) + { + searchPatternFiles = Directory.GetFiles(sourceDirectory, searchPattern, SearchOption.AllDirectories); + } + else + throw new NotImplementedException(); + records = GetRecords(sourceDirectory, searchPatternFiles); + foreach (Record record in records) + { + if (record.Job is null || string.IsNullOrEmpty(record.Job.Extension)) + continue; + logger.LogInformation("Searching <{directory}>", record.Directory); + files = GetFiles(searchPattern, ignoreFileNames, record); + jobNew = GetJob(searchPattern, ignoreFileNames, record, files); + json = JsonSerializer.Serialize(jobNew, JobSourceGenerationContext.Default.Job); + areTheyTheSame = GetAreTheyTheSame(logger, searchPattern, ignoreFileNames, record, jobNew); + if (areTheyTheSame) + { + WriteAllText(record.Path, json); + continue; + } + directoryName = Path.GetFileName(record.Directory); + asidePath = Path.Combine(record.Directory, $"{directoryName}-{DateTime.Now:yyyy-MM-dd-HH-mm-ss-fff}{record.Job.Extension}"); + path = $"{destinationDriveLetter}{asidePath[1..]}"; + logger.LogInformation("Writing <{path}> extension", path); + WritePassedExtension(record, files, directoryName, path); + logger.LogInformation("Wrote <{path}> extension", path); + MovePassedExtension(destination, path); + logger.LogInformation("Moved <{path}> extension", path); + WriteAllText(record.Path, json); + Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, $"{destinationDriveLetter}{record.Directory[1..]}"); } - directoryName = Path.GetFileName(record.Directory); - asidePath = Path.Combine(record.Directory, $"{directoryName}-{DateTime.Now:yyyy-MM-dd-HH-mm-ss-fff}{record.Job.Extension}"); - path = $"{destinationDriveLetter}{asidePath[1..]}"; - logger.LogInformation("Writing <{path}> extension", path); - WritePassedExtension(record, files, directoryName, path); - logger.LogInformation("Wrote <{path}> extension", path); - MovePassedExtension(destination, path); - logger.LogInformation("Moved <{path}> extension", path); - WriteAllText(record.Path, json); - Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, $"{destinationDriveLetter}{record.Directory[1..]}"); - } - if (Debugger.IsAttached && records.Count() == 0) - { - files = GetFiles(sourceDirectory, searchPattern, ignoreFileNames); - json = JsonSerializer.Serialize(files.ToArray(), FilesSourceGenerationContext.Default.FileArray); - WriteAllText(Path.Combine(Environment.CurrentDirectory, ".vscode", "helper", ".json"), json); } } @@ -150,14 +159,13 @@ internal static partial class Helper20241217 return results.AsReadOnly(); } - private static IEnumerable GetRecords(string directory, string searchPattern) + private static IEnumerable GetRecords(string directory, IEnumerable files) { Job? job; string json; Record record; string fileName; string directoryName; - IEnumerable files = Directory.EnumerateFiles(directory, searchPattern, new EnumerationOptions { IgnoreInaccessible = true, RecurseSubdirectories = true }); foreach (string file in files) { fileName = Path.GetFileName(file);