From d8013da912684d2f793a85902cd22f8d2d478e90 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Sun, 3 Nov 2024 10:33:56 -0700 Subject: [PATCH] ResultContentCollection ValidVideoFormatExtensions --- BlurHash/Models/BlurHasher.cs | 6 +++--- Compare/Compare.cs | 2 +- Copy-Distinct/CopyDistinct.cs | 7 ++++--- Face/Models/_D_Face.cs | 6 +++--- FaceParts/Models/_D2_FaceParts.cs | 6 +++--- Instance/DlibDotNet.cs | 6 +++--- Metadata/Models/B_Metadata.cs | 2 +- Property/Models/A_Property.cs | 2 +- Property/Models/Binder/Configuration.cs | 6 ++++++ Property/Models/Configuration.cs | 6 ++++++ Resize/Models/_C_Resize.cs | 6 +++--- Set-Created-Date/SetCreatedDate.cs | 2 +- .../Models/Properties/IPropertyConfiguration.cs | 2 ++ Shared/Models/Stateless/Methods/IDirectory.cs | 16 ++++++++-------- Shared/Models/Stateless/Methods/IPath.cs | 4 ++-- Shared/Models/Stateless/Methods/XDirectory.cs | 7 ++++++- Shared/Models/Stateless/Methods/XPath.cs | 12 ++++++------ 17 files changed, 59 insertions(+), 39 deletions(-) diff --git a/BlurHash/Models/BlurHasher.cs b/BlurHash/Models/BlurHasher.cs index 0e84ff2..a8d6c00 100644 --- a/BlurHash/Models/BlurHasher.cs +++ b/BlurHash/Models/BlurHasher.cs @@ -10,8 +10,8 @@ namespace View_by_Distance.BlurHash.Models; public class C2_BlurHasher : IBlurHasher { - private readonly Dictionary _FileGroups; private readonly IPropertyConfiguration _PropertyConfiguration; + private readonly Dictionary> _FileGroups; public C2_BlurHasher(IPropertyConfiguration propertyConfiguration) { @@ -22,8 +22,8 @@ public class C2_BlurHasher : IBlurHasher public void Update(string resultsFullGroupDirectory) { _FileGroups.Clear(); - ReadOnlyDictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, resultsFullGroupDirectory, [_PropertyConfiguration.ResultContent, _PropertyConfiguration.ResultSingleton]); - foreach (KeyValuePair keyValuePair in keyValuePairs) + ReadOnlyDictionary> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, resultsFullGroupDirectory, [_PropertyConfiguration.ResultContent, _PropertyConfiguration.ResultSingleton]); + foreach (KeyValuePair> keyValuePair in keyValuePairs) _FileGroups.Add(keyValuePair.Key, keyValuePair.Value); } diff --git a/Compare/Compare.cs b/Compare/Compare.cs index 43ad3e9..9bacc79 100644 --- a/Compare/Compare.cs +++ b/Compare/Compare.cs @@ -211,7 +211,7 @@ public class Compare } _Logger?.LogInformation(". . ."); } - string aPropertyContentCollectionDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(propertyConfiguration, nameof(A_Property), "[()]"); + string aPropertyContentCollectionDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(propertyConfiguration, nameof(A_Property), propertyConfiguration.ResultContentCollection); ThirdPassToMove(propertyConfiguration, mapLogic, propertyLogic, containers, aPropertyContentCollectionDirectory); if (!isSilent) { diff --git a/Copy-Distinct/CopyDistinct.cs b/Copy-Distinct/CopyDistinct.cs index eea9737..2d04dfc 100644 --- a/Copy-Distinct/CopyDistinct.cs +++ b/Copy-Distinct/CopyDistinct.cs @@ -18,8 +18,8 @@ public class CopyDistinct private readonly Configuration _Configuration; private readonly IsEnvironment _IsEnvironment; private readonly IConfigurationRoot _ConfigurationRoot; - private readonly ReadOnlyDictionary _FileGroups; private readonly Property.Models.Configuration _PropertyConfiguration; + private readonly ReadOnlyDictionary> _FileGroups; public CopyDistinct(List args, ILogger logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) { @@ -179,9 +179,10 @@ public class CopyDistinct { progressBar = new(count, message, options); string key = string.IsNullOrEmpty(_AppSettings.ResultDirectoryKey) ? _PropertyConfiguration.ResultAllInOne : _AppSettings.ResultDirectoryKey; - string[] directories = _FileGroups[key]; + if (key != _PropertyConfiguration.ResultContent) + throw new NotImplementedException("Changed but didn't update!"); ReadOnlyCollection> filePathsCollection = IDirectory.GetFilePathCollections(_Configuration.PropertyConfiguration, filesCollection); - (distinctDirectories, toDoCollection) = IDirectory.GetToDoCollection(_PropertyConfiguration, _AppSettings.CopyDuplicates, _AppSettings.IfCanUseId, filePathsCollection, directories, () => progressBar.Tick()); + (distinctDirectories, toDoCollection) = IDirectory.GetToDoCollection(_PropertyConfiguration, _AppSettings.CopyDuplicates, _AppSettings.IfCanUseId, filePathsCollection, _FileGroups, () => progressBar.Tick()); progressBar.Dispose(); } foreach (string distinctDirectory in distinctDirectories) diff --git a/Face/Models/_D_Face.cs b/Face/Models/_D_Face.cs index 844036d..08b6252 100644 --- a/Face/Models/_D_Face.cs +++ b/Face/Models/_D_Face.cs @@ -42,11 +42,11 @@ public class D_Face : IFaceD private readonly int _FaceDistanceHiddenImageFactor; private readonly EncoderParameters _EncoderParameters; private readonly ImageCodecInfo _HiddenImageCodecInfo; - private readonly Dictionary _FileGroups; private readonly bool _ForceFaceLastWriteTimeToCreationTime; private readonly EncoderParameters _HiddenEncoderParameters; private readonly IPropertyConfiguration _PropertyConfiguration; private readonly JsonSerializerOptions _WriteIndentedAndWhenWritingNull; + private readonly Dictionary> _FileGroups; public D_Face( string argZero, @@ -102,8 +102,8 @@ public class D_Face : IFaceD public void Update(string dResultsFullGroupDirectory) { _FileGroups.Clear(); - ReadOnlyDictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, [_PropertyConfiguration.ResultCollection, _PropertyConfiguration.ResultContent]); - foreach (KeyValuePair keyValuePair in keyValuePairs) + ReadOnlyDictionary> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, [_PropertyConfiguration.ResultCollection, _PropertyConfiguration.ResultContent]); + foreach (KeyValuePair> keyValuePair in keyValuePairs) _FileGroups.Add(keyValuePair.Key, keyValuePair.Value); } diff --git a/FaceParts/Models/_D2_FaceParts.cs b/FaceParts/Models/_D2_FaceParts.cs index 8784d07..03bf81a 100644 --- a/FaceParts/Models/_D2_FaceParts.cs +++ b/FaceParts/Models/_D2_FaceParts.cs @@ -31,8 +31,8 @@ public class D2_FaceParts private readonly ConstructorInfo _ConstructorInfo; private readonly bool _OverrideForFaceLandmarkImages; private readonly EncoderParameters _EncoderParameters; - private readonly Dictionary _FileGroups; private readonly IPropertyConfiguration _PropertyConfiguration; + private readonly Dictionary> _FileGroups; public D2_FaceParts(IPropertyConfiguration propertyConfiguration, ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension, bool checkDFaceAndUpWriteDates, bool overrideForFaceLandmarkImages) { @@ -56,8 +56,8 @@ public class D2_FaceParts public void Update(string dResultsFullGroupDirectory) { _FileGroups.Clear(); - ReadOnlyDictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, [_PropertyConfiguration.ResultContent]); - foreach (KeyValuePair keyValuePair in keyValuePairs) + ReadOnlyDictionary> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, dResultsFullGroupDirectory, [_PropertyConfiguration.ResultContent]); + foreach (KeyValuePair> keyValuePair in keyValuePairs) _FileGroups.Add(keyValuePair.Key, keyValuePair.Value); } diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index 9fc0e7a..2f46589 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -960,7 +960,7 @@ public partial class DlibDotNet : IDlibDotNet, IDisposable (_, _, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution); string dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, _Configuration.PropertyConfiguration.ResultContent); string d2FacePartsContentDirectory = Path.Combine(d2ResultsFullGroupDirectory, _Configuration.PropertyConfiguration.ResultContent); - string d2FacePartsContentCollectionDirectory = Path.Combine(d2ResultsFullGroupDirectory, "[()]"); + string d2FacePartsContentCollectionDirectory = Path.Combine(d2ResultsFullGroupDirectory, _Configuration.PropertyConfiguration.ResultContentCollection); if (distinctValidImageMappingCollection.Count > 0) { Shared.Models.Stateless.Methods.IPath.ChangeDateForEmptyDirectories(d2FacePartsContentDirectory, ticks); @@ -1494,13 +1494,13 @@ public partial class DlibDotNet : IDlibDotNet, IDisposable ProgressBar progressBar; string filesCollectionRootDirectory = _Configuration.PropertyConfiguration.RootDirectory; (string cResultsFullGroupDirectory, _, _, _) = GetResultsFullGroupDirectories(outputResolution); - IReadOnlyDictionary fileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_Configuration.PropertyConfiguration, cResultsFullGroupDirectory, [_Configuration.PropertyConfiguration.ResultContent]); + IReadOnlyDictionary> fileGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_Configuration.PropertyConfiguration, cResultsFullGroupDirectory, [_Configuration.PropertyConfiguration.ResultContent, _Configuration.PropertyConfiguration.ResultContentCollection]); ReadOnlyCollection> filePathsCollection = IDirectory.GetFilePathCollections(_Configuration.PropertyConfiguration, filesCollectionRootDirectory, directorySearchFilter, fileSearchFilter, useCeilingAverage: false); int count = filePathsCollection.Select(l => l.Count).Sum(); bool filesCollectionCountIsOne = IsFilesCollectionCountIsOne(filePathsCollection); string message = $") Selecting for ## pattern directory - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)"; progressBar = new(count, message, options); - (string[] distinctDirectories, List<(FilePath, string)> toDoCollection) = IDirectory.GetToDoCollection(_Configuration.PropertyConfiguration, filePathsCollection, fileGroups[_Configuration.PropertyConfiguration.ResultContent], () => progressBar.Tick()); + (string[] distinctDirectories, List<(FilePath, string)> toDoCollection) = IDirectory.GetToDoCollection(_Configuration.PropertyConfiguration, filePathsCollection, fileGroups, () => progressBar.Tick()); progressBar.Dispose(); foreach (string distinctDirectory in distinctDirectories) { diff --git a/Metadata/Models/B_Metadata.cs b/Metadata/Models/B_Metadata.cs index 104c397..25406e4 100644 --- a/Metadata/Models/B_Metadata.cs +++ b/Metadata/Models/B_Metadata.cs @@ -16,8 +16,8 @@ public class B_Metadata : IMetadata private readonly bool _PropertiesChangedForMetadata; private readonly IPropertyConfiguration _PropertyConfiguration; private readonly bool _ForceMetadataLastWriteTimeToCreationTime; - private readonly ReadOnlyDictionary _FileGroups; private readonly JsonSerializerOptions _WriteIndentedJsonSerializerOptions; + private readonly ReadOnlyDictionary> _FileGroups; public B_Metadata(IPropertyConfiguration propertyConfiguration) { diff --git a/Property/Models/A_Property.cs b/Property/Models/A_Property.cs index 714e9e4..e7c81b8 100644 --- a/Property/Models/A_Property.cs +++ b/Property/Models/A_Property.cs @@ -22,7 +22,7 @@ public class A_Property private readonly Configuration _Configuration; private readonly List _AngleBracketCollection; private readonly IPropertyConfiguration _PropertyConfiguration; - private readonly ReadOnlyDictionary _FileGroups; + private readonly ReadOnlyDictionary> _FileGroups; public A_Property(int maxDegreeOfParallelism, Configuration propertyConfiguration, string outputExtension, bool reverse, string aResultsFullGroupDirectory) { diff --git a/Property/Models/Binder/Configuration.cs b/Property/Models/Binder/Configuration.cs index 8151bd1..9c87a25 100644 --- a/Property/Models/Binder/Configuration.cs +++ b/Property/Models/Binder/Configuration.cs @@ -28,9 +28,11 @@ public class Configuration public int? ResultAllInOneSubdirectoryLength { get; set; } public string? ResultCollection { get; set; } public string? ResultContent { get; set; } + public string? ResultContentCollection { get; set; } public string? ResultSingleton { get; set; } public string? RootDirectory { get; set; } public string[]? ValidImageFormatExtensions { get; set; } + public string[]? ValidVideoFormatExtensions { get; set; } public string[]? VerifyToSeason { get; set; } public override string ToString() @@ -81,9 +83,11 @@ public class Configuration if (configuration.ResultAllInOneSubdirectoryLength is null) throw new NullReferenceException(nameof(configuration.ResultAllInOneSubdirectoryLength)); if (configuration.ResultCollection is null) throw new NullReferenceException(nameof(configuration.ResultCollection)); if (configuration.ResultContent is null) throw new NullReferenceException(nameof(configuration.ResultContent)); + if (configuration.ResultContentCollection is null) throw new NullReferenceException(nameof(configuration.ResultContentCollection)); if (configuration.ResultSingleton is null) throw new NullReferenceException(nameof(configuration.ResultSingleton)); if (configuration.RootDirectory is null) throw new NullReferenceException(nameof(configuration.RootDirectory)); if (configuration.ValidImageFormatExtensions is null) throw new NullReferenceException(nameof(configuration.ValidImageFormatExtensions)); + if (configuration.ValidVideoFormatExtensions is null) throw new NullReferenceException(nameof(configuration.ValidVideoFormatExtensions)); // if (configuration.VerifyToSeason is null) throw new NullReferenceException(nameof(configuration.VerifyToSeason)); result = new(configuration.DateGroup, configuration.FileNameDirectorySeparator, @@ -106,9 +110,11 @@ public class Configuration configuration.ResultAllInOneSubdirectoryLength.Value, configuration.ResultCollection, configuration.ResultContent, + configuration.ResultContentCollection, configuration.ResultSingleton, Path.GetFullPath(configuration.RootDirectory), configuration.ValidImageFormatExtensions, + configuration.ValidVideoFormatExtensions, configuration.VerifyToSeason ?? []); return result; } diff --git a/Property/Models/Configuration.cs b/Property/Models/Configuration.cs index 51d72cd..55b3c15 100644 --- a/Property/Models/Configuration.cs +++ b/Property/Models/Configuration.cs @@ -31,8 +31,10 @@ public class Configuration : Shared.Models.Properties.IPropertyConfiguration public int ResultAllInOneSubdirectoryLength { init; get; } public string ResultCollection { init; get; } public string ResultContent { init; get; } + public string ResultContentCollection { init; get; } public string ResultSingleton { init; get; } public string[] ValidImageFormatExtensions { init; get; } + public string[] ValidVideoFormatExtensions { init; get; } [JsonConstructor] public Configuration(string dateGroup, @@ -56,9 +58,11 @@ public class Configuration : Shared.Models.Properties.IPropertyConfiguration int resultAllInOneSubdirectoryLength, string resultCollection, string resultContent, + string resultContentCollection, string resultSingleton, string rootDirectory, string[] validImageFormatExtensions, + string[] validVideoFormatExtensions, string[] verifyToSeason) { DateGroup = dateGroup; @@ -82,9 +86,11 @@ public class Configuration : Shared.Models.Properties.IPropertyConfiguration ResultAllInOneSubdirectoryLength = resultAllInOneSubdirectoryLength; ResultCollection = resultCollection; ResultContent = resultContent; + ResultContentCollection = resultContentCollection; ResultSingleton = resultSingleton; _RootDirectory = rootDirectory; ValidImageFormatExtensions = validImageFormatExtensions; + ValidVideoFormatExtensions = validVideoFormatExtensions; } public override string ToString() diff --git a/Resize/Models/_C_Resize.cs b/Resize/Models/_C_Resize.cs index 4cc2d35..40467e1 100644 --- a/Resize/Models/_C_Resize.cs +++ b/Resize/Models/_C_Resize.cs @@ -37,10 +37,10 @@ public class C_Resize private readonly int _OutputResolutionHeightIndex; private readonly EncoderParameters _EncoderParameters; private readonly int _OutputResolutionOrientationIndex; - private readonly Dictionary _FileGroups; private readonly bool _ForceResizeLastWriteTimeToCreationTime; private readonly IPropertyConfiguration _PropertyConfiguration; private readonly JsonSerializerOptions _WriteIndentedJsonSerializerOptions; + private readonly Dictionary> _FileGroups; public C_Resize(IPropertyConfiguration propertyConfiguration, bool forceResizeLastWriteTimeToCreationTime, bool overrideForResizeImages, bool propertiesChangedForResize, string[] validResolutions, ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) { @@ -75,8 +75,8 @@ public class C_Resize public void Update(string cResultsFullGroupDirectory) { _FileGroups.Clear(); - ReadOnlyDictionary keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, cResultsFullGroupDirectory, [_PropertyConfiguration.ResultSingleton]); - foreach (KeyValuePair keyValuePair in keyValuePairs) + ReadOnlyDictionary> keyValuePairs = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(_PropertyConfiguration, cResultsFullGroupDirectory, [_PropertyConfiguration.ResultSingleton]); + foreach (KeyValuePair> keyValuePair in keyValuePairs) _FileGroups.Add(keyValuePair.Key, keyValuePair.Value); } diff --git a/Set-Created-Date/SetCreatedDate.cs b/Set-Created-Date/SetCreatedDate.cs index 0bd1d49..5795dcf 100644 --- a/Set-Created-Date/SetCreatedDate.cs +++ b/Set-Created-Date/SetCreatedDate.cs @@ -21,8 +21,8 @@ public class SetCreatedDate private readonly Configuration _Configuration; private readonly IsEnvironment _IsEnvironment; private readonly IConfigurationRoot _ConfigurationRoot; - private readonly ReadOnlyDictionary _FileGroups; private readonly Property.Models.Configuration _PropertyConfiguration; + private readonly ReadOnlyDictionary> _FileGroups; public SetCreatedDate(List args, ILogger logger, IsEnvironment isEnvironment, IConfigurationRoot configurationRoot, AppSettings appSettings, string workingDirectory, bool isSilent, IConsole console) { diff --git a/Shared/Models/Properties/IPropertyConfiguration.cs b/Shared/Models/Properties/IPropertyConfiguration.cs index 445a6e7..0039228 100644 --- a/Shared/Models/Properties/IPropertyConfiguration.cs +++ b/Shared/Models/Properties/IPropertyConfiguration.cs @@ -14,8 +14,10 @@ public interface IPropertyConfiguration public int ResultAllInOneSubdirectoryLength { init; get; } public string ResultCollection { init; get; } public string ResultContent { init; get; } + public string ResultContentCollection { init; get; } public string ResultSingleton { init; get; } public string[] ValidImageFormatExtensions { init; get; } + public string[] ValidVideoFormatExtensions { init; get; } public string? ModelName { get; } public int? NumberOfJitters { get; } public int? NumberOfTimesToUpsample { get; } diff --git a/Shared/Models/Stateless/Methods/IDirectory.cs b/Shared/Models/Stateless/Methods/IDirectory.cs index 77d3ff2..fde7b29 100644 --- a/Shared/Models/Stateless/Methods/IDirectory.cs +++ b/Shared/Models/Stateless/Methods/IDirectory.cs @@ -30,15 +30,15 @@ public interface IDirectory static void MoveFiles(List files, string find, string replace) => XDirectory.MoveFiles(files, find, replace); - (string[], List<(FilePath, string)>) TestStatic_GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, ReadOnlyCollection> filePathsCollection, string[] directories, Action? tick) => - GetToDoCollection(propertyConfiguration, filePathsCollection, directories, tick); - static (string[], List<(FilePath, string)>) GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, ReadOnlyCollection> filePathsCollection, string[] directories, Action? tick) => - XDirectory.GetToDoCollection(propertyConfiguration, copyDuplicates: false, ifCanUseId: true, filePathsCollection, directories, tick); + (string[], List<(FilePath, string)>) TestStatic_GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, ReadOnlyCollection> filePathsCollection, IReadOnlyDictionary> fileGroups, Action? tick) => + GetToDoCollection(propertyConfiguration, filePathsCollection, fileGroups, tick); + static (string[], List<(FilePath, string)>) GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, ReadOnlyCollection> filePathsCollection, IReadOnlyDictionary> fileGroups, Action? tick) => + XDirectory.GetToDoCollection(propertyConfiguration, copyDuplicates: false, ifCanUseId: true, filePathsCollection, fileGroups, tick); - (string[], List<(FilePath, string)>) TestStatic_GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, bool copyDuplicates, bool ifCanUseId, ReadOnlyCollection> filePathsCollection, string[] directories, Action? tick) => - GetToDoCollection(propertyConfiguration, copyDuplicates, ifCanUseId, filePathsCollection, directories, tick); - static (string[], List<(FilePath, string)>) GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, bool copyDuplicates, bool ifCanUseId, ReadOnlyCollection> filePathsCollection, string[] directories, Action? tick) => - XDirectory.GetToDoCollection(propertyConfiguration, copyDuplicates, ifCanUseId, filePathsCollection, directories, tick); + (string[], List<(FilePath, string)>) TestStatic_GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, bool copyDuplicates, bool ifCanUseId, ReadOnlyCollection> filePathsCollection, IReadOnlyDictionary> fileGroups, Action? tick) => + GetToDoCollection(propertyConfiguration, copyDuplicates, ifCanUseId, filePathsCollection, fileGroups, tick); + static (string[], List<(FilePath, string)>) GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, bool copyDuplicates, bool ifCanUseId, ReadOnlyCollection> filePathsCollection, IReadOnlyDictionary> fileGroups, Action? tick) => + XDirectory.GetToDoCollection(propertyConfiguration, copyDuplicates, ifCanUseId, filePathsCollection, fileGroups, tick); List TestStatic_CopyOrMove(List<(FilePath, string)> toDoCollection, bool move, bool moveBack, Action? tick) => CopyOrMove(toDoCollection, move, moveBack, tick); diff --git a/Shared/Models/Stateless/Methods/IPath.cs b/Shared/Models/Stateless/Methods/IPath.cs index 3def722..4af440e 100644 --- a/Shared/Models/Stateless/Methods/IPath.cs +++ b/Shared/Models/Stateless/Methods/IPath.cs @@ -67,9 +67,9 @@ public interface IPath static (string, int) GetDirectoryNameAndIndex(IPropertyConfiguration propertyConfiguration, FilePath filePath) => XPath.GetDirectoryNameAndIndex(propertyConfiguration, filePath); - ReadOnlyDictionary TestStatic_GetKeyValuePairs(IPropertyConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) => + ReadOnlyDictionary> TestStatic_GetKeyValuePairs(IPropertyConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) => GetKeyValuePairs(propertyConfiguration, resultsFullGroupDirectory, jsonGroups); - static ReadOnlyDictionary GetKeyValuePairs(IPropertyConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) => + static ReadOnlyDictionary> GetKeyValuePairs(IPropertyConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) => XPath.GetKeyValuePairs(propertyConfiguration, resultsFullGroupDirectory, jsonGroups); } \ No newline at end of file diff --git a/Shared/Models/Stateless/Methods/XDirectory.cs b/Shared/Models/Stateless/Methods/XDirectory.cs index 4564d67..ea132c1 100644 --- a/Shared/Models/Stateless/Methods/XDirectory.cs +++ b/Shared/Models/Stateless/Methods/XDirectory.cs @@ -327,9 +327,10 @@ internal abstract partial class XDirectory return new(results); } - internal static (string[], List<(FilePath, string)>) GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, bool copyDuplicates, bool ifCanUseId, ReadOnlyCollection> filePathsCollection, string[] directories, Action? tick) + internal static (string[], List<(FilePath, string)>) GetToDoCollection(Properties.IPropertyConfiguration propertyConfiguration, bool copyDuplicates, bool ifCanUseId, ReadOnlyCollection> filePathsCollection, IReadOnlyDictionary> fileGroups, Action? tick) { List<(FilePath, string)> results = []; + string key; string paddedId; string checkFile; string directory; @@ -345,6 +346,7 @@ internal abstract partial class XDirectory List distinct = []; Models.FileHolder fileHolder; List distinctDirectories = []; + ReadOnlyCollection? directories; FilePath[] sortedRecords = GetSortedRecords(filePathsCollection); bool isOffsetDeterministicHashCode = IId.IsOffsetDeterministicHashCode(propertyConfiguration); for (int i = 0; i < sortedRecords.Length; i++) @@ -353,6 +355,9 @@ internal abstract partial class XDirectory filePath = sortedRecords[i]; if (filePath.Name.EndsWith("len") || filePath.ExtensionLowered == ".id" || filePath.ExtensionLowered == ".lsv" || filePath.DirectoryFullPath is null) continue; + key = propertyConfiguration.ValidVideoFormatExtensions.Contains(filePath.ExtensionLowered) ? propertyConfiguration.ResultContentCollection : propertyConfiguration.ResultContent; + if (!fileGroups.TryGetValue(key, out directories)) + continue; (_, directoryIndex) = IPath.GetDirectoryNameAndIndex(propertyConfiguration, filePath); fileDirectoryName = Path.GetFileName(filePath.DirectoryFullPath); if (fileDirectoryName.Length < propertyConfiguration.ResultAllInOneSubdirectoryLength + 3 || !filePath.Name.StartsWith(fileDirectoryName)) diff --git a/Shared/Models/Stateless/Methods/XPath.cs b/Shared/Models/Stateless/Methods/XPath.cs index 8fd7c42..8762d6d 100644 --- a/Shared/Models/Stateless/Methods/XPath.cs +++ b/Shared/Models/Stateless/Methods/XPath.cs @@ -295,21 +295,21 @@ internal abstract class XPath return (result, converted); } - internal static ReadOnlyDictionary GetKeyValuePairs(IPropertyConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) + internal static ReadOnlyDictionary> GetKeyValuePairs(IPropertyConfiguration propertyConfiguration, string? resultsFullGroupDirectory, string[]? jsonGroups) { - Dictionary results = []; + Dictionary> results = []; int converted = int.Parse($"1{new string('0', propertyConfiguration.ResultAllInOneSubdirectoryLength)}"); string directory; string checkDirectory; + List collection; int plusOne = converted + 1; - List collection = []; if (jsonGroups is not null) { foreach (string jsonGroup in jsonGroups) { if (resultsFullGroupDirectory is null) continue; - collection.Clear(); + collection = []; for (int i = 0; i < plusOne; i++) { if (string.IsNullOrEmpty(jsonGroup)) @@ -332,9 +332,9 @@ internal abstract class XPath collection.Add(checkDirectory); } if (!string.IsNullOrEmpty(jsonGroup)) - results.Add(jsonGroup, collection.ToArray()); + results.Add(jsonGroup, new(collection)); else - results.Add(propertyConfiguration.ResultAllInOne, collection.ToArray()); + results.Add(propertyConfiguration.ResultAllInOne, new(collection)); } } return new(results);