file-folder-helper/Helpers/HelperPackageFilesByDate.cs
Mike Phares 5fe51ef645 nuget bump
2023-11-02
2023-11-08
net8.0
editorconfig
NuGet NuSpec
Kanban
2023-11-14 07:54:34 -07:00

77 lines
3.4 KiB
C#

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;
List<DateTime> dateTimes = [];
string fileNameWithoutExtension;
string packageJsonDirectoryName;
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);
}
}
}
}