55 lines
3.5 KiB
C#
55 lines
3.5 KiB
C#
using System.Collections.ObjectModel;
|
|
using View_by_Distance.Metadata.Models;
|
|
using View_by_Distance.Metadata.Models.Stateless;
|
|
using View_by_Distance.Shared.Models;
|
|
using View_by_Distance.Shared.Models.Properties;
|
|
using View_by_Distance.Shared.Models.Stateless;
|
|
|
|
namespace View_by_Distance.Face.Models.Stateless;
|
|
|
|
internal static class Face
|
|
{
|
|
|
|
private static void ExifDirectoriesParallelFor(ResultSettings resultSettings, MetadataSettings metadataSettings, List<ExifDirectory> results, FileInfo fileInfo)
|
|
{
|
|
FileHolder fileHolder = FileHolder.Get(fileInfo, id: null);
|
|
const PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName? personKeyFormattedAndKeyTicksAndDisplayDirectoryName = null;
|
|
FilePath filePath = FilePath.Get(resultSettings, metadataSettings, fileHolder, index: null);
|
|
Stream stream = File.OpenRead(filePath.FullName);
|
|
ExifDirectory exifDirectory = IMetadata.GetExifDirectory(filePath, stream, personKeyFormattedAndKeyTicksAndDisplayDirectoryName);
|
|
stream.Dispose();
|
|
results.Add(exifDirectory);
|
|
}
|
|
|
|
internal static ReadOnlyCollection<ExifDirectory> GetExifDirectories(ResultSettings resultSettings, MetadataSettings metadataSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ICompare compare, long ticks, string outputResolution)
|
|
{
|
|
List<ExifDirectory> 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;
|
|
string resultsFullGroupDirectory = Path.GetFullPath(IResult.GetResultsFullGroupDirectory(resultSettings,
|
|
nameof(D_Face),
|
|
outputResolution,
|
|
includeResizeGroup: true,
|
|
includeModel: true,
|
|
includePredictorModel: true));
|
|
string contentDirectory = Path.Combine(resultsFullGroupDirectory, resultSettings.ResultContent);
|
|
if (!Directory.Exists(contentDirectory))
|
|
_ = Directory.CreateDirectory(contentDirectory);
|
|
string collectionDirectory = Path.Combine(resultsFullGroupDirectory, resultSettings.ResultCollection);
|
|
if (!Directory.Exists(collectionDirectory))
|
|
_ = Directory.CreateDirectory(collectionDirectory);
|
|
string[] files = Directory.GetFiles(contentDirectory, $"*{compareSettings.FacesFileNameExtension}", SearchOption.AllDirectories);
|
|
compare.ConstructProgressBar(files.Length, $"{nameof(D_Face)}.{nameof(GetExifDirectories)}");
|
|
_ = Parallel.For(0, files.Length, parallelOptions, (i, state) =>
|
|
{
|
|
compare.Tick();
|
|
fileInfo = new(files[i]);
|
|
if (skipOlderThan is null || (fileInfo.Exists && fileInfo.LastWriteTime.Ticks >= skipOlderThan.Value))
|
|
ExifDirectoriesParallelFor(resultSettings, metadataSettings, results, fileInfo);
|
|
});
|
|
return results.AsReadOnly();
|
|
}
|
|
|
|
} |