using System.Collections.ObjectModel; using System.Text.Json; using File_Folder_Helper.Models; using Microsoft.Extensions.Logging; namespace File_Folder_Helper.ADO2025.PI5; internal static partial class Helper20250429 { private record Record(string Directory, string File, bool FileExists); internal static void WriteNginxFileSystem(ILogger logger, List args) { string searchPattern = args[2]; string sourceDirectory = Path.GetFullPath(args[0]); ReadOnlyCollection subDirectories = GetSubDirectories(searchPattern, sourceDirectory); if (subDirectories.Count == 0) logger.LogWarning("<{results}>(s)", subDirectories.Count); else WriteNginxFileSystem(searchPattern, subDirectories); } private static ReadOnlyCollection GetSubDirectories(string searchPattern, string sourceDirectory) { List results = []; bool exists; Record record; string checkFile; string[] subDirectories; string[] directories = Directory.GetDirectories(sourceDirectory, "*", SearchOption.TopDirectoryOnly); foreach (string directory in directories) { subDirectories = Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly); foreach (string subDirectory in subDirectories) { checkFile = Path.Combine(subDirectory, $"{searchPattern.Split('*')[^1]}.json"); exists = File.Exists(checkFile); record = new(Directory: subDirectory, File: checkFile, FileExists: exists); results.Add(record); } } return results.OrderByDescending(l => l.FileExists).ToArray().AsReadOnly(); } private static void WriteNginxFileSystem(string searchPattern, ReadOnlyCollection subDirectories) { string lines; string result; string[] files; FileInfo fileInfo; List results = []; NginxFileSystem nginxFileSystem; foreach (Record record in subDirectories) { results.Clear(); files = Directory.GetFiles(record.Directory, searchPattern, SearchOption.AllDirectories); foreach (string file in files) { fileInfo = new(file); nginxFileSystem = new(Name: fileInfo.FullName, LastModified: null, MTime: fileInfo.LastWriteTime.ToUniversalTime().ToString(), URI: null, Type: "file", Length: fileInfo.Length); results.Add(JsonSerializer.Serialize(nginxFileSystem, NginxFileSystemSingleLineSourceGenerationContext.Default.NginxFileSystem)); } if (results.Count == 0) continue; result = $"[{Environment.NewLine}{string.Join($",{Environment.NewLine}", results)}{Environment.NewLine}]"; lines = !record.FileExists ? string.Empty : File.ReadAllText(record.File); if (result == lines) continue; File.WriteAllText(record.File, result); } } }