|
|
|
@ -23,6 +23,14 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
long? Ticks,
|
|
|
|
|
string? PersonDirectory);
|
|
|
|
|
|
|
|
|
|
internal record FilteredOriginalImage(int Id,
|
|
|
|
|
FilePath FilePath,
|
|
|
|
|
int ApproximateYears,
|
|
|
|
|
string PersonKeyFormatted,
|
|
|
|
|
string Directory,
|
|
|
|
|
string PersonDirectory,
|
|
|
|
|
string CheckFile);
|
|
|
|
|
|
|
|
|
|
public void SaveContainers(int? updated, List<SaveContainer> saveContainers)
|
|
|
|
|
{
|
|
|
|
|
if (_Configuration is null)
|
|
|
|
@ -137,7 +145,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<SaveShortcutsForOutputResolutions> GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Mapping> mappingCollection)
|
|
|
|
|
private List<SaveShortcutsForOutputResolutions> GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Mapping> distinctValidImageMappingCollection)
|
|
|
|
|
{
|
|
|
|
|
List<SaveShortcutsForOutputResolutions> results = [];
|
|
|
|
|
if (_Configuration is null)
|
|
|
|
@ -153,7 +161,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
string personKeyFormatted;
|
|
|
|
|
Calendar calendar = new CultureInfo("en-US").Calendar;
|
|
|
|
|
ReadOnlyDictionary<int, List<long>> idToPersonKeys = IMapLogic.GetIdToPersonKeys(personKeyToIds);
|
|
|
|
|
foreach (Mapping mapping in mappingCollection)
|
|
|
|
|
foreach (Mapping mapping in distinctValidImageMappingCollection)
|
|
|
|
|
{
|
|
|
|
|
dateTime = mapping.MappingFromItem.GetDateTimeOriginalThenMinimumDateTime();
|
|
|
|
|
description = mapping.MappingFromLocation is null ? mapping.MappingFromItem.Id.ToString() : mapping.MappingFromLocation.DeterministicHashCodeKey;
|
|
|
|
@ -181,12 +189,12 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonKey);
|
|
|
|
|
directory = Path.Combine($"{eDistanceContentDirectory}---", "Person Key Shortcuts", personKeyFormatted, directoryName);
|
|
|
|
|
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.FilePath.Name}.lnk");
|
|
|
|
|
results.Add(new(mapping.MappingFromItem.FilePath.FullName, directory, mapping.MappingFromItem.GetDateTimeOriginalThenMinimumDateTime(), fileName, description, MakeAllHidden: false));
|
|
|
|
|
results.Add(new(mapping.MappingFromItem.FilePath.FullName, directory, dateTime, fileName, description, MakeAllHidden: false));
|
|
|
|
|
if (IPerson.IsDefaultName(mapping.MappingFromPerson))
|
|
|
|
|
continue;
|
|
|
|
|
directory = Path.Combine($"{eDistanceContentDirectory}---", "Name Shortcuts", mapping.MappingFromPerson.DisplayDirectoryName, directoryName);
|
|
|
|
|
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.FilePath.Name}.lnk");
|
|
|
|
|
results.Add(new(mapping.MappingFromItem.FilePath.FullName, directory, mapping.MappingFromItem.GetDateTimeOriginalThenMinimumDateTime(), fileName, description, MakeAllHidden: false));
|
|
|
|
|
results.Add(new(mapping.MappingFromItem.FilePath.FullName, directory, dateTime, fileName, description, MakeAllHidden: false));
|
|
|
|
|
}
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
@ -230,7 +238,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
ReadOnlyDictionary<long, int> readOnlyPersonKeyToCount;
|
|
|
|
|
Dictionary<int, List<(string, int)>> skipCollection = [];
|
|
|
|
|
Dictionary<int, List<(string, int)>> skipNotSkipCollection = [];
|
|
|
|
|
ReadOnlyDictionary<int, List<(string, int)>> readOnlyskipCollection;
|
|
|
|
|
ReadOnlyDictionary<int, List<(string, int)>> readOnlySkipCollection;
|
|
|
|
|
string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory);
|
|
|
|
|
string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, ticks.ToString());
|
|
|
|
|
ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> idThenWholePercentagesToPersonContainers;
|
|
|
|
@ -297,7 +305,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
skipCollection,
|
|
|
|
|
readOnlyPersonKeyFormattedToPersonContainer,
|
|
|
|
|
personKeyFormattedIdThenWholePercentagesCollection);
|
|
|
|
|
readOnlyskipCollection = new(skipCollection);
|
|
|
|
|
readOnlySkipCollection = new(skipCollection);
|
|
|
|
|
notMappedPersonContainers.AddRange(Stateless.MapLogic.GetNotMappedPersonContainers(configuration,
|
|
|
|
|
ticks,
|
|
|
|
|
personContainers,
|
|
|
|
@ -307,7 +315,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
configuration,
|
|
|
|
|
ticks,
|
|
|
|
|
personContainers,
|
|
|
|
|
readOnlyskipCollection,
|
|
|
|
|
readOnlySkipCollection,
|
|
|
|
|
records));
|
|
|
|
|
int lossCount = records.Count - locationContainers.Count;
|
|
|
|
|
int unableToMatchCount = records.Count - personKeyFormattedIdThenWholePercentagesCollection.Count;
|
|
|
|
@ -532,7 +540,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
return new(debugDirectory, directory, ticks, personDirectory);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<SaveContainer> GetSaveContainers(string dFacesContentDirectory, string d2FacePartsContentDirectory, ReadOnlyCollection<Mapping> mappingCollection, ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> idToWholePercentagesToMapping, ReadOnlyDictionary<long, List<int>> personKeyToIds, int? useFiltersCounter, bool saveMapped, bool saveIndividually, bool sortingContainersAny)
|
|
|
|
|
private List<SaveContainer> GetSaveContainers(string dFacesContentDirectory, string d2FacePartsContentDirectory, ReadOnlyCollection<Mapping> distinctValidImageMappingCollection, ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> idToWholePercentagesToMapping, ReadOnlyDictionary<long, List<int>> personKeyToIds, int? useFiltersCounter, bool saveMapped, bool saveIndividually, bool sortingContainersAny)
|
|
|
|
|
{
|
|
|
|
|
if (_Configuration is null)
|
|
|
|
|
throw new NullReferenceException(nameof(_Configuration));
|
|
|
|
@ -557,7 +565,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
ReadOnlyDictionary<int, Mapping>? wholePercentagesToMapping;
|
|
|
|
|
int padLeft = _Configuration.FaceDistancePermyriad.ToString().Length;
|
|
|
|
|
string forceSingleImageHumanized = nameof(Shared.Models.Stateless.IMapLogic.ForceSingleImage).Humanize(LetterCasing.Title);
|
|
|
|
|
foreach (Mapping mapping in mappingCollection)
|
|
|
|
|
foreach (Mapping mapping in distinctValidImageMappingCollection)
|
|
|
|
|
{
|
|
|
|
|
if (mapping.MappingFromLocation is null)
|
|
|
|
|
continue;
|
|
|
|
@ -651,7 +659,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SaveMapped(string dFacesContentDirectory, string d2FacePartsContentDirectory, string d2FacePartsContentCollectionDirectory, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Mapping> mappingCollection, ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> idToWholePercentagesToMapping)
|
|
|
|
|
public void SaveMapped(string dFacesContentDirectory, string d2FacePartsContentDirectory, string d2FacePartsContentCollectionDirectory, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Mapping> distinctValidImageMappingCollection, ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> idToWholePercentagesToMapping)
|
|
|
|
|
{
|
|
|
|
|
if (_Configuration is null)
|
|
|
|
|
throw new NullReferenceException(nameof(_Configuration));
|
|
|
|
@ -659,13 +667,13 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
bool saveMapped = true;
|
|
|
|
|
int? useFiltersCounter = null;
|
|
|
|
|
string mappingDirectory = Path.Combine(_EDistanceContentTicksDirectory, nameof(Shared.Models.Stateless.IMapLogic.Mapping));
|
|
|
|
|
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToWholePercentagesToMapping, personKeyToIds, useFiltersCounter, saveMapped, sortingContainersAny: true, saveIndividually: false);
|
|
|
|
|
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, distinctValidImageMappingCollection, idToWholePercentagesToMapping, personKeyToIds, useFiltersCounter, saveMapped, sortingContainersAny: true, saveIndividually: false);
|
|
|
|
|
SaveContainers(updated, saveContainers);
|
|
|
|
|
if (!string.IsNullOrEmpty(_EDistanceContentTicksDirectory) && Directory.Exists(mappingDirectory))
|
|
|
|
|
Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<Sorting> GetSortingCollection(int i, Face face, FaceDistance faceDistanceEncoding, List<FaceDistance> faceDistanceLengths)
|
|
|
|
|
public List<Sorting> GetSortingCollection(Shared.Models.Methods.IDistanceLimits distanceLimits, int i, Face face, FaceDistance faceDistanceEncoding, List<FaceDistance> faceDistanceLengths)
|
|
|
|
|
{
|
|
|
|
|
if (_Configuration is null)
|
|
|
|
|
throw new NullReferenceException(nameof(_Configuration));
|
|
|
|
@ -753,7 +761,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
keyToCount.Add(key, new());
|
|
|
|
|
_ = keyToCount.TryAdd(key, 0);
|
|
|
|
|
keyToCount[key]++;
|
|
|
|
|
if (!_Configuration.SaveIndividually && keyToCount[key] < _Configuration.SortingMaximumPerKey)
|
|
|
|
|
if (!_Configuration.SaveIndividually && keyToCount[key] <= _Configuration.SortingMaximumPerKey)
|
|
|
|
|
segmentC = null;
|
|
|
|
|
else
|
|
|
|
|
segmentC = sortingContainer.Sorting.DistancePermyriad.ToString();
|
|
|
|
@ -1029,7 +1037,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
collection.Add(new(personBirthday.Value.Ticks, Path.Combine(checkDirectory, personKeyFormatted, fileNameWithoutExtension, $"{ids.Count} Face(s)")));
|
|
|
|
|
foreach ((long personKey, string displayDirectoryName) in collection)
|
|
|
|
|
{
|
|
|
|
|
matches = (from l in personContainers where l.Key == personKey && l.ApproximateYears.HasValue select l).ToArray();
|
|
|
|
|
matches = (from l in personContainers where l.Key == personKey select l).ToArray();
|
|
|
|
|
if (matches.Length == 0)
|
|
|
|
|
continue;
|
|
|
|
|
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personKey);
|
|
|
|
@ -1044,11 +1052,11 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private (int, FilePath, int, string, string, string, string)[] GetCollectionForSaveFilteredOriginalImagesFromJLinks(string[] jLinks, string a2PeopleContentDirectory, ReadOnlyCollection<PersonContainer> personContainers, ReadOnlyCollection<Mapping> mappingCollection, ReadOnlyDictionary<long, List<int>> personKeyToIds)
|
|
|
|
|
private FilteredOriginalImage[] GetCollectionForSaveFilteredOriginalImagesFromJLinks(string[] jLinks, string a2PeopleContentDirectory, ReadOnlyCollection<PersonContainer> personContainers, ReadOnlyCollection<Mapping> distinctValidImageMappingCollection, ReadOnlyDictionary<long, List<int>> personKeyToIds)
|
|
|
|
|
{
|
|
|
|
|
if (_Configuration is null)
|
|
|
|
|
throw new NullReferenceException(nameof(_Configuration));
|
|
|
|
|
(int, FilePath, int, string, string, string, string)[] results;
|
|
|
|
|
FilteredOriginalImage[] results;
|
|
|
|
|
int count = 0;
|
|
|
|
|
int group = 65;
|
|
|
|
|
string checkFile;
|
|
|
|
@ -1058,9 +1066,9 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
string personKeyFormatted;
|
|
|
|
|
List<int> distinctCollection = [];
|
|
|
|
|
bool usePersonKeyAndDeterministicHashCodeKey = false;
|
|
|
|
|
List<FilteredOriginalImage> filteredOriginalImages = [];
|
|
|
|
|
List<string> personKeyFormattedCollection = GetPersonKeyFormattedCollection(jLinks, a2PeopleContentDirectory, personContainers, personKeyToIds);
|
|
|
|
|
List<(int Id, FilePath FilePath, int ApproximateYears, string PersonKeyFormatted, string CheckFile, string Directory, string PersonDirectory)> collection = [];
|
|
|
|
|
foreach (Mapping mapping in mappingCollection)
|
|
|
|
|
foreach (Mapping mapping in distinctValidImageMappingCollection)
|
|
|
|
|
{
|
|
|
|
|
if (distinctCollection.Contains(mapping.MappingFromItem.Id))
|
|
|
|
|
continue;
|
|
|
|
@ -1069,7 +1077,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
throw new NotSupportedException();
|
|
|
|
|
if (mapping.By is null or Shared.Models.Stateless.IMapLogic.Sorting)
|
|
|
|
|
continue;
|
|
|
|
|
if (mapping.MappingFromPerson?.ApproximateYears is null || mapping.MappingFromLocation is null)
|
|
|
|
|
if (mapping.MappingFromPerson is null || mapping.MappingFromLocation is null)
|
|
|
|
|
continue;
|
|
|
|
|
if (string.IsNullOrEmpty(mapping.MappingFromPerson.SegmentB))
|
|
|
|
|
throw new NotSupportedException();
|
|
|
|
@ -1097,39 +1105,44 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName);
|
|
|
|
|
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.FilePath.ExtensionLowered}");
|
|
|
|
|
}
|
|
|
|
|
collection.Add(new(mapping.MappingFromItem.Id, mapping.MappingFromItem.FilePath, mapping.MappingFromPerson.ApproximateYears.Value, personKeyFormatted, directory, personDirectory, checkFile));
|
|
|
|
|
if (mapping is null)
|
|
|
|
|
continue;
|
|
|
|
|
if (mapping.MappingFromPerson.ApproximateYears is null)
|
|
|
|
|
filteredOriginalImages.Add(new(mapping.MappingFromItem.Id, mapping.MappingFromItem.FilePath, -1, personKeyFormatted, directory, personDirectory, checkFile));
|
|
|
|
|
else
|
|
|
|
|
filteredOriginalImages.Add(new(mapping.MappingFromItem.Id, mapping.MappingFromItem.FilePath, mapping.MappingFromPerson.ApproximateYears.Value, personKeyFormatted, directory, personDirectory, checkFile));
|
|
|
|
|
distinctCollection.Add(mapping.MappingFromItem.Id);
|
|
|
|
|
count += 1;
|
|
|
|
|
}
|
|
|
|
|
results = (from l in collection orderby l.ApproximateYears descending, l.PersonKeyFormatted descending select l).ToArray();
|
|
|
|
|
results = (from l in filteredOriginalImages orderby l.ApproximateYears descending, l.PersonKeyFormatted descending select l).ToArray();
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SaveFilteredOriginalImagesFromJLinks(string[] jLinks, ReadOnlyCollection<PersonContainer> personContainers, string a2PeopleContentDirectory, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Mapping> mappingCollection)
|
|
|
|
|
public void SaveFilteredOriginalImagesFromJLinks(string[] jLinks, ReadOnlyCollection<PersonContainer> personContainers, string a2PeopleContentDirectory, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Mapping> distinctValidImageMappingCollection)
|
|
|
|
|
{
|
|
|
|
|
if (_Configuration is null)
|
|
|
|
|
throw new NullReferenceException(nameof(_Configuration));
|
|
|
|
|
FileHolder fileHolder;
|
|
|
|
|
SaveContainer? saveContainer;
|
|
|
|
|
List<SaveContainer> saveContainers = [];
|
|
|
|
|
(int, FilePath, int, string, string, string, string)[] collection = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory, personContainers, mappingCollection, personKeyToIds);
|
|
|
|
|
foreach ((int id, FilePath filePath, int approximateYears, string personKeyFormatted, string directory, string personDirectory, string checkFile) in collection)
|
|
|
|
|
FilteredOriginalImage[] filteredOriginalImages = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory, personContainers, distinctValidImageMappingCollection, personKeyToIds);
|
|
|
|
|
foreach (FilteredOriginalImage filteredOriginalImage in filteredOriginalImages)
|
|
|
|
|
{
|
|
|
|
|
fileHolder = FileHolder.Get(filePath);
|
|
|
|
|
saveContainer = new(personDirectory);
|
|
|
|
|
fileHolder = FileHolder.Get(filteredOriginalImage.FilePath);
|
|
|
|
|
saveContainer = new(filteredOriginalImage.PersonDirectory);
|
|
|
|
|
saveContainers.Add(saveContainer);
|
|
|
|
|
saveContainer = new(fileHolder, checkFile, directory);
|
|
|
|
|
saveContainer = new(fileHolder, filteredOriginalImage.CheckFile, filteredOriginalImage.Directory);
|
|
|
|
|
saveContainers.Add(saveContainer);
|
|
|
|
|
}
|
|
|
|
|
SaveContainers(null, saveContainers);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Mapping> mappingCollection)
|
|
|
|
|
public void SaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, ReadOnlyDictionary<long, List<int>> personKeyToIds, ReadOnlyCollection<Mapping> distinctValidImageMappingCollection)
|
|
|
|
|
{
|
|
|
|
|
string hiddenFile;
|
|
|
|
|
WindowsShortcut windowsShortcut;
|
|
|
|
|
List<SaveShortcutsForOutputResolutions> collection = [];
|
|
|
|
|
collection = GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(eDistanceContentDirectory, personKeyToIds, mappingCollection);
|
|
|
|
|
collection = GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(eDistanceContentDirectory, personKeyToIds, distinctValidImageMappingCollection);
|
|
|
|
|
string[] distinctDirectories = (from l in collection select l.Directory).Distinct().ToArray();
|
|
|
|
|
foreach (string directory in distinctDirectories)
|
|
|
|
|
{
|
|
|
|
@ -1163,7 +1176,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private (List<(string, DateTime[])>, List<SaveShortcutsForOutputResolutions>) GetCollectionForSaveShortcutsForOutputResolutionsDuringMapLogic(ReadOnlyDictionary<long, List<int>> personKeyToIds, string dFacesContentDirectory, ReadOnlyCollection<Item> filteredItems, ReadOnlyCollection<Mapping> mappingCollection)
|
|
|
|
|
private (List<(string, DateTime[])>, List<SaveShortcutsForOutputResolutions>) GetCollectionForSaveShortcutsForOutputResolutionsDuringMapLogic(ReadOnlyDictionary<long, List<int>> personKeyToIds, string dFacesContentDirectory, ReadOnlyCollection<Item> validImageItems, ReadOnlyCollection<Mapping> distinctValidImageMappingCollection)
|
|
|
|
|
{
|
|
|
|
|
if (_Configuration is null)
|
|
|
|
|
throw new NullReferenceException(nameof(_Configuration));
|
|
|
|
@ -1171,6 +1184,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
string fileName;
|
|
|
|
|
string fullName;
|
|
|
|
|
string directory;
|
|
|
|
|
DateTime dateTime;
|
|
|
|
|
string facesDirectory;
|
|
|
|
|
string? directoryName;
|
|
|
|
|
string personDirectory;
|
|
|
|
@ -1178,7 +1192,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
List<string> distinct = [];
|
|
|
|
|
List<SaveShortcutsForOutputResolutions> collection = [];
|
|
|
|
|
List<(string, DateTime[])> directoriesAndDateTimes = [];
|
|
|
|
|
foreach (Item item in filteredItems)
|
|
|
|
|
foreach (Item item in validImageItems)
|
|
|
|
|
{
|
|
|
|
|
if (item.ResizedFileHolder is null)
|
|
|
|
|
continue;
|
|
|
|
@ -1204,13 +1218,14 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
foreach (Mapping mapping in mappingCollection)
|
|
|
|
|
foreach (Mapping mapping in distinctValidImageMappingCollection)
|
|
|
|
|
{
|
|
|
|
|
directoryName = Path.GetDirectoryName(mapping.MappingFromItem.RelativePath);
|
|
|
|
|
if (directoryName is null)
|
|
|
|
|
throw new NotSupportedException();
|
|
|
|
|
if (mapping.MappingFromItem.ResizedFileHolder.DirectoryName is null || !mapping.MappingFromItem.ResizedFileHolder.Exists)
|
|
|
|
|
continue;
|
|
|
|
|
dateTime = mapping.MappingFromItem.GetDateTimeOriginalThenMinimumDateTime();
|
|
|
|
|
if (mapping.By is null or Shared.Models.Stateless.IMapLogic.Sorting || mapping.MappingFromPerson?.ApproximateYears is null)
|
|
|
|
|
{
|
|
|
|
|
if (mapping.MappingFromItem.ContainerDateTimes.Length > 0 && !distinct.Contains(mapping.MappingFromItem.ResizedFileHolder.DirectoryName))
|
|
|
|
@ -1221,13 +1236,13 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
directory = Path.Combine(mapping.MappingFromItem.ResizedFileHolder.DirectoryName, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", _PropertyConfiguration.ResultAllInOne);
|
|
|
|
|
personDirectory = Path.Combine(directory, "Unknown");
|
|
|
|
|
fileName = Path.Combine(personDirectory, $"{mapping.MappingFromItem.ResizedFileHolder.Name}.lnk");
|
|
|
|
|
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, mapping.MappingFromItem.GetDateTimeOriginalThenMinimumDateTime(), fileName, mapping.MappingFromLocation?.DeterministicHashCodeKey, MakeAllHidden: false));
|
|
|
|
|
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, dateTime, fileName, mapping.MappingFromLocation?.DeterministicHashCodeKey, MakeAllHidden: false));
|
|
|
|
|
facesDirectory = Stateless.MapLogic.GetFacesDirectory(_PropertyConfiguration, dFacesContentDirectory, mapping.FilePath, mapping.MappingFromItem);
|
|
|
|
|
if (mapping.MappingFromLocation is null)
|
|
|
|
|
continue;
|
|
|
|
|
fullName = Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.FilePath.ExtensionLowered}{_Configuration.FacesFileNameExtension}");
|
|
|
|
|
fileName = Path.Combine(personDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ResizedFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}.lnk");
|
|
|
|
|
collection.Add(new(fullName, personDirectory, mapping.MappingFromItem.GetDateTimeOriginalThenMinimumDateTime(), fileName, mapping.MappingFromLocation.DeterministicHashCodeKey, MakeAllHidden: true));
|
|
|
|
|
collection.Add(new(fullName, personDirectory, dateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey, MakeAllHidden: true));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -1247,21 +1262,21 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
|
|
|
|
else
|
|
|
|
|
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName, $"{ids.Count} Face(s)");
|
|
|
|
|
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ResizedFileHolder.Name}.lnk");
|
|
|
|
|
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, mapping.MappingFromItem.GetDateTimeOriginalThenMinimumDateTime(), fileName, mapping.MappingFromLocation?.DeterministicHashCodeKey, MakeAllHidden: false));
|
|
|
|
|
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, dateTime, fileName, mapping.MappingFromLocation?.DeterministicHashCodeKey, MakeAllHidden: false));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return new(directoriesAndDateTimes, collection);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SaveShortcutsForOutputResolutionsDuringMapLogic(ReadOnlyCollection<Container> containers, ReadOnlyDictionary<long, List<int>> personKeyToIds, string dFacesContentDirectory, ReadOnlyCollection<Mapping> mappingCollection)
|
|
|
|
|
public void SaveShortcutsForOutputResolutionsDuringMapLogic(ReadOnlyCollection<Container> containers, ReadOnlyDictionary<long, List<int>> personKeyToIds, string dFacesContentDirectory, ReadOnlyCollection<Mapping> distinctValidImageMappingCollection)
|
|
|
|
|
{
|
|
|
|
|
if (_Configuration is null)
|
|
|
|
|
throw new NullReferenceException(nameof(_Configuration));
|
|
|
|
|
WindowsShortcut windowsShortcut;
|
|
|
|
|
List<(string, DateTime[])> directoriesAndDateTimes;
|
|
|
|
|
List<SaveShortcutsForOutputResolutions> collection;
|
|
|
|
|
ReadOnlyCollection<Item> filteredItems = IContainer.GetItems(_PropertyConfiguration, containers, distinctItems: true, filterItems: true);
|
|
|
|
|
(directoriesAndDateTimes, collection) = GetCollectionForSaveShortcutsForOutputResolutionsDuringMapLogic(personKeyToIds, dFacesContentDirectory, filteredItems, mappingCollection);
|
|
|
|
|
ReadOnlyCollection<Item> validImageItems = IContainer.GetValidImageItems(_PropertyConfiguration, containers, distinctItems: true, filterItems: true);
|
|
|
|
|
(directoriesAndDateTimes, collection) = GetCollectionForSaveShortcutsForOutputResolutionsDuringMapLogic(personKeyToIds, dFacesContentDirectory, validImageItems, distinctValidImageMappingCollection);
|
|
|
|
|
string[] directories = (from l in collection select l.Directory).Distinct().ToArray();
|
|
|
|
|
foreach (string directory in directories)
|
|
|
|
|
{
|
|
|
|
|