Testing
This commit is contained in:
@ -50,15 +50,15 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
|
||||
else
|
||||
throw new Exception();
|
||||
}
|
||||
List<ExifDirectory> results = [];
|
||||
string jsonGroupDirectory;
|
||||
const string extension = ".json";
|
||||
const string fileSearchFilter = "*";
|
||||
string filesCollectionRootDirectory;
|
||||
const string directorySearchFilter = "*";
|
||||
int maxDegreeOfParallelism = Environment.ProcessorCount;
|
||||
filesCollectionRootDirectory = propertyConfiguration.RootDirectory;
|
||||
Dictionary<int, ExifDirectory> exifDirectoriesById = [];
|
||||
int maxDegreeOfParallelism = Environment.ProcessorCount;
|
||||
Action? tick = dlibDotNet is null ? null : dlibDotNet.Tick;
|
||||
filesCollectionRootDirectory = propertyConfiguration.RootDirectory;
|
||||
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism };
|
||||
string jsonGroupSingletonDirectory = Path.Combine(bResultsFullGroupDirectory, propertyConfiguration.ResultSingleton);
|
||||
string jsonGroupCollectionDirectory = Path.Combine(bResultsFullGroupDirectory, propertyConfiguration.ResultCollection);
|
||||
@ -67,16 +67,10 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
|
||||
ReadOnlyCollection<ReadOnlyCollection<FilePath>> filePathsCollection = IDirectory.GetFilePathCollections(propertyConfiguration, directorySearchFilter, fileSearchFilter, filesCollectionRootDirectory, useIgnoreExtensions: true, useCeilingAverage: false);
|
||||
ReadOnlyDictionary<int, List<FilePath>> fileNamesToFiles = FilePath.GetFilesKeyValuePairs(filePathsCollection);
|
||||
ReadOnlyCollection<FilePair> filePairs = IFilePair.GetFilePairs(propertyConfiguration, directorySearchFilter, extension, jsonGroupSingletonDirectory, filePathsCollection, fileNamesToFiles);
|
||||
string message = $") Preloading ExifDirectory Dictionary - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)";
|
||||
string message = $") {nameof(B_Metadata)} - Preloading ExifDirectory Dictionary - {(int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds)} total second(s)";
|
||||
dlibDotNet?.ConstructProgressBar(filePairs.Count, message);
|
||||
_ = Parallel.For(0, filePairs.Count, parallelOptions, (i, state) => ParallelFor(dlibDotNet, filePairs[i], results));
|
||||
_ = Parallel.For(0, filePairs.Count, parallelOptions, (i, state) => ParallelFor(filePairs[i], exifDirectoriesById, tick));
|
||||
jsonGroupDirectory = Path.Combine(bResultsFullGroupDirectory, propertyConfiguration.ResultCollection);
|
||||
foreach (ExifDirectory exifDirectory in results)
|
||||
{
|
||||
if (exifDirectory.FilePath.Id is null || exifDirectoriesById.ContainsKey(exifDirectory.FilePath.Id.Value))
|
||||
continue;
|
||||
exifDirectoriesById.Add(exifDirectory.FilePath.Id.Value, exifDirectory);
|
||||
}
|
||||
ExifDirectoriesById = new(exifDirectoriesById);
|
||||
DateGroupDirectory = bResultsFullGroupDirectory;
|
||||
SingletonById = fileNamesToFiles;
|
||||
@ -86,16 +80,19 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
|
||||
Collection = filePathsSingletonCollection[0];
|
||||
}
|
||||
|
||||
private void ParallelFor(IDlibDotNet? dlibDotNet, FilePair filePair, List<ExifDirectory> results)
|
||||
private void ParallelFor(FilePair filePair, Dictionary<int, ExifDirectory> results, Action? tick)
|
||||
{
|
||||
dlibDotNet?.Tick();
|
||||
tick?.Invoke();
|
||||
if (filePair.FilePath.Id is null)
|
||||
return;
|
||||
ExifDirectory? exifDirectory = GetExifDirectory(filePair);
|
||||
if (exifDirectory is null)
|
||||
return;
|
||||
lock (results)
|
||||
results.Add(exifDirectory);
|
||||
{
|
||||
if (!results.ContainsKey(filePair.FilePath.Id.Value))
|
||||
results.Add(filePair.FilePath.Id.Value, exifDirectory);
|
||||
}
|
||||
}
|
||||
|
||||
private static ExifDirectory? GetExifDirectory(FilePair filePair)
|
||||
@ -105,11 +102,24 @@ public class B_Metadata : IMetadata<MetadataExtractor.Directory>
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
string json = File.ReadAllText(filePair.Match.FullName);
|
||||
string json;
|
||||
json = File.ReadAllText(filePair.Match.FullName);
|
||||
if (string.IsNullOrEmpty(json))
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
result = JsonSerializer.Deserialize(json, ExifDirectorySourceGenerationContext.Default.ExifDirectory);
|
||||
if (result?.FilePath?.Id is null)
|
||||
{
|
||||
try
|
||||
{
|
||||
result = Stateless.Methods.IMetadata.GetExifDirectory(filePair.FilePath);
|
||||
json = JsonSerializer.Serialize(result, ExifDirectorySourceGenerationContext.Default.ExifDirectory);
|
||||
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(filePair.Match.FullName, json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null);
|
||||
}
|
||||
catch (Exception) { result = null; }
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
Reference in New Issue
Block a user