using Microsoft.Extensions.Logging; using System.Collections.ObjectModel; using System.Text.Json; using System.Text.Json.Serialization; namespace File_Folder_Helper.ADO2024.PI3; internal static partial class Helper20240925 { private record Test(string Name, long Value); [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(ReadOnlyCollection))] private partial class TestCollectionSourceGenerationContext : JsonSerializerContext { } private static ReadOnlyCollection GetTests(string sourceDirectory, string searchPattern, string searchPatternB) { List results = []; long test; string[] lines; string[] segments; string[] segmentsB; List distinct = []; string[] files = Directory.GetFiles(sourceDirectory, searchPattern, SearchOption.AllDirectories); foreach (string file in files) { lines = File.ReadAllLines(file); foreach (string line in lines) { segments = line.Split(searchPatternB); if (segments.Length < 2) continue; segmentsB = segments[1].Split(','); if (segmentsB.Length < 2) continue; if (!long.TryParse(segmentsB[0], out test)) continue; if (distinct.Contains(test)) continue; distinct.Add(test); results.Add(new(segmentsB[1].Trim('"'), test)); } } return (from l in results orderby l.Name.Length, l.Name select l).ToArray().AsReadOnly(); } internal static void DistinctTests(ILogger logger, List args) { string searchPattern = args[2]; string searchPatternB = args[3]; string destinationDirectory = args[4]; string sourceDirectory = Path.GetFullPath(args[0]); if (!Directory.Exists(destinationDirectory)) _ = Directory.CreateDirectory(destinationDirectory); ReadOnlyCollection tests = GetTests(sourceDirectory, searchPattern, searchPatternB); logger.LogInformation("Found {files} file(s)", tests.Count); string json = JsonSerializer.Serialize(tests, TestCollectionSourceGenerationContext.Default.ReadOnlyCollectionTest); string fileName = Path.Combine(destinationDirectory, ".json"); File.WriteAllText(fileName, json); } }