diff --git a/Helpers/HelperZipFilesByDate.cs b/Helpers/HelperZipFilesByDate.cs index 3f7ca79..d65c7c0 100644 --- a/Helpers/HelperZipFilesByDate.cs +++ b/Helpers/HelperZipFilesByDate.cs @@ -8,8 +8,9 @@ namespace File_Folder_Helper.Helpers; internal static class HelperZipFilesByDate { - internal static void ZipFilesByDate(ILogger log, string sourceDirectory, SearchOption searchOption = SearchOption.TopDirectoryOnly, string dayFormat = "") + internal static bool ZipFilesByDate(ILogger log, string sourceDirectory, SearchOption searchOption = SearchOption.TopDirectoryOnly, string dayFormat = "") { + bool result = false; string key; bool addFile; string? zipPath; @@ -137,7 +138,11 @@ internal static class HelperZipFilesByDate if (weeks.TryGetValue(fileName, out DateTime value)) { try - { File.SetLastWriteTime(subFile, value); } + { + if (!result) + result = true; + File.SetLastWriteTime(subFile, value); + } catch (Exception) { } } } @@ -147,22 +152,110 @@ internal static class HelperZipFilesByDate { _ = HelperDeleteEmptyDirectories.DeleteEmptyDirectories(topDirectory); } catch (Exception) { } } - log.LogInformation(topDirectory); + log.LogInformation("{topDirectory}", topDirectory); } + return result; } - internal static void SetDateFromZipEntry(ILogger log, string sourceDirectory, SearchOption searchOption = SearchOption.AllDirectories) + private static bool SetDateFromZipEntry(ILogger log, string[] zipFiles, string keyFile, string keyFileB, string keyFileC) { + bool result = false; string[] files; + string checkFile; + FileInfo fileInfo; + string? zipDirectory; + DateTimeOffset? dateTimeOffset; + foreach (string zipFile in zipFiles) + { + try + { + dateTimeOffset = null; + fileInfo = new(zipFile); + using ZipArchive zip = ZipFile.Open(zipFile, ZipArchiveMode.Read); + foreach (ZipArchiveEntry zipArchiveEntry in zip.Entries) + { + if (!zipArchiveEntry.Name.EndsWith(keyFile)) + continue; + dateTimeOffset = zipArchiveEntry.LastWriteTime; + break; + } + zipDirectory = Path.GetDirectoryName(zipFile); + if (dateTimeOffset is null || zipDirectory is null) + continue; + if (fileInfo.LastWriteTime != dateTimeOffset.Value.LocalDateTime) + { + File.SetLastWriteTime(fileInfo.FullName, dateTimeOffset.Value.LocalDateTime); + if (!result) + result = true; + } + files = Directory.GetFiles(zipDirectory, $"*{keyFile}", SearchOption.TopDirectoryOnly); + foreach (string file in files) + { + fileInfo = new(file); + if (fileInfo.LastWriteTime != dateTimeOffset.Value.LocalDateTime) + { + File.SetLastWriteTime(fileInfo.FullName, dateTimeOffset.Value.LocalDateTime); + if (!result) + result = true; + } + } + if (string.IsNullOrEmpty(keyFileB)) + continue; + files = Directory.GetFiles(zipDirectory, keyFileB, SearchOption.TopDirectoryOnly); + foreach (string file in files) + { + fileInfo = new(file); + if (fileInfo.LastWriteTime != dateTimeOffset.Value.LocalDateTime) + { + File.SetLastWriteTime(fileInfo.FullName, dateTimeOffset.Value.LocalDateTime); + if (!result) + result = true; + } + } + if (string.IsNullOrEmpty(keyFileC)) + continue; + files = Directory.GetFiles(zipDirectory, keyFileC, SearchOption.TopDirectoryOnly); + foreach (string file in files) + { + fileInfo = new(file); + if (fileInfo.LastWriteTime != dateTimeOffset.Value.LocalDateTime) + { + File.SetLastWriteTime(fileInfo.FullName, dateTimeOffset.Value.LocalDateTime); + if (!result) + result = true; + } + } + } + catch (Exception) + { + log.LogInformation("<{zipFile}> is invalid!", zipFile); + checkFile = string.Concat(zipFile, ".err"); + for (int e = 0; e < short.MaxValue; e++) + { + if (!File.Exists(checkFile)) + break; + checkFile = string.Concat(checkFile, e); + } + try + { File.Move(zipFile, checkFile); } + catch (Exception) { log.LogInformation("<{zipFile}> couldn't be moved!", zipFile); } + } + } + return result; + } + + internal static bool SetDateFromZipEntryForNuspec(ILogger log, string[] files) => + SetDateFromZipEntry(log, files, ".nuspec", "icon", "readme"); + + internal static bool SetDateFromZipEntry(ILogger log, string sourceDirectory, SearchOption searchOption = SearchOption.AllDirectories) + { + bool result = false; + bool loop; string keyFile; string keyFileB; string keyFileC; - string checkFile; - FileInfo fileInfo; string[] zipFiles; string searchPattern; - string? zipDirectory; - DateTimeOffset? dateTimeOffset; if (!Directory.Exists(sourceDirectory)) _ = Directory.CreateDirectory(sourceDirectory); for (int i = 1; i < 3; i++) @@ -174,67 +267,11 @@ internal static class HelperZipFilesByDate _ => throw new NotSupportedException() }; zipFiles = Directory.GetFiles(sourceDirectory, searchPattern, searchOption); - foreach (string zipFile in zipFiles) - { - try - { - dateTimeOffset = null; - fileInfo = new(zipFile); - using ZipArchive zip = ZipFile.Open(zipFile, ZipArchiveMode.Read); - foreach (ZipArchiveEntry zipArchiveEntry in zip.Entries) - { - if (!zipArchiveEntry.Name.EndsWith(keyFile)) - continue; - dateTimeOffset = zipArchiveEntry.LastWriteTime; - break; - } - zipDirectory = Path.GetDirectoryName(zipFile); - if (dateTimeOffset is null || zipDirectory is null) - continue; - if (fileInfo.LastWriteTime != dateTimeOffset.Value.LocalDateTime) - File.SetLastWriteTime(fileInfo.FullName, dateTimeOffset.Value.LocalDateTime); - files = Directory.GetFiles(zipDirectory, $"*{keyFile}", SearchOption.TopDirectoryOnly); - foreach (string file in files) - { - fileInfo = new(file); - if (fileInfo.LastWriteTime != dateTimeOffset.Value.LocalDateTime) - File.SetLastWriteTime(fileInfo.FullName, dateTimeOffset.Value.LocalDateTime); - } - if (string.IsNullOrEmpty(keyFileB)) - continue; - files = Directory.GetFiles(zipDirectory, keyFileB, SearchOption.TopDirectoryOnly); - foreach (string file in files) - { - fileInfo = new(file); - if (fileInfo.LastWriteTime != dateTimeOffset.Value.LocalDateTime) - File.SetLastWriteTime(fileInfo.FullName, dateTimeOffset.Value.LocalDateTime); - } - if (string.IsNullOrEmpty(keyFileC)) - continue; - files = Directory.GetFiles(zipDirectory, keyFileC, SearchOption.TopDirectoryOnly); - foreach (string file in files) - { - fileInfo = new(file); - if (fileInfo.LastWriteTime != dateTimeOffset.Value.LocalDateTime) - File.SetLastWriteTime(fileInfo.FullName, dateTimeOffset.Value.LocalDateTime); - } - } - catch (Exception) - { - log.LogInformation($"<{zipFile}> is invalid!"); - checkFile = string.Concat(zipFile, ".err"); - for (int e = 0; e < short.MaxValue; e++) - { - if (!File.Exists(checkFile)) - break; - checkFile = string.Concat(checkFile, e); - } - try - { File.Move(zipFile, checkFile); } - catch (Exception) { log.LogInformation($"<{zipFile}> couldn't be moved!"); } - } - } + loop = SetDateFromZipEntry(log, zipFiles, keyFile, keyFileB, keyFileC); + if (loop && !result) + result = true; } + return result; } } \ No newline at end of file diff --git a/Worker.cs b/Worker.cs index d4b580a..8a3d98a 100644 --- a/Worker.cs +++ b/Worker.cs @@ -144,7 +144,7 @@ public class Worker : BackgroundService Helpers.HelperRenameToOldMoveDeleteOldMerge.RenameToOldMoveDeleteOld(_Logger, _Args[0]); break; case ConsoleKey.S: - Helpers.HelperZipFilesByDate.SetDateFromZipEntry(_Logger, _Args[0]); + _ = Helpers.HelperZipFilesByDate.SetDateFromZipEntry(_Logger, _Args[0]); break; case ConsoleKey.T: Helpers.HelperTooLong.TooLong(_Args[0], delete: false); @@ -154,7 +154,7 @@ public class Worker : BackgroundService Helpers.HelperMarkdown.MarkdownConvertLinksForHugo(_AppSettings, _Logger, _Args); break; case ConsoleKey.Z: - Helpers.HelperZipFilesByDate.ZipFilesByDate(_Logger, _Args[0]); + _ = Helpers.HelperZipFilesByDate.ZipFilesByDate(_Logger, _Args[0]); break; default: switch (consoleKey)