This commit is contained in:
2023-12-26 18:27:37 -07:00
parent c2c711673f
commit ec22446643
37 changed files with 1279 additions and 932 deletions

View File

@ -470,7 +470,7 @@ internal abstract class MapLogic
return results;
}
private static void ParallelFor(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration configuration, Dictionary<int, List<(string, int)>> skipCollection, List<LocationContainer<MetadataExtractor.Directory>> locationContainers, MappedFile mappedFile)
private static void ParallelFor(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration configuration, Dictionary<int, List<(string, int)>> skipCollection, List<LocationContainer> locationContainers, MappedFile mappedFile)
{
int? id;
string checkFile;
@ -480,9 +480,9 @@ internal abstract class MapLogic
FileHolder fileHolder;
int? wholePercentages;
const string lnk = ".lnk";
ExifDirectory? exifDirectory;
string personDisplayDirectoryName;
const bool fromDistanceContent = true;
IReadOnlyList<MetadataExtractor.Directory> directories;
List<(string File, int WholePercentages)>? wholePercentagesCollection;
if (!mappedFile.FilePath.Name.EndsWith(lnk))
{
@ -518,14 +518,14 @@ internal abstract class MapLogic
}
dateOnly = DateOnly.FromDateTime(new DateTime(mappedFile.FilePath.CreationTicks));
if (mappedFile.FilePath.Name.EndsWith(lnk) || (!configuration.DistanceMoveUnableToMatch && !configuration.DistanceRenameToMatch) || !File.Exists(mappedFile.FilePath.FullName))
directories = new List<MetadataExtractor.Directory>();
exifDirectory = null;
else
directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(mappedFile.FilePath.FullName);
exifDirectory = Metadata.Models.Stateless.Methods.IMetadata.GetExifDirectory(mappedFile.FilePath);
RectangleF? rectangle = ILocation.GetPercentagesRectangle(configuration.LocationDigits, wholePercentages.Value);
personDisplayDirectoryName = mappedFile.PersonDisplayDirectoryName is null ? configuration.MappingDefaultName : mappedFile.PersonDisplayDirectoryName;
lock (locationContainers)
locationContainers.Add(new(dateOnly,
directories,
exifDirectory,
mappedFile.DirectoryNumber,
personDisplayDirectoryName,
mappedFile.FilePath,
@ -537,7 +537,7 @@ internal abstract class MapLogic
wholePercentages.Value));
}
private static void LookForPossibleDuplicates(Configuration configuration, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers)
private static void LookForPossibleDuplicates(Configuration configuration, ReadOnlyCollection<LocationContainer> locationContainers)
{
string key;
float? percent;
@ -547,7 +547,7 @@ internal abstract class MapLogic
RectangleF? itemPercentagesRectangle;
(FilePath FilePath, int WholePercentages) item;
Dictionary<string, (FilePath, int)> distinct = [];
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
foreach (LocationContainer locationContainer in locationContainers)
{
key = string.Concat(locationContainer.PersonKey, locationContainer.Id);
if (distinct.TryGetValue(key, out item))
@ -890,9 +890,9 @@ internal abstract class MapLogic
}
}
internal static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<int, List<(string, int)>> skipCollection, List<Record> records)
internal static List<LocationContainer> GetLocationContainers(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<int, List<(string, int)>> skipCollection, List<Record> records)
{
List<LocationContainer<MetadataExtractor.Directory>> results = [];
List<LocationContainer> results = [];
List<MappedFile> mappedFiles = GetMappedFiles(propertyConfiguration, configuration, personContainers, records);
if (mappedFiles.Count > 0 && (configuration.DistanceMoveUnableToMatch || configuration.DistanceRenameToMatch))
{
@ -909,7 +909,7 @@ internal abstract class MapLogic
}
if (string.IsNullOrEmpty(configuration.LocationContainerDebugDirectory))
{
ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers = new(results.OrderBy(l => l.DirectoryNumber).ToArray());
ReadOnlyCollection<LocationContainer> locationContainers = new(results.OrderBy(l => l.DirectoryNumber).ToArray());
LookForPossibleDuplicates(configuration, locationContainers);
}
return results;
@ -1248,10 +1248,10 @@ internal abstract class MapLogic
return new(results);
}
internal static ReadOnlyDictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> ConvertLocationContainers(List<LocationContainer<MetadataExtractor.Directory>> locationContainers)
internal static ReadOnlyDictionary<int, List<LocationContainer>> ConvertLocationContainers(List<LocationContainer> locationContainers)
{
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> results = [];
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
Dictionary<int, List<LocationContainer>> results = [];
foreach (LocationContainer locationContainer in locationContainers)
{
if (!results.ContainsKey(locationContainer.Id))
results.Add(locationContainer.Id, []);