using System.Collections.ObjectModel; using System.Text; using System.Text.Json; using View_by_Distance.Property.Models.Stateless; using View_by_Distance.Shared.Models; using View_by_Distance.Shared.Models.Properties; namespace View_by_Distance.Property.Models; public class A_Property { protected readonly List _ExceptionsDirectories; public bool Reverse { get; } public List ExceptionsDirectories => _ExceptionsDirectories; private readonly string _OutputExtension; private readonly int _MaxDegreeOfParallelism; private readonly ASCIIEncoding _ASCIIEncoding; private readonly Configuration _Configuration; private readonly List _AngleBracketCollection; private readonly IPropertyConfiguration _PropertyConfiguration; private readonly ReadOnlyDictionary>[] _ResultSingletonFileGroups; public A_Property(int maxDegreeOfParallelism, Configuration propertyConfiguration, string outputExtension, bool reverse, string aResultsFullGroupDirectory) { Reverse = reverse; _ExceptionsDirectories = []; _AngleBracketCollection = []; _OutputExtension = outputExtension; _ASCIIEncoding = new ASCIIEncoding(); _Configuration = propertyConfiguration; _PropertyConfiguration = propertyConfiguration; _MaxDegreeOfParallelism = maxDegreeOfParallelism; _ResultSingletonFileGroups = [new(new Dictionary>())]; ReadOnlyDictionary>> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(propertyConfiguration, aResultsFullGroupDirectory, [propertyConfiguration.ResultSingleton]); foreach (KeyValuePair>> keyValuePair in keyValuePairs) { if (keyValuePair.Key == _PropertyConfiguration.ResultSingleton) _ResultSingletonFileGroups[0] = keyValuePair.Value; else throw new Exception(); } } public override string ToString() { string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); return result; } public void SetAngleBracketCollection(string aResultsFullGroupDirectory, string sourceDirectory, bool anyNullOrNoIsUniqueFileName = true) { _AngleBracketCollection.Clear(); if (!anyNullOrNoIsUniqueFileName) _AngleBracketCollection.AddRange([Path.Combine(aResultsFullGroupDirectory, "<>")]); else _AngleBracketCollection.AddRange(IResult.GetDirectoryInfoCollection(_PropertyConfiguration, sourceDirectory, aResultsFullGroupDirectory, contentDescription: string.Empty, singletonDescription: "Properties for each image", collectionDescription: string.Empty, converted: false)); } private void SetAngleBracketCollection(string sourceDirectory, bool anyNullOrNoIsUniqueFileName) { _AngleBracketCollection.Clear(); string aResultsFullGroupDirectory = IResult.GetResultsFullGroupDirectory(_PropertyConfiguration, nameof(A_Property), string.Empty, includeResizeGroup: false, includeModel: false, includePredictorModel: false); SetAngleBracketCollection(aResultsFullGroupDirectory, sourceDirectory, anyNullOrNoIsUniqueFileName); } private static void MoveIf(string fileName, CombinedEnumAndIndex cei, string directory, FileInfo fileInfo) { string[] segments = directory.Split(cei.Combined); string? checkDirectory = segments.Length == 1 ? Path.Combine(segments[0], $"{cei.Combined[2..]}") : segments.Length == 2 ? $"{segments[0]}{cei.Combined[2..]}{segments[1]}" : null; if (checkDirectory is not null && Directory.Exists(checkDirectory)) { string checkFile = Path.Combine(checkDirectory, fileName); if (File.Exists(checkFile)) { File.Move(checkFile, fileInfo.FullName); fileInfo.Refresh(); } } } }