Removed SortContainers

useCeilingAverage as parameter
This commit is contained in:
2023-08-08 21:09:26 -07:00
parent 77f800d1a4
commit b3da09c757
33 changed files with 147 additions and 381 deletions

View File

@ -10,9 +10,12 @@ using WindowsShortcutFactory;
namespace View_by_Distance.Map.Models;
public class MapLogic : Shared.Models.Methods.IMapLogic
public partial class MapLogic : Shared.Models.Methods.IMapLogic
{
[GeneratedRegex("[\\\\,\\/,\\:,\\*,\\?,\\\",\\<,\\>,\\|]")]
private static partial Regex FileSystemSafe();
private readonly long _Ticks;
private readonly Serilog.ILogger? _Log;
private readonly Configuration? _Configuration;
@ -21,7 +24,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
private readonly List<PersonContainer> _NotMappedPersonContainers;
private readonly ReadOnlyDictionary<int, List<int>> _SkipCollection;
private readonly ReadOnlyDictionary<int, List<int>> _SkipNotSkipCollection;
private readonly ReadOnlyDictionary<long, PersonContainer> _PersonKeyToPersonContainer;
private readonly Shared.Models.Properties.IPropertyConfiguration _PropertyConfiguration;
private readonly ReadOnlyDictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> _IdToLocationContainers;
private readonly ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> _IdThenWholePercentagesToPersonContainers;
@ -38,7 +40,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
List<PersonContainer> notMappedPersonContainers = new();
Dictionary<int, List<(string, int)>> skipCollection = new();
Dictionary<int, List<(string, int)>> skipNotSkipCollection = new();
Dictionary<long, PersonContainer> personKeyToPersonContainer = new();
List<LocationContainer<MetadataExtractor.Directory>> locationContainers = new();
string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory);
string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, $"({ticks})");
@ -76,13 +77,12 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
ReadOnlyCollection<Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection = Stateless.MapLogic.GetPersonKeyFormattedIdThenWholePercentages(configuration, ticks, records);
int unableToMatchCount = records.Count - personKeyFormattedIdThenWholePercentagesCollection.Count;
if (lossCount != 0 || unableToMatchCount != 0)
{
if (lossCount != 0 || unableToMatchCount != 0)
{ }
}
//
{
Dictionary<long, int> personKeyToCount = new();
Dictionary<long, PersonContainer> personKeyToPersonContainer = new();
Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer = new();
Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection = new();
List<(Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages, PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer = new();
@ -98,12 +98,12 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
readOnlyPersonKeyFormattedToPersonContainer = new(personKeyFormattedToPersonContainer);
readOnlyPersonKeyToPersonContainerCollection = new(personKeyToPersonContainerCollection);
readOnlyPossiblyNewPersonDisplayDirectoryNamesAndPersonContainer = new(possiblyNewPersonDisplayDirectoryNamesAndPersonContainer);
Stateless.MapLogic.SetPersonKeyToPersonContainer(configuration,
personContainers,
readOnlyPersonKeyToCount,
personKeyToPersonContainer,
readOnlyPersonKeyToPersonContainerCollection);
}
Stateless.MapLogic.SetPersonKeyToPersonContainer(configuration,
personContainers,
readOnlyPersonKeyToCount,
personKeyToPersonContainer,
readOnlyPersonKeyToPersonContainerCollection);
Stateless.MapLogic.PossiblyRebuildPersonContainers(configuration,
ticks,
a2PeopleSingletonDirectory,
@ -118,7 +118,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
readOnlyPersonKeyToCount));
}
_PersonKeyToCount = readOnlyPersonKeyToCount;
_PersonKeyToPersonContainer = new(personKeyToPersonContainer);
_EDistanceContentTicksDirectory = eDistanceContentTicksDirectory;
_SkipCollection = Stateless.MapLogic.ConvertSkip(skipCollection);
Stateless.MapLogic.CheckCollection(propertyConfiguration, rootDirectoryParent);
@ -159,9 +158,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
PersonBirthday personBirthday;
List<string> shouldMove = new();
foreach (KeyValuePair<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> idToCollection in _IdThenWholePercentagesToPersonContainers)
{
foreach (KeyValuePair<int, ReadOnlyCollection<PersonContainer>> wholePercentagesToPersonContainers in idToCollection.Value)
{
foreach (PersonContainer personContainer in wholePercentagesToPersonContainers.Value)
{
if (personContainer.Key is null || personContainer.Birthdays is null || personContainer.Birthdays.Length == 0)
@ -180,8 +177,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
continue;
collection.Add(idToCollection.Key);
}
}
}
if (shouldMove.Count > 0)
throw new Exception(string.Join(Environment.NewLine, shouldMove));
return results;
@ -227,12 +222,10 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
personKey = personBirthday.Value.Ticks;
mappingSegmentB = Stateless.MapLogic.GetMappingSegmentB(_Ticks, personBirthday, personContainer.ApproximateYears, mapping.MappingFromItem);
if (locationContainersFiles is null)
{
if (mapping.MappingFromPerson is null || mapping.MappingFromPerson.LocationContainersFiles.Count == 0)
locationContainersFiles = new(Array.Empty<string>());
else
locationContainersFiles = mapping.MappingFromPerson.LocationContainersFiles;
}
mapping.UpdateMappingFromPerson(locationContainersFiles, personContainer.ApproximateYears, personContainer.DisplayDirectoryName, personBirthday, mappingSegmentB);
}
}
@ -317,7 +310,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
File.SetAttributes(checkFile, FileAttributes.Hidden);
}
if (updated is null)
{
foreach (SaveContainer saveContainer in saveContainers)
{
if (string.IsNullOrEmpty(saveContainer.Directory) || string.IsNullOrEmpty(saveContainer.CheckFile) || saveContainer.ResizedFileHolder is null || !saveContainer.ResizedFileHolder.Exists)
@ -330,7 +322,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
if (saveContainer.MakeAllHidden)
File.SetAttributes(checkFile, FileAttributes.Hidden);
}
}
foreach (SaveContainer saveContainer in saveContainers)
{
if (string.IsNullOrEmpty(saveContainer.Directory) || string.IsNullOrEmpty(saveContainer.ShortcutFile) || saveContainer.ResizedFileHolder is null || !saveContainer.ResizedFileHolder.Exists)
@ -524,26 +515,24 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
saveContainer = new(checkFile, directory, faceFileHolder);
}
else
{
if (saveIndividually)
{
facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(_PropertyConfiguration, d2FacePartsContentDirectory, mapping.MappingFromItem);
facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacePartsFileNameExtension}"));
(saveContainer, SaveContainer? extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, directory, faceFileHolder, facePartsFileHolder, mapping);
if (extraSaveContainer is not null)
results.Add(extraSaveContainer);
}
else
{
facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(_PropertyConfiguration, d2FacePartsContentDirectory, mapping.MappingFromItem);
shortcutFile = Path.Combine(personDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.lnk");
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
hiddenFaceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesHiddenFileNameExtension}"));
facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacePartsFileNameExtension}"));
saveContainer = new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
if (!isByMapping && mapping.By is not null && mapping.MappingFromPerson?.LocationContainersFiles.Count > 0 && IPerson.IsDefaultName(mapping.MappingFromPerson))
results.Add(new(Path.GetDirectoryName(personDirectory) ?? personDirectory, mapping.MappingFromPerson.LocationContainersFiles[0]));
}
{
facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(_PropertyConfiguration, d2FacePartsContentDirectory, mapping.MappingFromItem);
facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacePartsFileNameExtension}"));
(saveContainer, SaveContainer? extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, directory, faceFileHolder, facePartsFileHolder, mapping);
if (extraSaveContainer is not null)
results.Add(extraSaveContainer);
}
else
{
facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(_PropertyConfiguration, d2FacePartsContentDirectory, mapping.MappingFromItem);
shortcutFile = Path.Combine(personDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.lnk");
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
hiddenFaceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesHiddenFileNameExtension}"));
facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacePartsFileNameExtension}"));
saveContainer = new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
if (!isByMapping && mapping.By is not null && mapping.MappingFromPerson?.LocationContainersFiles.Count > 0 && IPerson.IsDefaultName(mapping.MappingFromPerson))
results.Add(new(Path.GetDirectoryName(personDirectory) ?? personDirectory, mapping.MappingFromPerson.LocationContainersFiles[0]));
}
results.Add(saveContainer);
if (!isBySorting || mapping.SortingContainer is null || keyMapping is null)
@ -939,7 +928,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
if (!string.IsNullOrEmpty(mapping.MappingFromItem.Model) && !string.IsNullOrEmpty(mapping.MappingFromItem.Model.Trim()))
{
// Remove-Item -LiteralPath "\\?\D:\Tmp\a\EX-Z70 "
directory = Path.Combine($"{eDistanceContentDirectory}---", "Model Shortcuts", Regex.Replace(mapping.MappingFromItem.Model.Trim(), @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]", "_"), directoryName);
directory = Path.Combine($"{eDistanceContentDirectory}---", "Model Shortcuts", FileSystemSafe().Replace(mapping.MappingFromItem.Model.Trim(), "_"), directoryName);
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}.lnk");
results.Add(new(mapping.MappingFromItem.ImageFileHolder.FullName, directory, dateTime, fileName, description, MakeAllHidden: false));
}
@ -1152,13 +1141,9 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
ReadOnlyCollection<PersonContainer>? personContainers;
result = _SkipCollection.TryGetValue(id, out wholePercentagesCollection) && wholePercentagesCollection.Contains(wholePercentages);
if (!result && wholePercentagesToPersonContainers is not null)
{
if (wholePercentagesToPersonContainers.TryGetValue(wholePercentages, out personContainers))
{
if (!ignoreXMatches || !personContainers.Any(l => IPerson.IsDefaultName(l)))
result = true;
}
}
return result;
}
@ -1229,7 +1214,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
foreach (string directory in directories)
{
directoryName = Path.GetFileName(directory);
if (string.IsNullOrEmpty(directoryName) || (directoryName.Length != 2 && directoryName.Length != 4))
if (string.IsNullOrEmpty(directoryName) || directoryName.Length != 2 && directoryName.Length != 4)
continue;
Stateless.MapLogic.LookForAbandoned(distinctFilteredIds, directory, directoryName);
}
@ -1237,7 +1222,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
foreach (string directory in directories)
{
directoryName = Path.GetFileName(directory);
if (string.IsNullOrEmpty(directoryName) || (directoryName.Length != 2 && directoryName.Length != 4))
if (string.IsNullOrEmpty(directoryName) || directoryName.Length != 2 && directoryName.Length != 4)
continue;
Stateless.MapLogic.LookForAbandoned(distinctFilteredIds, directory, directoryName);
}
@ -1245,7 +1230,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
foreach (string directory in directories)
{
directoryName = Path.GetFileName(directory);
if (string.IsNullOrEmpty(directoryName) || (directoryName.Length != 2 && directoryName.Length != 4))
if (string.IsNullOrEmpty(directoryName) || directoryName.Length != 2 && directoryName.Length != 4)
continue;
Stateless.MapLogic.LookForAbandoned(distinctFilteredIds, directory, directoryName);
}