diff --git a/Helpers/HelperSaveOrCopyContents.cs b/Helpers/HelperSaveOrCopyContents.cs index 0e63505..280429b 100644 --- a/Helpers/HelperSaveOrCopyContents.cs +++ b/Helpers/HelperSaveOrCopyContents.cs @@ -6,6 +6,45 @@ namespace File_Folder_Helper.Helpers; internal static class HelperSaveOrCopyContents { + private record TicksDirectory(string Directory, + string DirectoryName, + long DirectoryTicks, + float? TotalDays); + + private static List UpdateDateVerifyAndGetTicksDirectories(string directory) + { + List results = new(); + float? totalDays; + string ticksDirectoryName; + DirectoryInfo directoryInfo; + long? lastDirectoryTicks = null; + DateTime dateTime = DateTime.Now; + string[] ticksDirectories = Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly); + foreach (string ticksDirectory in ticksDirectories) + { + ticksDirectoryName = Path.GetFileName(ticksDirectory); + if (ticksDirectoryName.Length < 3 || ticksDirectoryName.First() != '(' || ticksDirectoryName[^1] != ')') + continue; + if (!long.TryParse(ticksDirectoryName[1..^1], out long directoryTicks)) + { + if (!long.TryParse(ticksDirectoryName[1..^4], out directoryTicks)) + throw new NotSupportedException(); + } + directoryInfo = new(ticksDirectory); + if (directoryInfo.CreationTime.Ticks != directoryTicks) + Directory.SetCreationTime(ticksDirectory, new DateTime(directoryTicks)); + if (directoryInfo.LastWriteTime.Ticks != directoryTicks) + Directory.SetLastWriteTime(ticksDirectory, new DateTime(directoryTicks)); + totalDays = lastDirectoryTicks is null || new TimeSpan(dateTime.Ticks - directoryTicks).TotalDays < 1 ? null : (float)new TimeSpan(directoryTicks - lastDirectoryTicks.Value).TotalDays; + results.Add(new(ticksDirectory, ticksDirectoryName, directoryTicks, totalDays)); + lastDirectoryTicks = directoryTicks; + } + string[] compare = (from l in results where l.TotalDays is not null and < 3.95f select l.Directory).ToArray(); + if (compare.Any()) + throw new Exception($"Please Consolidate <{string.Join(Environment.NewLine, compare)}>"); + return results; + } + internal static void SaveOrCopyContents(ILogger log, string argsZero, ConsoleKey consoleKey) { SearchOption searchOption; @@ -50,7 +89,7 @@ internal static class HelperSaveOrCopyContents } log.LogInformation("D) Directory, F) File or B) Both?"); ConsoleKey dfb = Console.ReadKey().Key; - log.LogInformation(string.Empty); + log.LogInformation("{empty}", string.Empty); if (dfb is not ConsoleKey.D and not ConsoleKey.F and not ConsoleKey.B) throw new Exception("Not valid"); else @@ -89,6 +128,8 @@ internal static class HelperSaveOrCopyContents _ = data.AppendLine(s); } } + if (clipboardTopDirectoryOnly && consoleKey == ConsoleKey.C) + _ = UpdateDateVerifyAndGetTicksDirectories(argsZero); } else if (alongSideAllDirectories) { @@ -160,7 +201,7 @@ internal static class HelperSaveOrCopyContents throw new Exception(); } TimeSpan timeSpan = new(DateTime.Now.Ticks - now); - log.LogInformation(string.Concat(timeSpan.TotalSeconds, " TotalSeconds")); + log.LogInformation("{TotalSeconds} TotalSeconds", timeSpan.TotalSeconds); if (alongSideTopDirectoryOnly) { File.WriteAllText(filePathAndName, data.ToString());