using File_Folder_Helper.Models; using Microsoft.Extensions.Logging; using System.Text.Json; namespace File_Folder_Helper.Helpers; internal static class HelperPackageFilesByDate { internal static void SetDateFromJsonEntry(ILogger log, string sourceDirectory, SearchOption searchOption = SearchOption.AllDirectories) { string json; DateTime dateTime; FileInfo fileInfo; string[] segments; string[] tgzFiles; PackageJson? packageJson; string[] packageJsonFiles; string? packageJsonDirectory; string fileNameWithoutExtension; string packageJsonDirectoryName; List dateTimes = new(); if (log is null) throw new NullReferenceException(); if (!Directory.Exists(sourceDirectory)) _ = Directory.CreateDirectory(sourceDirectory); for (int i = 1; i < 2; i++) { packageJsonFiles = Directory.GetFiles(sourceDirectory, "package.json", searchOption); foreach (string packageJsonFile in packageJsonFiles) { packageJsonDirectory = Path.GetDirectoryName(packageJsonFile); if (string.IsNullOrEmpty(packageJsonDirectory)) continue; json = File.ReadAllText(packageJsonFile); packageJson = JsonSerializer.Deserialize(json, PackageJsonSourceGenerationContext.Default.PackageJson); if (packageJson is null || packageJson.Times.Count == 0) continue; packageJsonDirectoryName = Path.GetFileName(packageJsonDirectory); tgzFiles = Directory.GetFiles(packageJsonDirectory, "*.tgz", SearchOption.TopDirectoryOnly); foreach (string tgzFile in tgzFiles) { dateTimes.Clear(); fileNameWithoutExtension = Path.GetFileNameWithoutExtension(tgzFile); segments = fileNameWithoutExtension.Split('-'); foreach (string segment in segments) { if (!packageJson.Times.TryGetValue(segment, out dateTime)) continue; dateTimes.Add(dateTime); fileInfo = new(tgzFile); if (fileInfo.LastWriteTime != dateTime) File.SetLastWriteTime(fileInfo.FullName, dateTime); } if (dateTimes.Count == 0) { if (fileNameWithoutExtension.Length + 1 < packageJsonDirectoryName.Length) continue; if (!packageJson.Times.TryGetValue(fileNameWithoutExtension[(packageJsonDirectoryName.Length + 1)..], out dateTime)) continue; dateTimes.Add(dateTime); fileInfo = new(tgzFile); if (fileInfo.LastWriteTime != dateTime) File.SetLastWriteTime(fileInfo.FullName, dateTime); } } if (dateTimes.Count == 0) continue; dateTime = dateTimes.Max(); fileInfo = new(packageJsonFile); if (fileInfo.LastWriteTime != dateTime) File.SetLastWriteTime(fileInfo.FullName, dateTime); } } } }