2022-12-16 11:26:00 -07:00

658 lines
39 KiB
C#

// using Microsoft.Extensions.Configuration;
// using Phares.Shared;
// using System.Text.Json;
// using System.Text.RegularExpressions;
// using View_by_Distance.PrepareForOld.Models;
// using View_by_Distance.Shared.Models.Methods;
// namespace View_by_Distance.PrepareForOld;
// public class PrepareForOld
// {
// private readonly Serilog.ILogger? _Log;
// private readonly AppSettings _AppSettings;
// private readonly List<string> _Exceptions;
// private readonly IsEnvironment _IsEnvironment;
// private readonly Configuration _Configuration;
// private readonly List<KeyValuePair<string, string>> _FileKeyValuePairs;
// private readonly List<(string Find, string Replace)> _SpellingFindReplace;
// private readonly Dictionary<string, List<Tuple<string, Shared.Models.Property>>> _FilePropertiesKeyValuePairs;
// public PrepareForOld(List<string> args, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console)
// {
// if (isSilent)
// { }
// if (console is null)
// { }
// string spellingA;
// string spellingB;
// _AppSettings = appSettings;
// _SpellingFindReplace = new();
// _IsEnvironment = isEnvironment;
// _Exceptions = new List<string>();
// _Log = Serilog.Log.ForContext<PrepareForOld>();
// _FileKeyValuePairs = new List<KeyValuePair<string, string>>();
// _FilePropertiesKeyValuePairs = new Dictionary<string, List<Tuple<string, Shared.Models.Property>>>();
// Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);
// Property.Models.Configuration.Verify(propertyConfiguration, requireExist: true);
// Configuration configuration = Models.Stateless.Configuration.Get(isEnvironment, configurationRoot, workingDirectory, propertyConfiguration);
// Verify(configuration);
// if (propertyConfiguration.IgnoreExtensions is null)
// throw new NullReferenceException(nameof(propertyConfiguration.IgnoreExtensions));
// for (int i = 0; i < configuration.Spelling.Length; i++)
// {
// spellingA = configuration.Spelling[i];
// spellingB = configuration.Spelling[i + 1];
// if (spellingB.Contains(spellingA))
// throw new Exception("Change configuration!");
// _SpellingFindReplace.Add(new(spellingA, spellingB));
// i += 1;
// }
// string[] dbFiles = Directory.GetFiles(propertyConfiguration.RootDirectory, "*.db", SearchOption.AllDirectories);
// foreach (string dbFile in dbFiles)
// File.Delete(dbFile);
// string aPropertySingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(propertyConfiguration, nameof(Property.Models.A_Property), "{}");
// if (!Directory.Exists(aPropertySingletonDirectory))
// throw new Exception(aPropertySingletonDirectory);
// ConsoleKey? consoleKey = null;
// for (int y = 0; y < int.MaxValue; y++)
// {
// _Log.Information($"Execute {nameof(VerifyAgainstIndexInfoJsonFiles)} \"Y(es)\" or \"N(o)\"?");
// consoleKey = Console.ReadKey().Key;
// if (consoleKey is ConsoleKey.Y or ConsoleKey.N)
// break;
// }
// _Log.Information(". . .");
// if (consoleKey == ConsoleKey.Y)
// VerifyAgainstIndexInfoJsonFiles(propertyConfiguration, aPropertySingletonDirectory);
// for (int y = 0; y < int.MaxValue; y++)
// {
// _Log.Information($"Execute {nameof(SaveTabSeparatedValues)} \"Y(es)\" or \"N(o)\"?");
// consoleKey = Console.ReadKey().Key;
// if (consoleKey is ConsoleKey.Y or ConsoleKey.N)
// break;
// }
// _Log.Information(". . .");
// if (consoleKey == ConsoleKey.Y)
// SaveTabSeparatedValues(propertyConfiguration, aPropertySingletonDirectory);
// for (int y = 0; y < int.MaxValue; y++)
// {
// _Log.Information($"Execute {nameof(ReSaveJsonFiles)} \"Y(es)\" or \"N(o)\"?");
// consoleKey = Console.ReadKey().Key;
// if (consoleKey is ConsoleKey.Y or ConsoleKey.N)
// break;
// }
// _Log.Information(". . .");
// if (consoleKey == ConsoleKey.Y)
// ReSaveJsonFiles();
// for (int y = 0; y < int.MaxValue; y++)
// {
// _Log.Information($"Execute {nameof(CopyMissingImagesLogs)} \"Y(es)\" or \"N(o)\"?");
// consoleKey = Console.ReadKey().Key;
// if (consoleKey is ConsoleKey.Y or ConsoleKey.N)
// break;
// }
// _Log.Information(". . .");
// if (consoleKey == ConsoleKey.Y)
// CopyMissingImagesLogs();
// string message = $"There were {_Exceptions.Count} exception(s) thrown! {Environment.NewLine}{string.Join(Environment.NewLine, _Exceptions)}";
// _Log.Information(message);
// if (_Exceptions.Count != 0)
// throw new Exception(message);
// _Configuration = configuration;
// }
// private static void Verify(Configuration configuration)
// {
// if (configuration.Spelling is null || !configuration.Spelling.Any())
// throw new NullReferenceException(nameof(configuration.Spelling));
// }
// private static List<Models.SaveTabSeparatedValues.ImageExifInfo> GetExifCollection(string infoDirectory, string infoDirectoryExtra, bool checkDistinct)
// {
// List<Models.SaveTabSeparatedValues.ImageExifInfo> results = new();
// string json;
// Models.SaveTabSeparatedValues.ImageExifInfo[]? exifCollection;
// List<string> exifInfoFiles = Directory.GetFiles(infoDirectory, "ImageExifInfo.json", SearchOption.AllDirectories).ToList();
// if (!string.IsNullOrEmpty(infoDirectoryExtra))
// exifInfoFiles.AddRange(Directory.GetFiles(infoDirectoryExtra, "ImageExifInfo.json", SearchOption.AllDirectories));
// foreach (string exifInfoFile in exifInfoFiles)
// {
// json = File.ReadAllText(exifInfoFile);
// exifCollection = JsonSerializer.Deserialize<Models.SaveTabSeparatedValues.ImageExifInfo[]>(json);
// if (exifCollection is null)
// continue;
// results.AddRange(exifCollection);
// }
// if (checkDistinct)
// {
// int[] check = (from l in results select l.Index).Distinct().ToArray();
// if (check.Length != results.Count)
// throw new Exception();
// }
// return results;
// }
// private List<(int Index, long Ticks, string RelativeDirectory, string FileNameWithoutExtension, string Extension, string RegexResult)> GetIndexCollection(string infoDirectory, string infoDirectoryExtra, bool checkDistinct)
// {
// List<(int Index, long Ticks, string RelativeDirectory, string FileNameWithoutExtension, string Extension, string RegexResult)> results = new();
// if (_Configuration?.PropertyConfiguration is null)
// throw new NullReferenceException(nameof(_Configuration.PropertyConfiguration));
// long ticks;
// string json;
// string extension;
// string corrected;
// string regexResult;
// string relativeDirectory;
// List<DateTime> dateTimes;
// string fileNameWithoutExtension;
// string firstFileSegmentCollection;
// DateTime? dateTimeFromName = null;
// Dictionary<int, long> keyValuePairs = new();
// Models.SaveTabSeparatedValues.IndexInfo[]? indexCollection;
// List<Models.SaveTabSeparatedValues.ImageExifInfo> exifCollection = GetExifCollection(infoDirectory, infoDirectoryExtra, checkDistinct);
// List<string> indexInfoFiles = Directory.GetFiles(infoDirectory, "IndexInfo.json", SearchOption.AllDirectories).ToList();
// if (!string.IsNullOrEmpty(infoDirectoryExtra))
// indexInfoFiles.AddRange(Directory.GetFiles(infoDirectoryExtra, "IndexInfo.json", SearchOption.AllDirectories));
// foreach (Models.SaveTabSeparatedValues.ImageExifInfo exifInfo in exifCollection)
// {
// dateTimes = Shared.Models.Stateless.Methods.IProperty.GetDateTimes(exifInfo.CreationTime, exifInfo.LastWriteTime, exifInfo.DateTime, dateTimeFromName, exifInfo.DateTimeDigitized, exifInfo.DateTimeOriginal, exifInfo.GPSDateStamp);
// if (!checkDistinct && keyValuePairs.ContainsKey(exifInfo.Index))
// continue;
// keyValuePairs.Add(exifInfo.Index, dateTimes.Min().Ticks);
// }
// foreach (string indexInfoFile in indexInfoFiles)
// {
// json = File.ReadAllText(indexInfoFile);
// indexCollection = JsonSerializer.Deserialize<Models.SaveTabSeparatedValues.IndexInfo[]>(json);
// if (indexCollection is null)
// continue;
// foreach (Models.SaveTabSeparatedValues.IndexInfo indexInfo in indexCollection)
// {
// if (indexInfo.FileSegmentCollection is null)
// continue;
// // if (indexInfo.FileSegmentCollection.Length != 1)
// // continue;
// ticks = keyValuePairs[indexInfo.Index];
// firstFileSegmentCollection = indexInfo.FileSegmentCollection[0];
// extension = Path.GetExtension(firstFileSegmentCollection);
// fileNameWithoutExtension = Path.GetFileNameWithoutExtension(firstFileSegmentCollection);
// corrected = firstFileSegmentCollection[..(firstFileSegmentCollection.Length - extension.Length)];
// relativeDirectory = firstFileSegmentCollection[..(firstFileSegmentCollection.Length - fileNameWithoutExtension.Length - extension.Length)];
// if ((from l in _SpellingFindReplace where corrected.Contains(l.Find) select true).Any())
// {
// foreach ((string find, string replace) in _SpellingFindReplace)
// corrected = corrected.Replace(find, replace);
// }
// if (string.IsNullOrEmpty(_Configuration.PropertyConfiguration.Pattern))
// regexResult = corrected;
// else
// regexResult = Regex.Replace(corrected, _Configuration.PropertyConfiguration.Pattern, string.Empty);
// results.Add(new(indexInfo.Index, ticks, relativeDirectory, fileNameWithoutExtension, extension, regexResult));
// }
// }
// return results;
// }
// private static List<int> GetUseTabSeparatedValueIndices(string useDirectory)
// {
// List<int> results = new();
// string[] lines;
// string[] segments;
// string[] tabSeparatedValueFiles = Directory.GetFiles(useDirectory, "*.tsv", SearchOption.TopDirectoryOnly);
// foreach (string tabSeparatedValueFile in tabSeparatedValueFiles)
// {
// lines = File.ReadAllLines(tabSeparatedValueFile);
// foreach (string line in lines)
// {
// if (string.IsNullOrEmpty(line))
// continue;
// segments = line.Split('\t');
// if (segments.Length < 1)
// continue;
// if (!int.TryParse(segments[0], out int index))
// continue;
// results.Add(index);
// }
// }
// return results.Distinct().OrderBy(l => l).ToList();
// }
// private void SaveTabSeparatedValues(Property.Models.Configuration configuration, string aPropertySingletonDirectory)
// {
// if (_Log is null)
// throw new NullReferenceException(nameof(_Log));
// if (_Configuration?.PropertyConfiguration is null)
// throw new NullReferenceException(nameof(_Configuration.PropertyConfiguration));
// string? rootDirectoryParent = Path.GetDirectoryName(_Configuration.PropertyConfiguration.RootDirectory);
// if (string.IsNullOrEmpty(rootDirectoryParent))
// throw new NullReferenceException(nameof(rootDirectoryParent));
// int z = 0;
// int mappedIndex;
// int? propertyId;
// long? propertyTicks;
// int loadLessThan = 7;
// string useDirectory = Path.Combine(rootDirectoryParent, "Use - ==");
// if (!Directory.Exists(useDirectory))
// _ = Directory.CreateDirectory(useDirectory);
// string tempDirectory = Path.Combine(rootDirectoryParent, "Tmp");
// if (!Directory.Exists(tempDirectory))
// _ = Directory.CreateDirectory(tempDirectory);
// string diffRootDirectory = string.Empty;
// List<PropertyCompare.Models.PropertyCompare> duplicates = new();
// string imageSharedDirectory = Path.Combine(rootDirectoryParent, "Images - Shared");
// string namedFaceInfoFile = Path.Combine(imageSharedDirectory, "NamedFaceInfo.json");
// string infoDirectory = Path.Combine(imageSharedDirectory, "Images - 4) Info", "2020-06-07");
// string infoDirectoryExtra = Path.Combine(imageSharedDirectory, "Images - 4) Info - - - Extra", "2022-04-14");
// List<int> mappedIndices = GetUseTabSeparatedValueIndices(useDirectory);
// List<(int Index, string RelativeDirectory, string FileName, string RegexResult, long Ticks, int? PropertyId, long? PropertyTicks)> collection = new();
// PropertyCompare.Models.PropertyCompareLogic propertyCompareLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _SpellingFindReplace, diffRootDirectory);
// PropertyCompare.Models.PropertyCompare[] propertyCompareCollection = propertyCompareLogic.Get(aPropertySingletonDirectory, loadLessThan, duplicates, deleteExtension: false);
// {
// long ticks = DateTime.Now.Ticks;
// string[] lines = (from l in propertyCompareCollection select l.GetSelect()).ToArray();
// string aPropertyCollectionDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(configuration, nameof(Property.Models.A_Property), "[{}]");
// File.WriteAllLines(Path.Join(aPropertyCollectionDirectory, $". . . Ids - {ticks}.txt"), lines);
// string json = JsonSerializer.Serialize(propertyCompareCollection, new JsonSerializerOptions { WriteIndented = true });
// File.WriteAllText(Path.Join(aPropertyCollectionDirectory, $". . . Ids - {ticks}.nosj"), json);
// }
// List<(int Index, long Ticks, string RelativeDirectory, string FileNameWithoutExtension, string Extension, string RegexResult)> indexCollection = GetIndexCollection(infoDirectory, infoDirectoryExtra, checkDistinct: true);
// foreach ((int index, long ticks, string relativeDirectory, string fileNameWithoutExtension, string extension, string regexResult) in indexCollection)
// {
// z += 1;
// if (_IsEnvironment.Development && z % 1000 == 0)
// _Log.Debug($"{z}) Loop {_Configuration.PropertyConfiguration.RootDirectory}");
// propertyId = null;
// propertyTicks = null;
// foreach (PropertyCompare.Models.PropertyCompare propertyCompare in propertyCompareCollection)
// {
// if (propertyCompare?.Property?.Id is null)
// continue;
// if (ticks != propertyCompare.MinimumDateTime.Ticks)
// {
// // if (ticks > propertyCompare.MinimumDateTime.AddHours(18).Ticks || ticks < propertyCompare.MinimumDateTime.AddHours(-18).Ticks)
// continue;
// }
// if (!regexResult.Equals(propertyCompare.RegexResult, StringComparison.CurrentCultureIgnoreCase))
// continue;
// propertyId = propertyCompare.Property.Id;
// propertyTicks = propertyCompare.MinimumDateTime.Ticks;
// mappedIndex = mappedIndices.IndexOf(index);
// if (mappedIndex > -1)
// mappedIndices.RemoveAt(mappedIndex);
// break;
// }
// collection.Add(new(index, relativeDirectory, $"{fileNameWithoutExtension}{extension}", regexResult, ticks, propertyId, propertyTicks));
// }
// (int Index, string RelativeDirectory, string FileName, string RegexResult, long Ticks, int? PropertyId, long? PropertyTicks)[] matched = (from l in collection where l.PropertyId.HasValue select l).ToArray();
// (int Index, string RelativeDirectory, string FileName, string RegexResult, long Ticks, int? PropertyId, long? PropertyTicks)[] notMatched = (from l in collection where l.PropertyId is null select l).ToArray();
// string[] duplicatesLines = (
// from l
// in duplicates
// select $"{l.Property.Id}\t{l.RegexResult}\t{l.MinimumDateTime:yyyy-MM-dd_HH-mm-ss}\t{l.MinimumDateTime}\t{l.RelativeDirectory}\t{l.FileNameWithoutExtension}{l.Extension}.___"
// ).ToArray();
// string[] matchedLines = (
// from l
// in matched
// select $"{l.Index}\t{l.PropertyId}\t{l.RegexResult}\t{new DateTime(l.Ticks):yyyy-MM-dd_HH-mm-ss}\t{l.PropertyTicks}\t{l.RelativeDirectory}\t{l.FileName}"
// ).ToArray();
// List<string> notMatchedLines = (
// from l
// in notMatched
// where !mappedIndices.Contains(l.Index)
// select $"{l.Index}\t______________\t{l.RegexResult}\t{new DateTime(l.Ticks):yyyy-MM-dd_HH-mm-ss}\t_________________\t{l.RelativeDirectory}\t{l.FileName}"
// ).ToList();
// {
// long ticks = DateTime.Now.Ticks;
// notMatchedLines.AddRange(from l in mappedIndices select $"{l}\tFrom other files");
// File.WriteAllLines($"{tempDirectory}/{collection.Count}-{ticks}.tsv", matchedLines);
// File.WriteAllLines($"{tempDirectory}/{collection.Count}-{ticks}.txt", duplicatesLines);
// File.WriteAllLines($"{tempDirectory}/{collection.Count}-{ticks}-Not.tsv", notMatchedLines);
// }
// _Log.Debug($"Done with {nameof(SaveTabSeparatedValues)}");
// }
// private static void GetUseTabSeparatedValueLines(string useDirectory, Dictionary<int, List<string>> mappedLines)
// {
// string[] lines;
// string[] segments;
// string useDirectoryName = Path.GetFileName(useDirectory).Split('-')[1].Trim();
// string[] tabSeparatedValueFiles = Directory.GetFiles(useDirectory, "*.tsv", SearchOption.TopDirectoryOnly);
// foreach (string tabSeparatedValueFile in tabSeparatedValueFiles)
// {
// lines = File.ReadAllLines(tabSeparatedValueFile);
// foreach (string line in lines)
// {
// if (string.IsNullOrEmpty(line))
// continue;
// segments = line.Split('\t');
// if (segments.Length < 1)
// continue;
// if (!int.TryParse(segments[0], out int index))
// continue;
// if (!mappedLines.ContainsKey(index))
// mappedLines.Add(index, new());
// mappedLines[index].Add($"{line},\t{useDirectoryName}");
// }
// }
// }
// private static void Populate(Dictionary<int, List<int>> keyValuePairs, Dictionary<int, List<string>> mappedLines)
// {
// string[] segments;
// foreach (KeyValuePair<int, List<string>> keyValuePair in mappedLines)
// {
// segments = keyValuePair.Value[0].Split('\t');
// if (segments.Length < 2)
// continue;
// if (!int.TryParse(segments[1], out int id))
// continue;
// if (!keyValuePairs.ContainsKey(id))
// keyValuePairs.Add(id, new() { id });
// keyValuePairs[id].Add(keyValuePair.Key);
// }
// }
// private static Dictionary<int, int> GetUseTabSeparatedValue(string useEqualsDirectory, string use18HoursDirectory, string useAnyDateDirectory, Dictionary<int, List<int>> keyValuePairs, List<string> lines)
// {
// Dictionary<int, int> results = new();
// string[] segments;
// Dictionary<int, List<string>> mappedLines = new();
// GetUseTabSeparatedValueLines(useEqualsDirectory, mappedLines);
// GetUseTabSeparatedValueLines(use18HoursDirectory, mappedLines);
// GetUseTabSeparatedValueLines(useAnyDateDirectory, mappedLines);
// Populate(keyValuePairs, mappedLines);
// foreach (KeyValuePair<int, List<string>> keyValuePair in mappedLines)
// {
// segments = keyValuePair.Value[0].Split('\t');
// if (segments.Length < 2)
// continue;
// if (!int.TryParse(segments[1], out int id))
// continue;
// foreach (string line in keyValuePair.Value)
// lines.Add(line);
// results.Add(keyValuePair.Key, id);
// }
// return results;
// }
// private static void ReSaveExifFiles(string infoDirectory, string infoDirectoryIgnore, Dictionary<int, int> findReplace, List<int> missingIndices)
// {
// string json;
// int propertyId;
// Models.SaveTabSeparatedValues.ImageExifInfo[]? exifCollection;
// List<string> exifInfoFiles = Directory.GetFiles(infoDirectory, "ImageExifInfo.json", SearchOption.AllDirectories).ToList();
// exifInfoFiles.AddRange(Directory.GetFiles(infoDirectoryIgnore, "ImageExifInfo.json", SearchOption.AllDirectories));
// foreach (string exifInfoFile in exifInfoFiles)
// {
// json = File.ReadAllText(exifInfoFile);
// exifCollection = JsonSerializer.Deserialize<Models.SaveTabSeparatedValues.ImageExifInfo[]>(json);
// if (exifCollection is null)
// continue;
// foreach (Models.SaveTabSeparatedValues.ImageExifInfo exifInfo in exifCollection)
// {
// if (missingIndices.Contains(exifInfo.Index))
// continue;
// propertyId = findReplace[exifInfo.Index];
// exifInfo.Index = propertyId;
// }
// json = JsonSerializer.Serialize(exifCollection);
// File.WriteAllText(exifInfoFile, json);
// }
// }
// private static void ReSaveNamedFaceInfoFile(string namedFaceInfoFile, Dictionary<int, int> findReplace, List<int> missingIndices)
// {
// Dictionary<int, string[]> destination = new();
// string json = File.ReadAllText(namedFaceInfoFile);
// List<(int PropertyId, string[] Birthdays)> collection = new();
// JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true };
// Dictionary<int, string[]>? source = JsonSerializer.Deserialize<Dictionary<int, string[]>>(json);
// if (source is null)
// throw new NullReferenceException(nameof(source));
// {
// int propertyId;
// foreach (KeyValuePair<int, string[]> keyValuePair in source)
// {
// if (missingIndices.Contains(keyValuePair.Key))
// continue;
// propertyId = findReplace[keyValuePair.Key];
// collection.Add(new(propertyId, keyValuePair.Value));
// }
// }
// foreach ((int propertyId, string[] birthdays) in collection.OrderBy(l => l.PropertyId))
// {
// if (destination.ContainsKey(propertyId))
// {
// if (birthdays.Length != destination[propertyId].Length)
// throw new Exception($"{birthdays.Length} != {destination[propertyId].Length}");
// if (birthdays[0] != destination[propertyId][0])
// throw new Exception($"{birthdays[0]} != {destination[propertyId][0]}");
// continue;
// }
// destination.Add(propertyId, birthdays);
// }
// json = JsonSerializer.Serialize(destination, jsonSerializerOptions);
// File.WriteAllText(namedFaceInfoFile, json);
// }
// private static void ReSaveIndexFiles(string infoDirectory, string infoDirectoryIgnore, Dictionary<int, int> findReplace, List<int> missingIndices)
// {
// string json;
// int propertyId;
// Models.SaveTabSeparatedValues.IndexInfo[]? indexCollection;
// List<string> indexInfoFiles = Directory.GetFiles(infoDirectory, "IndexInfo.json", SearchOption.AllDirectories).ToList();
// indexInfoFiles.AddRange(Directory.GetFiles(infoDirectoryIgnore, "IndexInfo.json", SearchOption.AllDirectories));
// foreach (string indexInfoFile in indexInfoFiles)
// {
// json = File.ReadAllText(indexInfoFile);
// indexCollection = JsonSerializer.Deserialize<Models.SaveTabSeparatedValues.IndexInfo[]>(json);
// if (indexCollection is null)
// continue;
// foreach (Models.SaveTabSeparatedValues.IndexInfo indexInfo in indexCollection)
// {
// if (missingIndices.Contains(indexInfo.Index))
// continue;
// propertyId = findReplace[indexInfo.Index];
// indexInfo.Index = propertyId;
// }
// json = JsonSerializer.Serialize(indexCollection);
// File.WriteAllText(indexInfoFile, json);
// }
// }
// private void ReSaveJsonFiles()
// {
// if (_Log is null)
// throw new NullReferenceException(nameof(_Log));
// if (_Configuration?.PropertyConfiguration is null)
// throw new NullReferenceException(nameof(_Configuration.PropertyConfiguration));
// string? rootDirectoryParent = Path.GetDirectoryName(_Configuration.PropertyConfiguration.RootDirectory);
// if (string.IsNullOrEmpty(rootDirectoryParent))
// throw new NullReferenceException(nameof(rootDirectoryParent));
// int z = 0;
// int propertyId;
// List<int> missingIndices = new();
// Dictionary<int, int> findReplace = new();
// List<string> useTabSeparatedValueLines = new();
// Dictionary<int, List<int>> keyValuePairs = new();
// string tempDirectory = Path.Combine(rootDirectoryParent, "Tmp");
// string useEqualsDirectory = Path.Combine(rootDirectoryParent, "Use - ==");
// string use18HoursDirectory = Path.Combine(rootDirectoryParent, "Use - 18 Hours");
// string useAnyDateDirectory = Path.Combine(rootDirectoryParent, "Use - Any Date");
// string imageSharedDirectory = Path.Combine(rootDirectoryParent, "Images - Shared");
// string namedFaceInfoFile = Path.Combine(imageSharedDirectory, "NamedFaceInfo.json");
// string infoDirectory = Path.Combine(imageSharedDirectory, "Images - 4) Info", "2020-06-07");
// string infoDirectoryIgnore = Path.Combine(imageSharedDirectory, "Images - 4) Info - - - Ignore", "2022-04-14");
// Dictionary<int, int> useTabSeparatedValueCollection = GetUseTabSeparatedValue(useEqualsDirectory, use18HoursDirectory, useAnyDateDirectory, keyValuePairs, useTabSeparatedValueLines);
// {
// long ticks = DateTime.Now.Ticks;
// string json = JsonSerializer.Serialize(keyValuePairs, new JsonSerializerOptions { WriteIndented = true });
// File.WriteAllText($"{tempDirectory}/{nameof(keyValuePairs)}-{ticks}.json", json);
// }
// List<(int Index, long Ticks, string RelativeDirectory, string FileNameWithoutExtension, string Extension, string RegexResult)> indexCollection = GetIndexCollection(infoDirectory, infoDirectoryIgnore, checkDistinct: true);
// foreach ((int index, long ticks, string relativeDirectory, string fileNameWithoutExtension, string extension, string regexResult) in indexCollection)
// {
// z += 1;
// if (_IsEnvironment.Development && z % 1000 == 0)
// _Log.Debug($"{z}) Loop {_Configuration.PropertyConfiguration.RootDirectory}");
// if (!useTabSeparatedValueCollection.ContainsKey(index))
// {
// missingIndices.Add(index);
// continue;
// }
// propertyId = useTabSeparatedValueCollection[index];
// findReplace.Add(index, propertyId);
// }
// ReSaveIndexFiles(infoDirectory, infoDirectoryIgnore, findReplace, missingIndices);
// ReSaveExifFiles(infoDirectory, infoDirectoryIgnore, findReplace, missingIndices);
// ReSaveNamedFaceInfoFile(namedFaceInfoFile, findReplace, missingIndices);
// {
// long ticks = DateTime.Now.Ticks;
// File.WriteAllLines($"{tempDirectory}/{nameof(useTabSeparatedValueLines)}-{ticks}.tsv", useTabSeparatedValueLines);
// File.WriteAllText($"{tempDirectory}/{nameof(missingIndices)}-{ticks}.txt", string.Join(Environment.NewLine, missingIndices));
// }
// _Log.Debug($"Done with {nameof(ReSaveJsonFiles)}");
// }
// private void CopyMissingImagesLogs()
// {
// if (_Log is null)
// throw new NullReferenceException(nameof(_Log));
// if (_Configuration?.PropertyConfiguration is null)
// throw new NullReferenceException(nameof(_Configuration.PropertyConfiguration));
// string? rootDirectoryParent = Path.GetDirectoryName(_Configuration.PropertyConfiguration.RootDirectory);
// if (_Configuration?.PropertyConfiguration is null)
// throw new NullReferenceException(nameof(_Configuration.PropertyConfiguration));
// if (string.IsNullOrEmpty(rootDirectoryParent))
// throw new NullReferenceException(nameof(rootDirectoryParent));
// int z = 0;
// int propertyId;
// Dictionary<int, int> findReplace = new();
// List<int> missingIndices = new();
// List<string> useTabSeparatedValueLines = new();
// Dictionary<int, List<int>> keyValuePairs = new();
// string tempDirectory = Path.Combine(rootDirectoryParent, "Tmp");
// string currentDirectory = Path.Combine(rootDirectoryParent, "@) Images");
// string useEqualsDirectory = Path.Combine(rootDirectoryParent, "Use - ==");
// string use18HoursDirectory = Path.Combine(rootDirectoryParent, "Use - 18 Hours");
// string useAnyDateDirectory = Path.Combine(rootDirectoryParent, "Use - Any Date");
// string imageSharedDirectory = Path.Combine(rootDirectoryParent, "Images - Shared");
// string namedFaceInfoFile = Path.Combine(imageSharedDirectory, "NamedFaceInfo.json");
// string infoDirectory = Path.Combine(imageSharedDirectory, "Images - 4) Info", "2020-06-07");
// string infoDirectoryIgnore = Path.Combine(imageSharedDirectory, "Images - 4) Info - - - Ignore", "2022-04-14");
// Dictionary<int, int> useTabSeparatedValueCollection = GetUseTabSeparatedValue(useEqualsDirectory, use18HoursDirectory, useAnyDateDirectory, keyValuePairs, useTabSeparatedValueLines);
// {
// long ticks = DateTime.Now.Ticks;
// string json = JsonSerializer.Serialize(keyValuePairs, new JsonSerializerOptions { WriteIndented = true });
// File.WriteAllText($"{tempDirectory}/{nameof(keyValuePairs)}-{ticks}.json", json);
// }
// List<(int Index, long Ticks, string RelativeDirectory, string FileNameWithoutExtension, string Extension, string RegexResult)> indexCollection = GetIndexCollection(infoDirectory, infoDirectoryIgnore, checkDistinct: false);
// foreach ((int index, long ticks, string relativeDirectory, string fileNameWithoutExtension, string extension, string regexResult) in indexCollection)
// {
// z += 1;
// if (_IsEnvironment.Development && z % 1000 == 0)
// _Log.Debug($"{z}) Loop {_Configuration.PropertyConfiguration.RootDirectory}");
// if (!useTabSeparatedValueCollection.ContainsKey(index))
// {
// missingIndices.Add(index);
// continue;
// }
// propertyId = useTabSeparatedValueCollection[index];
// findReplace.Add(index, propertyId);
// }
// {
// long ticks = DateTime.Now.Ticks;
// File.WriteAllLines($"{tempDirectory}/{nameof(useTabSeparatedValueLines)}-{ticks}.tsv", useTabSeparatedValueLines);
// File.WriteAllText($"{tempDirectory}/{nameof(missingIndices)}-{ticks}.txt", string.Join(Environment.NewLine, missingIndices));
// }
// _Log.Debug($"Done with {nameof(CopyMissingImagesLogs)}");
// }
// private static Dictionary<int, List<PropertyCompare.Models.PropertyCompare>> GetKeyValuePairs(PropertyCompare.Models.PropertyCompare[] propertyCompares)
// {
// Dictionary<int, List<PropertyCompare.Models.PropertyCompare>> results = new();
// foreach (PropertyCompare.Models.PropertyCompare propertyCompare in propertyCompares)
// {
// if (propertyCompare?.Property?.Id is null)
// continue;
// if (!results.ContainsKey(propertyCompare.Property.Id.Value))
// results.Add(propertyCompare.Property.Id.Value, new());
// results[propertyCompare.Property.Id.Value].Add(propertyCompare);
// }
// return results;
// }
// private void VerifyAgainstIndexInfoJsonFiles(Property.Models.Configuration configuration, string aPropertySingletonDirectory)
// {
// if (_Log is null)
// throw new NullReferenceException(nameof(_Log));
// if (_Configuration?.PropertyConfiguration is null)
// throw new NullReferenceException(nameof(_Configuration.PropertyConfiguration));
// string? rootDirectoryParent = Path.GetDirectoryName(_Configuration.PropertyConfiguration.RootDirectory);
// if (string.IsNullOrEmpty(rootDirectoryParent))
// throw new NullReferenceException(nameof(rootDirectoryParent));
// int z = 0;
// int? propertyId;
// long? propertyTicks;
// int loadLessThan = 7;
// string diffRootDirectory = string.Empty;
// PropertyCompare.Models.PropertyCompare propertyCompare;
// string tempDirectory = Path.Combine(rootDirectoryParent, "Tmp");
// if (!Directory.Exists(tempDirectory))
// _ = Directory.CreateDirectory(tempDirectory);
// string imageSharedDirectory = Path.Combine(rootDirectoryParent, "Images - Shared");
// string namedFaceInfoFile = Path.Combine(imageSharedDirectory, "NamedFaceInfo.json");
// string infoDirectory = Path.Combine(imageSharedDirectory, "Images - 4) Info", "2020-06-07");
// List<(int Index, string RelativeDirectory, string FileName, string RegexResult, long Ticks, int? PropertyId, long? PropertyTicks)> collection = new();
// PropertyCompare.Models.PropertyCompareLogic propertyCompareLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _SpellingFindReplace, diffRootDirectory);
// PropertyCompare.Models.PropertyCompare[] propertyCompareCollection = propertyCompareLogic.Get(aPropertySingletonDirectory, loadLessThan);
// {
// long ticks = DateTime.Now.Ticks;
// string[] lines = (from l in propertyCompareCollection select l.GetSelect()).ToArray();
// string aPropertyCollectionDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(configuration, nameof(Property.Models.A_Property), "[{}]");
// File.WriteAllLines(Path.Join(aPropertyCollectionDirectory, $". . . Ids - {ticks}.txt"), lines);
// string json = JsonSerializer.Serialize(propertyCompareCollection, new JsonSerializerOptions { WriteIndented = true });
// File.WriteAllText(Path.Join(aPropertyCollectionDirectory, $". . . Ids - {ticks}.nosj"), json);
// }
// Dictionary<int, List<PropertyCompare.Models.PropertyCompare>> keyValuePairs = GetKeyValuePairs(propertyCompareCollection);
// List<(int Index, long Ticks, string RelativeDirectory, string FileNameWithoutExtension, string Extension, string RegexResult)> indexCollection = GetIndexCollection(infoDirectory, infoDirectoryExtra: string.Empty, checkDistinct: false);
// foreach ((int index, long ticks, string relativeDirectory, string fileNameWithoutExtension, string extension, string regexResult) in indexCollection)
// {
// z += 1;
// if (_IsEnvironment.Development && z % 1000 == 0)
// _Log.Debug($"{z}) Loop {_Configuration.PropertyConfiguration.RootDirectory}");
// propertyId = null;
// propertyTicks = null;
// if (keyValuePairs.ContainsKey(index))
// {
// propertyCompare = keyValuePairs[index][0];
// if (propertyCompare?.Property?.Id is null)
// continue;
// propertyId = propertyCompare.Property.Id;
// propertyTicks = propertyCompare.MinimumDateTime.Ticks;
// }
// collection.Add(new(index, relativeDirectory, $"{fileNameWithoutExtension}{extension}", regexResult, ticks, propertyId, propertyTicks));
// }
// (int Index, string RelativeDirectory, string FileName, string RegexResult, long Ticks, int? PropertyId, long? PropertyTicks)[] matched = (from l in collection where l.PropertyId.HasValue select l).ToArray();
// (int Index, string RelativeDirectory, string FileName, string RegexResult, long Ticks, int? PropertyId, long? PropertyTicks)[] notMatched = (from l in collection where l.PropertyId is null select l).ToArray();
// string[] matchedLines = (
// from l
// in matched
// select $"{l.Index}\t{l.PropertyId}\t{l.RegexResult}\t{new DateTime(l.Ticks):yyyy-MM-dd_HH-mm-ss}\t{l.PropertyTicks}\t{l.RelativeDirectory}\t{l.FileName}"
// ).ToArray();
// List<string> notMatchedLines = (
// from l
// in notMatched
// select $"{l.Index}\t______________\t{l.RegexResult}\t{new DateTime(l.Ticks):yyyy-MM-dd_HH-mm-ss}\t_________________\t{l.RelativeDirectory}\t{l.FileName}"
// ).ToList();
// {
// long ticks = DateTime.Now.Ticks;
// File.WriteAllLines($"{tempDirectory}/{collection.Count}-{ticks}.tsv", matchedLines);
// File.WriteAllLines($"{tempDirectory}/{collection.Count}-{ticks}-Not.tsv", notMatchedLines);
// }
// _Log.Debug($"Done with {nameof(VerifyAgainstIndexInfoJsonFiles)}");
// }
// }