AA.Compare Project to Match not runToDoCollectionFirst
Removed Layered AppSettings with Nested Objects at First Level
This commit is contained in:
110
People/Models/Stateless/ReadOnlyCollectionsLogic.cs
Normal file
110
People/Models/Stateless/ReadOnlyCollectionsLogic.cs
Normal file
@ -0,0 +1,110 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using View_by_Distance.Metadata.Models;
|
||||
using View_by_Distance.Shared.Models;
|
||||
using View_by_Distance.Shared.Models.Properties;
|
||||
using View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
namespace View_by_Distance.People.Models.Stateless.Methods;
|
||||
|
||||
internal static class ReadOnlyCollectionsLogic
|
||||
{
|
||||
|
||||
private static void SetPersonCollectionsAfterSetSkipCollections(PeopleSettings peopleSettings, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, List<string> personKeyFormattedCollection)
|
||||
{
|
||||
string personKeyFormatted;
|
||||
string newestPersonKeyFormatted;
|
||||
foreach (PersonContainer personContainer in personContainers)
|
||||
{
|
||||
if (personContainer.Key is null || personContainer.Birthdays is null || personContainer.Birthdays.Length == 0)
|
||||
continue;
|
||||
foreach (PersonBirthday personBirthday in personContainer.Birthdays)
|
||||
{
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(peopleSettings.PersonBirthdayFormat, personBirthday);
|
||||
personKeyFormattedCollection.Add(personKeyFormatted);
|
||||
if (personContainer.Birthdays.Length < 1)
|
||||
continue;
|
||||
newestPersonKeyFormatted = IPersonBirthday.GetFormatted(peopleSettings.PersonBirthdayFormat, personContainer.Key.Value);
|
||||
_ = personKeyFormattedToNewestPersonKeyFormatted.TryAdd(personKeyFormatted, newestPersonKeyFormatted);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void SetSkipCollections(ResultSettings resultSettings, ICompareSettings compareSettings, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<int, List<FilePathAndWholePercentages>> skipCollection, Dictionary<int, List<FilePathAndWholePercentages>> skipNotSkipCollection, ReadOnlyCollection<string> skipNotSkipDirectories)
|
||||
{
|
||||
string checkFile;
|
||||
int? wholePercentages;
|
||||
List<FilePath> distinct = [];
|
||||
List<string> distinctFiles = [];
|
||||
List<string> distinctFileName = [];
|
||||
FilePathAndWholePercentages filePathAndWholePercentages;
|
||||
bool skipNotSkipDirectoriesAny = skipNotSkipDirectories.Count > 0;
|
||||
string a2PeopleSingletonDirectory = Path.GetFullPath(IResult.GetResultsDateGroupDirectory(resultSettings, nameof(A2_People), resultSettings.ResultSingleton));
|
||||
string[] checkDirectories = string.IsNullOrEmpty(a2PeopleSingletonDirectory) ? [] : (from l in skipNotSkipDirectories select Path.GetFullPath($"{a2PeopleSingletonDirectory}{l}")).ToArray();
|
||||
foreach (PersonContainer personContainer in personContainers)
|
||||
{
|
||||
foreach (FilePath personDisplayDirectoryAllFilePath in personContainer.DisplayDirectoryAllFilePaths)
|
||||
{
|
||||
if (personDisplayDirectoryAllFilePath.ExtensionLowered != compareSettings.FacesFileNameExtension)
|
||||
continue;
|
||||
if (distinctFiles.Contains(personDisplayDirectoryAllFilePath.FullName))
|
||||
continue;
|
||||
distinctFiles.Add(personDisplayDirectoryAllFilePath.FullName);
|
||||
distinct.Add(personDisplayDirectoryAllFilePath);
|
||||
}
|
||||
}
|
||||
foreach (FilePath filePath in distinct)
|
||||
{
|
||||
if (distinctFileName.Contains(filePath.Name))
|
||||
{
|
||||
checkFile = $"{filePath.FullName}.dup";
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(filePath.FullName, checkFile);
|
||||
continue;
|
||||
}
|
||||
if (filePath.Id is null)
|
||||
continue;
|
||||
wholePercentages = IMapping.GetWholePercentages(compareSettings, filePath);
|
||||
if (wholePercentages is null)
|
||||
continue;
|
||||
if (!skipNotSkipDirectoriesAny || !checkDirectories.Any(filePath.FullName.StartsWith))
|
||||
{
|
||||
if (!skipCollection.ContainsKey(filePath.Id.Value))
|
||||
skipCollection.Add(filePath.Id.Value, []);
|
||||
filePathAndWholePercentages = new(filePath, wholePercentages.Value);
|
||||
skipCollection[filePath.Id.Value].Add(filePathAndWholePercentages);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!skipNotSkipCollection.ContainsKey(filePath.Id.Value))
|
||||
skipNotSkipCollection.Add(filePath.Id.Value, []);
|
||||
filePathAndWholePercentages = new(filePath, wholePercentages.Value);
|
||||
skipNotSkipCollection[filePath.Id.Value].Add(filePathAndWholePercentages);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal static ReadOnlyCollections GetReadOnlyCollections(ResultSettings resultSettings, PeopleSettings peopleSettings, DistanceSettings distanceSettings, ICompareSettings compareSettings, ReadOnlyCollection<PersonContainer> personContainers, ReadOnlyCollection<long> personKeys)
|
||||
{
|
||||
ReadOnlyCollections result;
|
||||
List<string> personKeyFormattedCollection = [];
|
||||
Dictionary<int, List<FilePathAndWholePercentages>> skipCollection = [];
|
||||
Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted = [];
|
||||
Dictionary<int, List<FilePathAndWholePercentages>> skipNotSkipCollection = [];
|
||||
ReadOnlyCollection<string> skipNotSkipDirectories = distanceSettings.SkipNotSkipDirectories.Where(l => !string.IsNullOrEmpty(l)).ToArray().AsReadOnly();
|
||||
SetSkipCollections(resultSettings, compareSettings, personContainers, skipCollection, skipNotSkipCollection, skipNotSkipDirectories);
|
||||
SetPersonCollectionsAfterSetSkipCollections(peopleSettings, personContainers, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection);
|
||||
ReadOnlyCollection<PersonKeyFormattedAndKeyTicksAndDisplayDirectoryName> jLinkResolvedDirectories = IPeople.GetJLinkResolvedDirectories(resultSettings, peopleSettings);
|
||||
ReadOnlyCollection<long> jLinkResolvedPersonKeys = jLinkResolvedDirectories.Select(l => l.KeyTicks).ToArray().AsReadOnly();
|
||||
result = new(jLinkResolvedPersonKeys,
|
||||
personContainers,
|
||||
personKeyFormattedCollection.AsReadOnly(),
|
||||
personKeyFormattedToNewestPersonKeyFormatted.AsReadOnly(),
|
||||
personKeys,
|
||||
skipCollection.AsReadOnly(),
|
||||
skipNotSkipCollection.AsReadOnly(),
|
||||
skipNotSkipDirectories);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user