From 8f7fd02ba88ebd2550f19b598030e855f4655b60 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Fri, 4 Jul 2025 09:11:05 -0700 Subject: [PATCH] Interface over passing ticks --- Compare/Compare.cs | 36 +++++++------- .../Models/Stateless/FaceEncodingLogic.cs | 4 +- Distance/Models/Stateless/FilterLogicA.cs | 6 +-- Distance/Models/Stateless/FilterLogicB.cs | 4 +- Distance/Models/Stateless/FilterLogicC.cs | 10 ++-- Distance/Models/Stateless/FilterLogicD.cs | 10 ++-- Distance/Models/Stateless/IDistance.cs | 48 +++++++++---------- Distance/Models/Stateless/MappedLogicA.cs | 6 +-- Distance/Models/Stateless/MappedLogicB.cs | 4 +- Face/Models/Stateless/Face.cs | 4 +- Face/Models/Stateless/IFace.cs | 8 ++-- Rename/Rename.cs | 37 +++++++------- Shared/Models/Stateless/ICompare.cs | 2 + Shared/Models/Stateless/IRename.cs | 4 +- Shared/Models/Stateless/IWindows.cs | 4 +- Shared/Models/Stateless/Id.cs | 23 +++++---- Windows/Windows.cs | 19 ++++---- 17 files changed, 124 insertions(+), 105 deletions(-) diff --git a/Compare/Compare.cs b/Compare/Compare.cs index 8114729..32129e1 100644 --- a/Compare/Compare.cs +++ b/Compare/Compare.cs @@ -14,6 +14,9 @@ namespace View_by_Distance.Compare; public partial class Compare : ICompare, IDisposable { + public long Ticks { get; init; } + public int? CurrentTick => _ProgressBar?.CurrentTick; + private ProgressBar? _ProgressBar; private readonly ProgressBarOptions _ProgressBarOptions; @@ -41,54 +44,53 @@ public partial class Compare : ICompare, IDisposable if (console is null) throw new NullReferenceException(nameof(console)); ICompare compare = this; - long ticks = DateTime.Now.Ticks; + Ticks = DateTime.Now.Ticks; _ProgressBarOptions = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; - CompareWork(logger, appSettings, compare, ticks); + CompareWork(logger, appSettings, compare); } - private void CompareWork(ILogger? logger, AppSettings appSettings, ICompare compare, long ticks) + private void CompareWork(ILogger? logger, AppSettings appSettings, ICompare compare) { const int updated = 0; DistanceLimits? distanceLimits; - logger?.LogInformation("{Ticks}", ticks); ReadOnlyCollection matrix; + logger?.LogInformation("{Ticks}", compare.Ticks); ReadOnlyCollection saveContainers; ReadOnlyCollection exifDirectories; ReadOnlyCollection preFiltered; ReadOnlyCollection postFiltered; ReadOnlyDictionary onlyOne; - bool runToDoCollectionFirst = GetRunToDoCollectionFirst(appSettings, ticks); + bool runToDoCollectionFirst = GetRunToDoCollectionFirst(appSettings, compare); ReadOnlyCollections readOnlyCollections = GetReadOnlyCollections(appSettings); - ReadOnlyCollection mappedExifDirectoryWithEncoding = GetMappedExifDirectoryWithEncoding(appSettings, compare, ticks, readOnlyCollections); + ReadOnlyCollection mappedExifDirectoryWithEncoding = GetMappedExifDirectoryWithEncoding(appSettings, compare, readOnlyCollections); ReadOnlyDictionary> keyValuePairs = IDistance.Extract(appSettings.CompareSettings, mappedExifDirectoryWithEncoding); foreach (string outputResolution in appSettings.CompareSettings.OutputResolutions) { if (runToDoCollectionFirst || outputResolution.Any(char.IsNumber)) continue; - _ProgressBar?.Dispose(); logger?.LogInformation("{outputResolution}", outputResolution); - exifDirectories = IFace.GetExifDirectories(appSettings.ResultSettings, appSettings.MetadataSettings, appSettings.DistanceSettings, appSettings.CompareSettings, compare, ticks, outputResolution); - preFiltered = IDistance.GetPreFilterLocationContainer(appSettings.DistanceSettings, appSettings.CompareSettings, compare, ticks, readOnlyCollections, keyValuePairs, exifDirectories); + exifDirectories = IFace.GetExifDirectories(appSettings.ResultSettings, appSettings.MetadataSettings, appSettings.DistanceSettings, appSettings.CompareSettings, compare, outputResolution); + preFiltered = IDistance.GetPreFilterLocationContainer(appSettings.DistanceSettings, appSettings.CompareSettings, compare, readOnlyCollections, keyValuePairs, exifDirectories); if (preFiltered.Count == 0) continue; distanceLimits = new(appSettings.DistanceSettings); postFiltered = IDistance.GetPostFilterLocationContainer(preFiltered, distanceLimits); if (postFiltered.Count == 0) continue; - matrix = IDistance.GetMatrixLocationContainers(appSettings.DistanceSettings, appSettings.CompareSettings, compare, ticks, mappedExifDirectoryWithEncoding, distanceLimits, postFiltered); + matrix = IDistance.GetMatrixLocationContainers(appSettings.DistanceSettings, appSettings.CompareSettings, compare, mappedExifDirectoryWithEncoding, distanceLimits, postFiltered); if (matrix.Count == 0) continue; onlyOne = IDistance.GetOnlyOne(appSettings.DistanceSettings, matrix); if (onlyOne.Count == 0) continue; - saveContainers = IDistance.GetSaveContainers(appSettings.ResultSettings, appSettings.DistanceSettings, appSettings.CompareSettings, compare, ticks, outputResolution, onlyOne); + saveContainers = IDistance.GetSaveContainers(appSettings.ResultSettings, appSettings.DistanceSettings, appSettings.CompareSettings, compare, outputResolution, onlyOne); if (saveContainers.Count == 0) continue; - IDistance.SaveContainers(appSettings.DistanceSettings, appSettings.CompareSettings, compare, ticks, updated, saveContainers); + IDistance.SaveContainers(appSettings.DistanceSettings, appSettings.CompareSettings, compare, updated, saveContainers); } } - private static bool GetRunToDoCollectionFirst(AppSettings appSettings, long ticks) + private static bool GetRunToDoCollectionFirst(AppSettings appSettings, ICompare compare) { bool result = appSettings.DistanceSettings.SaveSortingWithoutPerson; if (!result) @@ -103,7 +105,7 @@ public partial class Compare : ICompare, IDisposable { string seasonDirectory; DirectoryInfo directoryInfo; - DateTime dateTime = new(ticks); + DateTime dateTime = new(compare.Ticks); string rootDirectory = appSettings.ResultSettings.RootDirectory; (int season, string seasonName) = IDate.GetSeason(dateTime.DayOfYear); string eDistanceContentDirectory = IResult.GetResultsDateGroupDirectory(appSettings.ResultSettings, nameof(E_Distance), appSettings.ResultSettings.ResultContent); @@ -153,13 +155,13 @@ public partial class Compare : ICompare, IDisposable return result; } - private static ReadOnlyCollection GetMappedExifDirectoryWithEncoding(AppSettings appSettings, ICompare compare, long ticks, ReadOnlyCollections readOnlyCollections) + private static ReadOnlyCollection GetMappedExifDirectoryWithEncoding(AppSettings appSettings, ICompare compare, ReadOnlyCollections readOnlyCollections) { ReadOnlyCollection results; - ReadOnlyCollection exifDirectories = IDistance.GetMapped(appSettings.ResultSettings, appSettings.MetadataSettings, appSettings.PeopleSettings, appSettings.DistanceSettings, appSettings.CompareSettings, compare, ticks, readOnlyCollections); + ReadOnlyCollection exifDirectories = IDistance.GetMapped(appSettings.ResultSettings, appSettings.MetadataSettings, appSettings.PeopleSettings, appSettings.DistanceSettings, appSettings.CompareSettings, compare, readOnlyCollections); if (exifDirectories.Count == 0 && !appSettings.DistanceSettings.SaveSortingWithoutPerson) throw new NotSupportedException($"Switch {nameof(appSettings.DistanceSettings.SaveSortingWithoutPerson)}!"); - results = IDistance.GetMappedExifDirectoryWithEncoding(compare, ticks, exifDirectories); + results = IDistance.GetMappedExifDirectoryWithEncoding(compare, exifDirectories); if (results.Count == 0 && !appSettings.DistanceSettings.SaveSortingWithoutPerson) throw new NotSupportedException($"Switch {nameof(appSettings.DistanceSettings.SaveSortingWithoutPerson)}!"); return results; diff --git a/Distance/Models/Stateless/FaceEncodingLogic.cs b/Distance/Models/Stateless/FaceEncodingLogic.cs index a34c467..696faf0 100644 --- a/Distance/Models/Stateless/FaceEncodingLogic.cs +++ b/Distance/Models/Stateless/FaceEncodingLogic.cs @@ -8,14 +8,14 @@ namespace View_by_Distance.Distance.Models.Stateless; internal static class FaceEncodingLogic { - internal static ReadOnlyCollection GetMappedExifDirectoryWithEncoding(ICompare compare, long ticks, ReadOnlyCollection exifDirectories) + internal static ReadOnlyCollection GetMappedExifDirectoryWithEncoding(ICompare compare, ReadOnlyCollection exifDirectories) { List results = []; string? json; FaceEncoding? faceEncoding; ExifDirectory exifDirectory; FaceRecognitionDotNet.Models.FaceEncoding? encoding; - int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); + int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds); string message = $") Building Mapped with Encoding Face Files Collection - {totalSeconds} total second(s)"; compare.ConstructProgressBar(exifDirectories.Count, message); foreach (ExifDirectory e in exifDirectories) diff --git a/Distance/Models/Stateless/FilterLogicA.cs b/Distance/Models/Stateless/FilterLogicA.cs index 194c75a..c74c9ac 100644 --- a/Distance/Models/Stateless/FilterLogicA.cs +++ b/Distance/Models/Stateless/FilterLogicA.cs @@ -32,7 +32,7 @@ internal static class FilterLogicA return result; } - internal static ReadOnlyCollection GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary> keyValuePairs, ReadOnlyCollection exifDirectories) + internal static ReadOnlyCollection GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary> keyValuePairs, ReadOnlyCollection exifDirectories) { List results = []; string? json; @@ -44,8 +44,8 @@ internal static class FilterLogicA ReadOnlyDictionary? keyValues; FaceRecognitionDotNet.Models.FaceEncoding? encoding; List? wholePercentagesCollection; - ReadOnlyCollection locationContainers = FilterLogicB.GetLocationContainers(distanceSettings, compareSettings, compare, ticks, exifDirectories, nameof(FilterLogicA)); - int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); + ReadOnlyCollection locationContainers = FilterLogicB.GetLocationContainers(distanceSettings, compareSettings, compare, exifDirectories, nameof(FilterLogicA)); + int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds); string message = $") PreFiltering LocationContainers Face Files Collection - {totalSeconds} total second(s)"; compare.ConstructProgressBar(locationContainers.Count, message); foreach (LocationContainer locationContainer in locationContainers) diff --git a/Distance/Models/Stateless/FilterLogicB.cs b/Distance/Models/Stateless/FilterLogicB.cs index 61e88bb..d46d90f 100644 --- a/Distance/Models/Stateless/FilterLogicB.cs +++ b/Distance/Models/Stateless/FilterLogicB.cs @@ -61,11 +61,11 @@ internal static class FilterLogicB locationContainers.Add(locationContainer); } - internal static ReadOnlyCollection GetLocationContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollection exifDirectories, string sourceClass) + internal static ReadOnlyCollection GetLocationContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection exifDirectories, string sourceClass) { List results = []; int maxDegreeOfParallelism = compareSettings.MaxDegreeOfParallelism; - int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); + int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds); ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism }; string message = $") Building LocationContainers Face Files Collection {sourceClass} - {totalSeconds} total second(s)"; compare.ConstructProgressBar(exifDirectories.Count, message); diff --git a/Distance/Models/Stateless/FilterLogicC.cs b/Distance/Models/Stateless/FilterLogicC.cs index f85850f..ea1c4f8 100644 --- a/Distance/Models/Stateless/FilterLogicC.cs +++ b/Distance/Models/Stateless/FilterLogicC.cs @@ -24,23 +24,23 @@ internal static class FilterLogicC return results.AsReadOnly(); } - private static ReadOnlyCollection GetCombined(DistanceSettings distanceSettings, Shared.Models.Properties.ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollection exifDirectories, ReadOnlyCollection postFiltered) + private static ReadOnlyCollection GetCombined(DistanceSettings distanceSettings, Shared.Models.Properties.ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection exifDirectories, ReadOnlyCollection postFiltered) { List results = []; foreach (LocationContainer locationContainer in postFiltered) results.Add(locationContainer); - ReadOnlyCollection locationContainers = FilterLogicB.GetLocationContainers(distanceSettings, compareSettings, compare, ticks, exifDirectories, nameof(FilterLogicC)); + ReadOnlyCollection locationContainers = FilterLogicB.GetLocationContainers(distanceSettings, compareSettings, compare, exifDirectories, nameof(FilterLogicC)); foreach (LocationContainer locationContainer in locationContainers) results.Add(locationContainer); return results.AsReadOnly(); } - internal static ReadOnlyCollection GetMatrixLocationContainers(DistanceSettings distanceSettings, Shared.Models.Properties.ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollection mappedExifDirectoryWithEncoding, DistanceLimits distanceLimits, ReadOnlyCollection postFiltered) + internal static ReadOnlyCollection GetMatrixLocationContainers(DistanceSettings distanceSettings, Shared.Models.Properties.ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection mappedExifDirectoryWithEncoding, DistanceLimits distanceLimits, ReadOnlyCollection postFiltered) { List results = []; ReadOnlyCollection collection; - ReadOnlyCollection locationContainers = GetCombined(distanceSettings, compareSettings, compare, ticks, mappedExifDirectoryWithEncoding, postFiltered); - string message = $") Building Matrix - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)"; + ReadOnlyCollection locationContainers = GetCombined(distanceSettings, compareSettings, compare, mappedExifDirectoryWithEncoding, postFiltered); + string message = $") Building Matrix - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds)} total second(s)"; compare.ConstructProgressBar(postFiltered.Count, message); foreach (LocationContainer locationContainer in postFiltered) { diff --git a/Distance/Models/Stateless/FilterLogicD.cs b/Distance/Models/Stateless/FilterLogicD.cs index 8402781..568a1ac 100644 --- a/Distance/Models/Stateless/FilterLogicD.cs +++ b/Distance/Models/Stateless/FilterLogicD.cs @@ -55,7 +55,7 @@ internal static class FilterLogicD return result; } - internal static void SaveContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, int? updated, ReadOnlyCollection saveContainers) + internal static void SaveContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, int? updated, ReadOnlyCollection saveContainers) { string fileName; string checkFile; @@ -70,7 +70,7 @@ internal static class FilterLogicD if (!Directory.Exists(directory)) _ = Directory.CreateDirectory(directory); } - int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); + int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds); string message; if (updated is null) message = $") {saveContainers.Count:000} save(s) - {totalSeconds} total second(s)"; @@ -166,7 +166,7 @@ internal static class FilterLogicD } } - internal static ReadOnlyCollection GetSaveContainers(ResultSettings resultSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, string outputResolution, ReadOnlyDictionary onlyOne) + internal static ReadOnlyCollection GetSaveContainers(ResultSettings resultSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, string outputResolution, ReadOnlyDictionary onlyOne) { List results = []; RecordB recordB; @@ -205,14 +205,14 @@ internal static class FilterLogicD string cContentDirectory = Path.Combine(cResultsFullGroupDirectory, resultSettings.ResultContent); if (!Directory.Exists(cContentDirectory)) _ = Directory.CreateDirectory(cContentDirectory); - string eDistanceContentTicksDirectory = Path.Combine(eResultsFullGroupDirectory, ticks.ToString()); + string eDistanceContentTicksDirectory = Path.Combine(eResultsFullGroupDirectory, compare.Ticks.ToString()); if (!Directory.Exists(eDistanceContentTicksDirectory)) _ = Directory.CreateDirectory(eDistanceContentTicksDirectory); string d2FacePartsContentDirectory = Path.Combine(d2ResultsFullGroupDirectory, resultSettings.ResultContent); if (!Directory.Exists(d2FacePartsContentDirectory)) _ = Directory.CreateDirectory(d2FacePartsContentDirectory); string forceSingleImageHumanized = nameof(IMapLogic.ForceSingleImage).Humanize(LetterCasing.Title); - string message = $") Building Save Container Collection - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)"; + string message = $") Building Save Container Collection - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds)} total second(s)"; compare.ConstructProgressBar(onlyOne.Count, message); foreach (KeyValuePair keyValuePair in onlyOne) { diff --git a/Distance/Models/Stateless/IDistance.cs b/Distance/Models/Stateless/IDistance.cs index 9189845..bc50388 100644 --- a/Distance/Models/Stateless/IDistance.cs +++ b/Distance/Models/Stateless/IDistance.cs @@ -23,8 +23,8 @@ public interface IDistance public static ReadOnlyDictionary GetOnlyOne(DistanceSettings distanceSettings, ReadOnlyCollection matrix) => FilterLogicC.GetOnlyOne(distanceSettings, matrix); - public static ReadOnlyCollection GetMappedExifDirectoryWithEncoding(ICompare compare, long ticks, ReadOnlyCollection exifDirectories) => - FaceEncodingLogic.GetMappedExifDirectoryWithEncoding(compare, ticks, exifDirectories); + public static ReadOnlyCollection GetMappedExifDirectoryWithEncoding(ICompare compare, ReadOnlyCollection exifDirectories) => + FaceEncodingLogic.GetMappedExifDirectoryWithEncoding(compare, exifDirectories); public static ReadOnlyCollection GetPostFilterLocationContainer(ReadOnlyCollection preFiltered, DistanceLimits distanceLimits) => FilterLogicC.GetPostFilterLocationContainer(preFiltered, distanceLimits); @@ -32,26 +32,26 @@ public interface IDistance public static ReadOnlyDictionary> Extract(ICompareSettings compareSettings, ReadOnlyCollection exifDirectories) => MappedLogicA.Extract(compareSettings, exifDirectories); - public static void SaveContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, int? updated, ReadOnlyCollection saveContainers) => - FilterLogicD.SaveContainers(distanceSettings, compareSettings, compare, ticks, updated, saveContainers); + public static void SaveContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, int? updated, ReadOnlyCollection saveContainers) => + FilterLogicD.SaveContainers(distanceSettings, compareSettings, compare, updated, saveContainers); - public static ReadOnlyCollection GetSaveContainers(ResultSettings resultSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, string outputResolution, ReadOnlyDictionary onlyOne) => - FilterLogicD.GetSaveContainers(resultSettings, distanceSettings, compareSettings, compare, ticks, outputResolution, onlyOne); + public static ReadOnlyCollection GetSaveContainers(ResultSettings resultSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, string outputResolution, ReadOnlyDictionary onlyOne) => + FilterLogicD.GetSaveContainers(resultSettings, distanceSettings, compareSettings, compare, outputResolution, onlyOne); - public static ReadOnlyCollection GetMapped(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollections readOnlyCollections) => - MappedLogicA.GetMapped(resultSettings, metadataSettings, peopleSettings, distanceSettings, compareSettings, compare, ticks, readOnlyCollections); + public static ReadOnlyCollection GetMapped(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections) => + MappedLogicA.GetMapped(resultSettings, metadataSettings, peopleSettings, distanceSettings, compareSettings, compare, readOnlyCollections); - public static ReadOnlyCollection GetMatrixLocationContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollection mappedExifDirectoryWithEncoding, DistanceLimits distanceLimits, ReadOnlyCollection postFiltered) => - FilterLogicC.GetMatrixLocationContainers(distanceSettings, compareSettings, compare, ticks, mappedExifDirectoryWithEncoding, distanceLimits, postFiltered); + public static ReadOnlyCollection GetMatrixLocationContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection mappedExifDirectoryWithEncoding, DistanceLimits distanceLimits, ReadOnlyCollection postFiltered) => + FilterLogicC.GetMatrixLocationContainers(distanceSettings, compareSettings, compare, mappedExifDirectoryWithEncoding, distanceLimits, postFiltered); - public static ReadOnlyCollection GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary> keyValuePairs, ReadOnlyCollection exifDirectories) => - FilterLogicA.GetPreFilterLocationContainer(distanceSettings, compareSettings, compare, ticks, readOnlyCollections, keyValuePairs, exifDirectories); + public static ReadOnlyCollection GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary> keyValuePairs, ReadOnlyCollection exifDirectories) => + FilterLogicA.GetPreFilterLocationContainer(distanceSettings, compareSettings, compare, readOnlyCollections, keyValuePairs, exifDirectories); internal static ReadOnlyDictionary TestStatic_GetOnlyOne(DistanceSettings distanceSettings, ReadOnlyCollection matrix) => GetOnlyOne(distanceSettings, matrix); - internal static ReadOnlyCollection TestStatic_GetMappedExifDirectoryWithEncoding(ICompare compare, long ticks, ReadOnlyCollection exifDirectories) => - GetMappedExifDirectoryWithEncoding(compare, ticks, exifDirectories); + internal static ReadOnlyCollection TestStatic_GetMappedExifDirectoryWithEncoding(ICompare compare, ReadOnlyCollection exifDirectories) => + GetMappedExifDirectoryWithEncoding(compare, exifDirectories); internal static ReadOnlyCollection TestStatic_GetPostFilterLocationContainer(ReadOnlyCollection preFiltered, DistanceLimits distanceLimits) => GetPostFilterLocationContainer(preFiltered, distanceLimits); @@ -59,19 +59,19 @@ public interface IDistance internal static ReadOnlyDictionary> TestStatic_Extract(ICompareSettings compareSettings, ReadOnlyCollection exifDirectories) => Extract(compareSettings, exifDirectories); - internal static void TestStatic_SaveContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, int? updated, ReadOnlyCollection saveContainers) => - SaveContainers(distanceSettings, compareSettings, compare, ticks, updated, saveContainers); + internal static void TestStatic_SaveContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, int? updated, ReadOnlyCollection saveContainers) => + SaveContainers(distanceSettings, compareSettings, compare, updated, saveContainers); - internal static ReadOnlyCollection TestStatic_GetSaveContainers(ResultSettings resultSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, string outputResolution, ReadOnlyDictionary onlyOne) => - GetSaveContainers(resultSettings, distanceSettings, compareSettings, compare, ticks, outputResolution, onlyOne); + internal static ReadOnlyCollection TestStatic_GetSaveContainers(ResultSettings resultSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, string outputResolution, ReadOnlyDictionary onlyOne) => + GetSaveContainers(resultSettings, distanceSettings, compareSettings, compare, outputResolution, onlyOne); - internal static ReadOnlyCollection TestStatic_GetMapped(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollections readOnlyCollections) => - GetMapped(resultSettings, metadataSettings, peopleSettings, distanceSettings, compareSettings, compare, ticks, readOnlyCollections); + internal static ReadOnlyCollection TestStatic_GetMapped(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections) => + GetMapped(resultSettings, metadataSettings, peopleSettings, distanceSettings, compareSettings, compare, readOnlyCollections); - internal static ReadOnlyCollection TestStatic_GetMatrixLocationContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollection mappedExifDirectoryWithEncoding, DistanceLimits distanceLimits, ReadOnlyCollection postFiltered) => - GetMatrixLocationContainers(distanceSettings, compareSettings, compare, ticks, mappedExifDirectoryWithEncoding, distanceLimits, postFiltered); + internal static ReadOnlyCollection TestStatic_GetMatrixLocationContainers(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollection mappedExifDirectoryWithEncoding, DistanceLimits distanceLimits, ReadOnlyCollection postFiltered) => + GetMatrixLocationContainers(distanceSettings, compareSettings, compare, mappedExifDirectoryWithEncoding, distanceLimits, postFiltered); - internal static ReadOnlyCollection TestStatic_GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary> keyValuePairs, ReadOnlyCollection exifDirectories) => - GetPreFilterLocationContainer(distanceSettings, compareSettings, compare, ticks, readOnlyCollections, keyValuePairs, exifDirectories); + internal static ReadOnlyCollection TestStatic_GetPreFilterLocationContainer(DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections, ReadOnlyDictionary> keyValuePairs, ReadOnlyCollection exifDirectories) => + GetPreFilterLocationContainer(distanceSettings, compareSettings, compare, readOnlyCollections, keyValuePairs, exifDirectories); } \ No newline at end of file diff --git a/Distance/Models/Stateless/MappedLogicA.cs b/Distance/Models/Stateless/MappedLogicA.cs index 1d95016..16d8669 100644 --- a/Distance/Models/Stateless/MappedLogicA.cs +++ b/Distance/Models/Stateless/MappedLogicA.cs @@ -40,16 +40,16 @@ internal static class MappedLogicA return results.AsReadOnly(); } - internal static ReadOnlyCollection GetMapped(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, ReadOnlyCollections readOnlyCollections) + internal static ReadOnlyCollection GetMapped(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, ReadOnlyCollections readOnlyCollections) { List results = []; string eDistanceContentDirectory = Path.GetFullPath(IResult.GetResultsDateGroupDirectory(resultSettings, nameof(E_Distance), resultSettings.ResultContent)); - ReadOnlyCollection records = MappedLogicB.DeleteEmptyDirectoriesAndGetCollection(resultSettings, metadataSettings, peopleSettings, distanceSettings, compareSettings, compare, ticks, eDistanceContentDirectory, readOnlyCollections); + ReadOnlyCollection records = MappedLogicB.DeleteEmptyDirectoriesAndGetCollection(resultSettings, metadataSettings, peopleSettings, distanceSettings, compareSettings, compare, eDistanceContentDirectory, readOnlyCollections); ReadOnlyCollection mappedFiles = GetMappedFiles(resultSettings, metadataSettings, peopleSettings, compareSettings, readOnlyCollections, records); if (mappedFiles.Count > 0) { int maxDegreeOfParallelism = compareSettings.MaxDegreeOfParallelism; - int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); + int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds); string message = $") Building Mapped Face Files Collection - {totalSeconds} total second(s)"; ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism }; ReadOnlyDictionary> skipNotSkipCollection = readOnlyCollections.SkipNotSkipCollection; diff --git a/Distance/Models/Stateless/MappedLogicB.cs b/Distance/Models/Stateless/MappedLogicB.cs index 1ba5f00..6db03dc 100644 --- a/Distance/Models/Stateless/MappedLogicB.cs +++ b/Distance/Models/Stateless/MappedLogicB.cs @@ -24,7 +24,7 @@ internal static class MappedLogicB bool? IsLocationContainerDebugDirectory, float? TotalDays); - internal static ReadOnlyCollection DeleteEmptyDirectoriesAndGetCollection(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, string eDistanceContentDirectory, ReadOnlyCollections readOnlyCollections) + internal static ReadOnlyCollection DeleteEmptyDirectoriesAndGetCollection(ResultSettings resultSettings, MetadataSettings metadataSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, string eDistanceContentDirectory, ReadOnlyCollections readOnlyCollections) { List results = []; bool check; @@ -59,7 +59,7 @@ internal static class MappedLogicB distinct.Clear(); directoryNumber = 0; ticksDirectories = UpdateDateVerifyAndGetTicksDirectories(distanceSettings, eDistanceContentDirectory); - totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds); + totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - compare.Ticks).TotalSeconds); message = $"{i}) {ticksDirectories.Count:000} compile from and clean ticks Director(ies) - B - {totalSeconds} total second(s)"; compare.ConstructProgressBar(ticksDirectories.Count, message); foreach (TicksDirectory ticksDirectory in ticksDirectories) diff --git a/Face/Models/Stateless/Face.cs b/Face/Models/Stateless/Face.cs index 71bbcc2..e8b53d7 100644 --- a/Face/Models/Stateless/Face.cs +++ b/Face/Models/Stateless/Face.cs @@ -21,13 +21,13 @@ internal static class Face results.Add(exifDirectory); } - internal static ReadOnlyCollection GetExifDirectories(ResultSettings resultSettings, MetadataSettings metadataSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, string outputResolution) + internal static ReadOnlyCollection GetExifDirectories(ResultSettings resultSettings, MetadataSettings metadataSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, string outputResolution) { List results = []; FileInfo fileInfo; int maxDegreeOfParallelism = compareSettings.MaxDegreeOfParallelism; ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism }; - long? skipOlderThan = distanceSettings.SkipOlderThanDays < 1 ? null : new DateTime(ticks).AddDays(-distanceSettings.SkipOlderThanDays).Ticks; + long? skipOlderThan = distanceSettings.SkipOlderThanDays < 1 ? null : new DateTime(compare.Ticks).AddDays(-distanceSettings.SkipOlderThanDays).Ticks; string resultsFullGroupDirectory = Path.GetFullPath(IResult.GetResultsFullGroupDirectory(resultSettings, nameof(D_Face), outputResolution, diff --git a/Face/Models/Stateless/IFace.cs b/Face/Models/Stateless/IFace.cs index f334292..5c59a7b 100644 --- a/Face/Models/Stateless/IFace.cs +++ b/Face/Models/Stateless/IFace.cs @@ -8,9 +8,9 @@ namespace View_by_Distance.Face.Models.Stateless; public interface IFace { - ReadOnlyCollection TestStatic_GetExifDirectories(ResultSettings resultSettings, MetadataSettings metadataSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, string outputResolution) => - GetExifDirectories(resultSettings, metadataSettings, distanceSettings, compareSettings, compare, ticks, outputResolution); - static ReadOnlyCollection GetExifDirectories(ResultSettings resultSettings, MetadataSettings metadataSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, string outputResolution) => - Face.GetExifDirectories(resultSettings, metadataSettings, distanceSettings, compareSettings, compare, ticks, outputResolution); + ReadOnlyCollection TestStatic_GetExifDirectories(ResultSettings resultSettings, MetadataSettings metadataSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, string outputResolution) => + GetExifDirectories(resultSettings, metadataSettings, distanceSettings, compareSettings, compare, outputResolution); + static ReadOnlyCollection GetExifDirectories(ResultSettings resultSettings, MetadataSettings metadataSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, string outputResolution) => + Face.GetExifDirectories(resultSettings, metadataSettings, distanceSettings, compareSettings, compare, outputResolution); } \ No newline at end of file diff --git a/Rename/Rename.cs b/Rename/Rename.cs index bf6bcb5..b591aa1 100644 --- a/Rename/Rename.cs +++ b/Rename/Rename.cs @@ -18,6 +18,9 @@ namespace View_by_Distance.Rename; public partial class Rename : IRename, IDisposable { + public long Ticks { get; init; } + public int? CurrentTick => _ProgressBar?.CurrentTick; + private sealed record ToDo(string? Directory, FileInfo FileInfo, string File, @@ -125,10 +128,10 @@ public partial class Rename : IRename, IDisposable throw new NullReferenceException(nameof(console)); IRename rename = this; LogNetToHoursSince(logger); - long ticks = DateTime.Now.Ticks; + Ticks = DateTime.Now.Ticks; _ProgressBarOptions = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; Verify(logger, appSettings, rename); - RenameWork(logger, appSettings, rename, ticks); + RenameWork(logger, appSettings, rename); } private static void Verify(ILogger? logger, AppSettings appSettings, IRename rename) @@ -159,18 +162,18 @@ public partial class Rename : IRename, IDisposable logger?.LogInformation("It has been {net9TotalHours} hours since net9 was released", net9TotalHours); } - private void RenameWork(ILogger? logger, AppSettings appSettings, IRename rename, long ticks) + private void RenameWork(ILogger? logger, AppSettings appSettings, IRename rename) { ReadOnlyCollection ids = GetIds(appSettings.RenameSettings); string sourceDirectory = Path.GetFullPath(appSettings.ResultSettings.RootDirectory); if (!Directory.Exists(sourceDirectory)) _ = Directory.CreateDirectory(sourceDirectory); - logger?.LogInformation("{Ticks} {RootDirectory}", ticks, sourceDirectory); + logger?.LogInformation("{Ticks} {RootDirectory}", rename.Ticks, sourceDirectory); ReadOnlyCollection files = Directory.GetFiles(sourceDirectory, "*", SearchOption.AllDirectories).ToArray().AsReadOnly(); if (files.Count > 0) _ = IPath.DeleteEmptyDirectories(appSettings.ResultSettings.RootDirectory); - ReadOnlyCollection recordCollection = GetRecordCollection(logger, appSettings, rename, ticks, ids, sourceDirectory, files); - SaveIdentifiersToDisk(ticks, appSettings, recordCollection); + ReadOnlyCollection recordCollection = GetRecordCollection(logger, appSettings, rename, ids, sourceDirectory, files); + SaveIdentifiersToDisk(appSettings, rename, recordCollection); if (appSettings.RenameSettings.InPlace || appSettings.RenameSettings.InPlaceWithOriginalName) { if (recordCollection.Count > 0) @@ -203,13 +206,13 @@ public partial class Rename : IRename, IDisposable return results; } - private ReadOnlyCollection GetRecordCollection(ILogger? logger, AppSettings appSettings, IRename rename, long ticks, ReadOnlyCollection ids, string sourceDirectory, ReadOnlyCollection files) + private ReadOnlyCollection GetRecordCollection(ILogger? logger, AppSettings appSettings, IRename rename, ReadOnlyCollection ids, string sourceDirectory, ReadOnlyCollection files) { ReadOnlyCollection results; List collection; string? checkFile = string.IsNullOrEmpty(appSettings.RenameSettings.FirstPassFile) ? null : Path.Combine(sourceDirectory, appSettings.RenameSettings.FirstPassFile); if (string.IsNullOrEmpty(checkFile) || !File.Exists(checkFile)) - collection = GetRecordCollection(logger, appSettings, rename, ticks, ids, sourceDirectory, files, checkFile); + collection = GetRecordCollection(logger, appSettings, rename, ids, sourceDirectory, files, checkFile); else { string json = File.ReadAllText(checkFile); @@ -222,7 +225,7 @@ public partial class Rename : IRename, IDisposable return results; } - private List GetRecordCollection(ILogger? logger, AppSettings appSettings, IRename rename, long ticks, ReadOnlyCollection ids, string sourceDirectory, ReadOnlyCollection files, string? checkFile) + private List GetRecordCollection(ILogger? logger, AppSettings appSettings, IRename rename, ReadOnlyCollection ids, string sourceDirectory, ReadOnlyCollection files, string? checkFile) { List results; FirstPass firstPass; @@ -233,7 +236,7 @@ public partial class Rename : IRename, IDisposable if (appSettingsMaxDegreeOfParallelism == 1) { ReadOnlyDictionary> keyValuePairs = IMetadata.GetKeyValuePairs(files); - results = GetFirstPassCollection(logger, appSettings, rename, ticks, ids, metadata, keyValuePairs); + results = GetFirstPassCollection(logger, appSettings, rename, ids, metadata, keyValuePairs); } else { @@ -255,13 +258,13 @@ public partial class Rename : IRename, IDisposable if (!string.IsNullOrEmpty(checkFile)) { string json = JsonSerializer.Serialize(results, FirstPassCollectionSourceGenerationContext.Default.ListFirstPass); - File.WriteAllText(Path.Combine(sourceDirectory, $"{ticks}.json"), json); + File.WriteAllText(Path.Combine(sourceDirectory, $"{rename.Ticks}.json"), json); } return results; } - private List GetFirstPassCollection(ILogger? logger, AppSettings appSettings, IRename rename, long ticks, ReadOnlyCollection ids, A_Metadata metadata, ReadOnlyDictionary> keyValuePairs) + private List GetFirstPassCollection(ILogger? logger, AppSettings appSettings, IRename rename, ReadOnlyCollection ids, A_Metadata metadata, ReadOnlyDictionary> keyValuePairs) { List results = []; int index = -1; @@ -279,7 +282,7 @@ public partial class Rename : IRename, IDisposable if (keyValuePair.Value.Count > 2) throw new NotSupportedException("Too many sidecar files!"); SetFirstPassCollection(logger, appSettings, rename, ids, metadata, index, keyValuePair, results); - timeSpan = new(DateTime.Now.Ticks - ticks); + timeSpan = new(DateTime.Now.Ticks - rename.Ticks); if (timeSpan.TotalMilliseconds > appSettings.RenameSettings.MaxMilliSecondsPerCall) break; } @@ -465,7 +468,7 @@ public partial class Rename : IRename, IDisposable return results.AsReadOnly(); } - private static void SaveIdentifiersToDisk(long ticks, AppSettings appSettings, ReadOnlyCollection recordCollection) + private static void SaveIdentifiersToDisk(AppSettings appSettings, IRename rename, ReadOnlyCollection recordCollection) { string paddedId; Identifier identifier; @@ -480,7 +483,7 @@ public partial class Rename : IRename, IDisposable identifiers.Add(identifier); } string json = JsonSerializer.Serialize(identifiers.OrderBy(l => l.PaddedId).ToArray(), IdentifierCollectionSourceGenerationContext.Default.IdentifierArray); - _ = IPath.WriteAllText(Path.Combine(aMetadataCollectionDirectory, $"{ticks}.json"), json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null); + _ = IPath.WriteAllText(Path.Combine(aMetadataCollectionDirectory, $"{rename.Ticks}.json"), json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null); } private static ReadOnlyCollection GetToDoCollection(AppSettings appSettings, DirectoryInfo directoryInfo, ReadOnlyCollection ids, ReadOnlyCollection files, ReadOnlyCollection recordCollection) @@ -706,7 +709,7 @@ public partial class Rename : IRename, IDisposable foreach (ToDo toDo in toDoCollection) { if (useProgressBar) - _ProgressBar?.Tick(); + rename?.Tick(); if (!toDo.FileInfo.Exists) continue; if (toDo.JsonFile) @@ -731,8 +734,6 @@ public partial class Rename : IRename, IDisposable results.Add($"{toDo.FileInfo.FullName}\t{toDo.File}"); } } - if (useProgressBar) - _ProgressBar?.Dispose(); return results.AsReadOnly(); } diff --git a/Shared/Models/Stateless/ICompare.cs b/Shared/Models/Stateless/ICompare.cs index a7e362c..57ffa1d 100644 --- a/Shared/Models/Stateless/ICompare.cs +++ b/Shared/Models/Stateless/ICompare.cs @@ -4,6 +4,8 @@ public interface ICompare { void Tick(); + long Ticks { get; } + int? CurrentTick { get; } void ConstructProgressBar(int maxTicks, string message); } \ No newline at end of file diff --git a/Shared/Models/Stateless/IRename.cs b/Shared/Models/Stateless/IRename.cs index cbb7313..b677120 100644 --- a/Shared/Models/Stateless/IRename.cs +++ b/Shared/Models/Stateless/IRename.cs @@ -5,9 +5,11 @@ namespace View_by_Distance.Shared.Models.Stateless; public interface IRename { + void Tick(); + long Ticks { get; } + int? CurrentTick { get; } ReadOnlyCollection ConvertAndGetFastForwardMovingPictureExpertsGroupFiles(ResultSettings resultSettings, FilePath filePath); DeterministicHashCode GetDeterministicHashCode(FilePath filePath); void ConstructProgressBar(int maxTicks, string message); - void Tick(); } \ No newline at end of file diff --git a/Shared/Models/Stateless/IWindows.cs b/Shared/Models/Stateless/IWindows.cs index db44a25..408b9fe 100644 --- a/Shared/Models/Stateless/IWindows.cs +++ b/Shared/Models/Stateless/IWindows.cs @@ -5,10 +5,12 @@ namespace View_by_Distance.Shared.Models.Stateless; public interface IWindows { + void Tick(); + long Ticks { get; } + int? CurrentTick { get; } ReadOnlyCollection ConvertAndGetFastForwardMovingPictureExpertsGroupFiles(ResultSettings resultSettings, HttpClient? httpClient, FilePath filePath); DeterministicHashCode GetDeterministicHashCode(HttpClient? httpClient, FilePath filePath); DeterministicHashCode GetDeterministicHashCode(HttpClient httpClient, Uri uri); void ConstructProgressBar(int maxTicks, string message); - void Tick(); } \ No newline at end of file diff --git a/Shared/Models/Stateless/Id.cs b/Shared/Models/Stateless/Id.cs index bb18eee..29843ca 100644 --- a/Shared/Models/Stateless/Id.cs +++ b/Shared/Models/Stateless/Id.cs @@ -28,10 +28,17 @@ internal abstract class Id (byte)(filePath.Id > -1 ? 8 : 2); internal static byte GetHasDateTimeOriginal(ResultSettings resultSettings, FilePath filePath) => - (byte)(!resultSettings.ValidVideoFormatExtensions.Contains(filePath.ExtensionLowered) ? filePath.Id > -1 ? 9 : 1 : filePath.Id > -1 ? 6 : 4); + (byte)(IsIgnoreOrValidVideoFormatExtension(resultSettings, filePath) ? filePath.Id > -1 ? 6 : 4 : filePath.Id > -1 ? 9 : 1); + + private static bool IsIgnoreOrValidVideoFormatExtension(ResultSettings resultSettings, FilePath filePath) => + IsIgnoreOrValidVideoFormatExtension(resultSettings, filePath.ExtensionLowered); + + private static bool IsIgnoreOrValidVideoFormatExtension(ResultSettings resultSettings, string extensionLowered) => + resultSettings.IgnoreExtensions.Contains(extensionLowered) + || resultSettings.ValidVideoFormatExtensions.Contains(extensionLowered); internal static byte GetMissingDateTimeOriginal(ResultSettings resultSettings, FilePath filePath) => - (byte)(!resultSettings.ValidVideoFormatExtensions.Contains(filePath.ExtensionLowered) ? filePath.Id > -1 ? 7 : 3 : filePath.Id > -1 ? 5 : 0); + (byte)(IsIgnoreOrValidVideoFormatExtension(resultSettings, filePath) ? filePath.Id > -1 ? 5 : 0 : filePath.Id > -1 ? 7 : 3); internal static int GetId(ResultSettings resultSettings, MetadataSettings metadataSettings, string intelligentId) { @@ -81,18 +88,18 @@ internal abstract class Id } else if (id > -1) { - if (!resultSettings.ValidVideoFormatExtensions.Contains(extensionLowered)) - key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 8 : hasDateTimeOriginal.Value ? 9 : 7; - else + if (IsIgnoreOrValidVideoFormatExtension(resultSettings, extensionLowered)) key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? throw new NotImplementedException() : hasDateTimeOriginal.Value ? 6 : 5; + else + key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 8 : hasDateTimeOriginal.Value ? 9 : 7; value = id.ToString().PadLeft(metadataSettings.IntMinValueLength, '0'); } else { - if (!resultSettings.ValidVideoFormatExtensions.Contains(extensionLowered)) - key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 2 : hasDateTimeOriginal.Value ? 1 : 3; - else + if (IsIgnoreOrValidVideoFormatExtension(resultSettings, extensionLowered)) key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? throw new NotImplementedException() : hasDateTimeOriginal.Value ? 4 : 0; + else + key = hasIgnoreKeyword is not null && hasIgnoreKeyword.Value ? 2 : hasDateTimeOriginal.Value ? 1 : 3; value = id.ToString()[1..].PadLeft(metadataSettings.IntMinValueLength, '0'); } for (int i = value.Length - resultSettings.ResultAllInOneSubdirectoryLength - 1; i > -1; i--) diff --git a/Windows/Windows.cs b/Windows/Windows.cs index 52cd8f5..f309537 100644 --- a/Windows/Windows.cs +++ b/Windows/Windows.cs @@ -17,6 +17,9 @@ namespace View_by_Distance.Windows; public partial class Windows : IWindows, IDisposable { + public long Ticks { get; init; } + public int? CurrentTick => _ProgressBar?.CurrentTick; + private ProgressBar? _ProgressBar; private readonly ProgressBarOptions _ProgressBarOptions; @@ -157,9 +160,9 @@ public partial class Windows : IWindows, IDisposable throw new NullReferenceException(nameof(console)); IWindows windows = this; LogNetToHoursSince(logger); - long ticks = DateTime.Now.Ticks; + Ticks = DateTime.Now.Ticks; _ProgressBarOptions = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true }; - WindowsWork(logger, appSettings, windows, ticks); + WindowsWork(logger, appSettings, windows); } private static void LogNetToHoursSince(ILogger? logger) @@ -178,7 +181,7 @@ public partial class Windows : IWindows, IDisposable logger?.LogInformation("It has been {net9TotalHours} hours since net9 was released", net9TotalHours); } - private void WindowsWork(ILogger? logger, AppSettings appSettings, IWindows windows, long ticks) + private void WindowsWork(ILogger? logger, AppSettings appSettings, IWindows windows) { if (appSettings.WindowsSettings.VerifyOnly && !string.IsNullOrEmpty(appSettings.WindowsSettings.Host) && !string.IsNullOrEmpty(appSettings.WindowsSettings.Page)) Verify(logger, appSettings, windows, appSettings.WindowsSettings.Host, appSettings.WindowsSettings.Page); @@ -187,8 +190,8 @@ public partial class Windows : IWindows, IDisposable string sourceDirectory = Path.GetFullPath(appSettings.ResultSettings.RootDirectory); if (!Directory.Exists(sourceDirectory)) _ = Directory.CreateDirectory(sourceDirectory); - logger?.LogInformation("{Ticks} {RootDirectory}", ticks, sourceDirectory); - WindowsWork(logger, appSettings, windows, ticks, sourceDirectory); + logger?.LogInformation("{Ticks} {RootDirectory}", windows.Ticks, sourceDirectory); + WindowsWork(logger, appSettings, windows, sourceDirectory); } } @@ -271,7 +274,7 @@ public partial class Windows : IWindows, IDisposable messages.Add($"!{nginxFileSystem.Name}.StartsWith({paddedId})"); } - private void WindowsWork(ILogger? logger, AppSettings appSettings, IWindows windows, long ticks, string sourceDirectory) + private void WindowsWork(ILogger? logger, AppSettings appSettings, IWindows windows, string sourceDirectory) { ReadOnlyCollection results; ReadOnlyCollection files = Directory.GetFiles(sourceDirectory, "*", SearchOption.AllDirectories).AsReadOnly(); @@ -286,7 +289,7 @@ public partial class Windows : IWindows, IDisposable else results = WindowsAsynchronousWork(appSettings, windows, files, metadata, appSettingsMaxDegreeOfParallelism); string json = JsonSerializer.Serialize(results, FirstPassCollectionSourceGenerationContext.Default.ListFirstPass); - File.WriteAllText(Path.Combine(sourceDirectory, $"{ticks}.json"), json); + File.WriteAllText(Path.Combine(sourceDirectory, $"{windows.Ticks}.json"), json); } private static ReadOnlyCollection WindowsSynchronousWork(ILogger? logger, AppSettings appSettings, IWindows windows, IEnumerable files, A_Metadata metadata) @@ -394,7 +397,7 @@ public partial class Windows : IWindows, IDisposable List metadataGroups = []; ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = appSettingsMaxDegreeOfParallelism }; files.AsParallel().ForAll(IMetadata.SetExifDirectoryCollection(windows, appSettings.ResultSettings, appSettings.MetadataSettings, metadata, distinct, metadataGroups)); - if (_ProgressBar?.CurrentTick != results.Count) + if (windows?.CurrentTick != results.Count) throw new NotSupportedException(); foreach (MetadataGroup metadataGroup in metadataGroups) {