72 lines
3.2 KiB
C#
72 lines
3.2 KiB
C#
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<Worker> logger, List<string> args) {
|
|
string searchPattern = args[2];
|
|
string sourceDirectory = Path.GetFullPath(args[0]);
|
|
ReadOnlyCollection<Record> subDirectories = GetSubDirectories(searchPattern, sourceDirectory);
|
|
if (subDirectories.Count == 0)
|
|
logger.LogWarning("<{results}>(s)", subDirectories.Count);
|
|
else
|
|
WriteNginxFileSystem(searchPattern, subDirectories);
|
|
}
|
|
|
|
private static ReadOnlyCollection<Record> GetSubDirectories(string searchPattern, string sourceDirectory) {
|
|
List<Record> 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<Record> subDirectories) {
|
|
string lines;
|
|
string result;
|
|
string[] files;
|
|
FileInfo fileInfo;
|
|
List<string> 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);
|
|
}
|
|
}
|
|
} |