Files
.vscode
ADO2024
ADO2025
Day
Helpers
Exif
HelperCreateNoteFiles.cs
HelperDeleteEmptyDirectories.cs
HelperDirectory.cs
HelperFindReplace.cs
HelperGenealogicalDataCommunication.cs
HelperGit.cs
HelperILMerge.cs
HelperKanbanMetadata.cs
HelperLogMerge.cs
HelperMarkdown.cs
HelperNPM.cs
HelperPackageFilesByDate.cs
HelperPdfStripperWrapper.cs
HelperRenameToOldMoveDeleteOld.cs
HelperSaveOrCopyContents.cs
HelperStart.cs
HelperTooLong.cs
HelperZipFilesBy.cs
RijndaelEncryption.cs
Models
Scripts
Server-Management
.editorconfig
.gitignore
.prettierignore
Dockerfile
File-Folder-Helper.csproj
Program.cs
README.md
Worker.cs
docker-compose.yaml
global.json
package-lock.json
package.json
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);
}
}
}
}