Metadata
This commit is contained in:
@ -194,11 +194,11 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
private void LookForAbandoned(Property.Models.Configuration propertyConfiguration, List<int> distinctFilteredIds)
|
||||
{
|
||||
List<string> renameCollection = [];
|
||||
foreach (KeyValuePair<int, List<LocationContainer<MetadataExtractor.Directory>>> keyValuePair in _IdToLocationContainers)
|
||||
foreach (KeyValuePair<int, List<LocationContainer>> keyValuePair in _IdToLocationContainers)
|
||||
{
|
||||
if (distinctFilteredIds.Contains(keyValuePair.Key))
|
||||
continue;
|
||||
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in keyValuePair.Value)
|
||||
foreach (LocationContainer locationContainer in keyValuePair.Value)
|
||||
{
|
||||
if (locationContainer.FilePath.FullName.Contains('!'))
|
||||
continue;
|
||||
@ -217,10 +217,10 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
private readonly ReadOnlyDictionary<int, List<int>> _SkipCollection;
|
||||
private readonly ReadOnlyDictionary<int, List<int>> _SkipNotSkipCollection;
|
||||
private readonly Shared.Models.Properties.IPropertyConfiguration _PropertyConfiguration;
|
||||
private readonly ReadOnlyDictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> _IdToLocationContainers;
|
||||
private readonly ReadOnlyDictionary<int, List<LocationContainer>> _IdToLocationContainers;
|
||||
private readonly ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> _IdThenWholePercentagesToPersonContainers;
|
||||
|
||||
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, Shared.Models.Methods.IDistance<MetadataExtractor.Directory> distance, ReadOnlyCollection<PersonContainer> personContainers, long ticks, string? a2PeopleContentDirectory, string a2PeopleSingletonDirectory, string eDistanceContentDirectory)
|
||||
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, Shared.Models.Methods.IDistance distance, ReadOnlyCollection<PersonContainer> personContainers, long ticks, string? a2PeopleContentDirectory, string a2PeopleSingletonDirectory, string eDistanceContentDirectory)
|
||||
{
|
||||
_Ticks = ticks;
|
||||
_Configuration = configuration;
|
||||
@ -229,7 +229,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
List<PersonContainer> notMappedPersonContainers = [];
|
||||
Dictionary<int, List<(string, int)>> skipCollection = [];
|
||||
Dictionary<int, List<(string, int)>> skipNotSkipCollection = [];
|
||||
List<LocationContainer<MetadataExtractor.Directory>> locationContainers = [];
|
||||
List<LocationContainer> locationContainers = [];
|
||||
string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory);
|
||||
string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, ticks.ToString());
|
||||
ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> idThenWholePercentagesToPersonContainers;
|
||||
@ -332,14 +332,14 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
return result;
|
||||
}
|
||||
|
||||
public ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(Item item)
|
||||
public ReadOnlyCollection<LocationContainer> GetLocationContainers(Item item)
|
||||
{
|
||||
LocationContainer<MetadataExtractor.Directory>[] results;
|
||||
LocationContainer[] results;
|
||||
if (item.Property?.Id is null)
|
||||
results = [];
|
||||
else
|
||||
{
|
||||
List<LocationContainer<MetadataExtractor.Directory>>? locationContainers;
|
||||
List<LocationContainer>? locationContainers;
|
||||
if (_IdToLocationContainers.TryGetValue(item.Property.Id.Value, out locationContainers))
|
||||
results = locationContainers.ToArray();
|
||||
else
|
||||
@ -678,17 +678,17 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
if (j == i)
|
||||
continue;
|
||||
if (face.Mapping.MappingFromFilterPre.InSkipCollection is not null && face.Mapping.MappingFromFilterPre.InSkipCollection.Value)
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance<object>));
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance));
|
||||
if (face.Mapping.MappingFromFilterPre.IsFocusModel is not null && !face.Mapping.MappingFromFilterPre.IsFocusModel.Value)
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance<object>));
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance));
|
||||
if (face.Mapping.MappingFromFilterPre.IsFocusRelativePath is not null && !face.Mapping.MappingFromFilterPre.IsFocusRelativePath.Value)
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance<object>));
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance));
|
||||
if (face.Mapping.MappingFromFilterPost.InSkipCollection is not null && face.Mapping.MappingFromFilterPost.InSkipCollection.Value)
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance<object>));
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance));
|
||||
if (face.Mapping.MappingFromFilterPost.IsFocusPerson is not null && !face.Mapping.MappingFromFilterPost.IsFocusPerson.Value)
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance<object>));
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance));
|
||||
if (face.Mapping.MappingFromFilterPost.InSkipCollection is not null && face.Mapping.MappingFromFilterPost.InSkipCollection.Value)
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance<object>));
|
||||
throw new NotSupportedException(nameof(Shared.Models.Methods.IDistance));
|
||||
faceDistanceLength = faceDistanceLengths[j];
|
||||
if (faceDistanceLength.WholePercentages is null || faceDistanceLength.Length is null)
|
||||
throw new NotSupportedException();
|
||||
|
@ -32,7 +32,7 @@ internal abstract class DecadeLogic
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static void SetCreationTimeMaybeMoveToDecade(Property.Models.Configuration propertyConfiguration, bool moveToDecade, MappingFromItem mappingFromItem, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers)
|
||||
internal static void SetCreationTimeMaybeMoveToDecade(Property.Models.Configuration propertyConfiguration, bool moveToDecade, MappingFromItem mappingFromItem, ReadOnlyCollection<LocationContainer> locationContainers)
|
||||
{
|
||||
DateTime dateTime;
|
||||
string halfDecade;
|
||||
@ -42,7 +42,7 @@ internal abstract class DecadeLogic
|
||||
string personNameDirectoryName;
|
||||
string? personKeyFormattedDirectory;
|
||||
string? personKeyFormattedDirectoryName;
|
||||
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
|
||||
foreach (LocationContainer locationContainer in locationContainers)
|
||||
{
|
||||
if (!File.Exists(locationContainer.FilePath.FullName))
|
||||
continue;
|
||||
|
@ -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, []);
|
||||
|
@ -35,9 +35,9 @@ public interface IMapLogic
|
||||
static List<(string, long)> GetJLinkDirectories(string genealogicalDataCommunicationFile, string[] jLinks, string personBirthdayFormat, char[] personCharacters, string a2PeopleSingletonDirectory, string a2PeopleContentDirectory) =>
|
||||
MapLogic.GetJLinkDirectories(genealogicalDataCommunicationFile, jLinks, personBirthdayFormat, personCharacters, a2PeopleSingletonDirectory, a2PeopleContentDirectory);
|
||||
|
||||
void TestStatic_SetCreationTimeMaybeMoveToDecade(Property.Models.Configuration propertyConfiguration, bool moveToDecade, Shared.Models.MappingFromItem mappingFromItem, ReadOnlyCollection<Shared.Models.LocationContainer<MetadataExtractor.Directory>> locationContainers) =>
|
||||
void TestStatic_SetCreationTimeMaybeMoveToDecade(Property.Models.Configuration propertyConfiguration, bool moveToDecade, Shared.Models.MappingFromItem mappingFromItem, ReadOnlyCollection<Shared.Models.LocationContainer> locationContainers) =>
|
||||
SetCreationTimeMaybeMoveToDecade(propertyConfiguration, moveToDecade, mappingFromItem, locationContainers);
|
||||
static void SetCreationTimeMaybeMoveToDecade(Property.Models.Configuration propertyConfiguration, bool moveToDecade, Shared.Models.MappingFromItem mappingFromItem, ReadOnlyCollection<Shared.Models.LocationContainer<MetadataExtractor.Directory>> locationContainers) =>
|
||||
static void SetCreationTimeMaybeMoveToDecade(Property.Models.Configuration propertyConfiguration, bool moveToDecade, Shared.Models.MappingFromItem mappingFromItem, ReadOnlyCollection<Shared.Models.LocationContainer> locationContainers) =>
|
||||
DecadeLogic.SetCreationTimeMaybeMoveToDecade(propertyConfiguration, moveToDecade, mappingFromItem, locationContainers);
|
||||
|
||||
bool? TestStatic_CanReMap(long[] jLinkResolvedPersonKeys, ReadOnlyDictionary<int, ReadOnlyCollection<Shared.Models.PersonContainer>>? wholePercentagesToPersonContainers, Shared.Models.MappingFromLocation mappingFromLocation) =>
|
||||
|
@ -8,14 +8,14 @@ namespace View_by_Distance.Map.Models.Stateless;
|
||||
internal abstract class RelationLogic
|
||||
{
|
||||
|
||||
internal record Group(string Key, long PersonKey, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> RelationContainersCollection);
|
||||
internal record Group(string Key, long PersonKey, ReadOnlyCollection<LocationContainer> RelationContainersCollection);
|
||||
|
||||
private static Dictionary<long, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>> GetPersonKeyTo(Configuration configuration, List<LocationContainer<MetadataExtractor.Directory>> locationContainers)
|
||||
private static Dictionary<long, Dictionary<int, List<LocationContainer>>> GetPersonKeyTo(Configuration configuration, List<LocationContainer> locationContainers)
|
||||
{
|
||||
List<LocationContainer<MetadataExtractor.Directory>>? collection;
|
||||
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>? yearTo;
|
||||
Dictionary<long, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>> personKeyTo = [];
|
||||
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
|
||||
List<LocationContainer>? collection;
|
||||
Dictionary<int, List<LocationContainer>>? yearTo;
|
||||
Dictionary<long, Dictionary<int, List<LocationContainer>>> personKeyTo = [];
|
||||
foreach (LocationContainer locationContainer in locationContainers)
|
||||
{
|
||||
if (!locationContainer.FromDistanceContent)
|
||||
continue;
|
||||
@ -38,7 +38,7 @@ internal abstract class RelationLogic
|
||||
return personKeyTo;
|
||||
}
|
||||
|
||||
private static ReadOnlyCollection<Group> GetGroups(Configuration configuration, List<LocationContainer<MetadataExtractor.Directory>> locationContainers)
|
||||
private static ReadOnlyCollection<Group> GetGroups(Configuration configuration, List<LocationContainer> locationContainers)
|
||||
{
|
||||
List<Group> results = [];
|
||||
string key;
|
||||
@ -46,10 +46,10 @@ internal abstract class RelationLogic
|
||||
List<int> years = [];
|
||||
List<int> indices = [];
|
||||
List<(int Index, int Year)> sort = [];
|
||||
List<LocationContainer<MetadataExtractor.Directory>> collection = [];
|
||||
KeyValuePair<int, List<LocationContainer<MetadataExtractor.Directory>>> keyValue;
|
||||
Dictionary<long, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>> personKeyTo = GetPersonKeyTo(configuration, locationContainers);
|
||||
foreach (KeyValuePair<long, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>>> keyValuePair in personKeyTo)
|
||||
List<LocationContainer> collection = [];
|
||||
KeyValuePair<int, List<LocationContainer>> keyValue;
|
||||
Dictionary<long, Dictionary<int, List<LocationContainer>>> personKeyTo = GetPersonKeyTo(configuration, locationContainers);
|
||||
foreach (KeyValuePair<long, Dictionary<int, List<LocationContainer>>> keyValuePair in personKeyTo)
|
||||
{
|
||||
sort.Clear();
|
||||
years.Clear();
|
||||
@ -403,7 +403,7 @@ internal abstract class RelationLogic
|
||||
}
|
||||
}
|
||||
|
||||
internal static void SaveMappedRelations(Configuration configuration, Shared.Models.Methods.IDistance<MetadataExtractor.Directory> distance, string a2PeopleContentDirectory, string eDistanceContentDirectory, long ticks, List<LocationContainer<MetadataExtractor.Directory>> locationContainers, ReadOnlyDictionary<string, PersonContainer> readOnlyPersonKeyFormattedToPersonContainer, ReadOnlyDictionary<long, List<PersonContainer>> readOnlyPersonKeyToPersonContainerCollection)
|
||||
internal static void SaveMappedRelations(Configuration configuration, Shared.Models.Methods.IDistance distance, string a2PeopleContentDirectory, string eDistanceContentDirectory, long ticks, List<LocationContainer> locationContainers, ReadOnlyDictionary<string, PersonContainer> readOnlyPersonKeyFormattedToPersonContainer, ReadOnlyDictionary<long, List<PersonContainer>> readOnlyPersonKeyToPersonContainerCollection)
|
||||
{
|
||||
int take;
|
||||
string directory;
|
||||
|
Reference in New Issue
Block a user