77 lines
3.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
} |