GetJLinkDirectories, IsFocusPerson and start of

ignoreXMatches
This commit is contained in:
2023-08-01 00:42:53 -07:00
parent f62825d9aa
commit a95639153e
16 changed files with 250 additions and 116 deletions

View File

@ -425,11 +425,11 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
directory = GetDirectory(_Configuration, saveIndividually, padLeft, mapping.SegmentC, by, mapping.MappingFromItem);
if (string.IsNullOrEmpty(directory))
continue;
personDirectory = Path.Combine(directory, $"Z]{ticks}");
personDirectory = Path.Combine(directory, $"X]{ticks}");
if (saveIndividually)
{
directory = Path.Combine(directory, mapping.MappingFromItem.Id.ToString());
results.Add(new(Path.Combine(directory, $"Z]{ticks}")));
results.Add(new(Path.Combine(directory, $"X]{ticks}")));
}
distinct.Add(mapping.MappingFromItem.Id);
distinct.Add(mapping.SortingContainer.Sorting.Id);
@ -556,23 +556,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory);
}
public bool Used(FaceDistance faceDistanceEncoding)
{
bool result = false;
if (faceDistanceEncoding.WholePercentages is null)
throw new NotSupportedException();
List<int>? wholePercentagesCollection;
Dictionary<int, PersonContainer[]>? wholePercentagesToPersonContainers;
if (_SkipCollection.TryGetValue(faceDistanceEncoding.Id, out wholePercentagesCollection) && wholePercentagesCollection.Contains(faceDistanceEncoding.WholePercentages.Value))
result = true;
if (!result && _IdThenWholePercentagesToPersonContainers.TryGetValue(faceDistanceEncoding.Id, out wholePercentagesToPersonContainers))
{
if (wholePercentagesToPersonContainers.ContainsKey(faceDistanceEncoding.WholePercentages.Value))
result = true;
}
return result;
}
public List<Sorting> GetSortingCollection(int i, FaceDistance faceDistanceEncoding, List<FaceDistance> faceDistanceLengths)
{
if (_Configuration is null)
@ -1107,7 +1090,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
SaveContainer? saveContainer;
bool saveIndividually = false;
List<SaveContainer> saveContainers = new();
Stateless.MapLogic.BeforeSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory);
(int, FileHolder, int, string, string, string, string)[] collection = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory, personContainers, mappingCollection, personKeyToIds);
foreach ((int id, FileHolder imageFileHolder, int approximateYears, string personKeyFormatted, string directory, string personDirectory, string checkFile) in collection)
{
@ -1359,6 +1341,25 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
return results;
}
public bool IsUsed(bool ignoreXMatches, int id, MappingFromLocation mappingFromLocation)
{
bool result;
PersonContainer[]? personContainers;
List<int>? wholePercentagesCollection;
Dictionary<int, PersonContainer[]>? wholePercentagesToPersonContainers;
result = _SkipCollection.TryGetValue(id, out wholePercentagesCollection) && wholePercentagesCollection.Contains(mappingFromLocation.WholePercentages);
if (!result && _IdThenWholePercentagesToPersonContainers.TryGetValue(id, out wholePercentagesToPersonContainers))
{
if (wholePercentagesToPersonContainers.TryGetValue(mappingFromLocation.WholePercentages, out personContainers))
{
result = true;
// if (!ignoreXMatches || personContainers.All(l => l.ApproximateYears is null && l.DisplayDirectoryName.First() != 'X'))
// result = true;
}
}
return result;
}
public bool InSkipCollection(int id, MappingFromLocation mappingFromLocation)
{
bool result;
@ -1366,4 +1367,30 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
return result;
}
public bool? IsFocusPerson(List<(string Directory, long PersonKey)> jLinkResolvedDirectories, int id, MappingFromLocation mappingFromLocation)
{
bool? result;
PersonContainer[]? personContainers;
Dictionary<int, PersonContainer[]>? wholePercentagesToPersonContainers;
if (jLinkResolvedDirectories.Count == 0)
result = null;
else if (!_IdThenWholePercentagesToPersonContainers.TryGetValue(id, out wholePercentagesToPersonContainers))
result = null;
else if (!wholePercentagesToPersonContainers.TryGetValue(mappingFromLocation.WholePercentages, out personContainers))
result = null;
else
{
result = false;
foreach (PersonContainer personContainer in personContainers)
{
if (jLinkResolvedDirectories.Any(l => personContainer.Key == l.PersonKey))
{
result = true;
break;
}
}
}
return result;
}
}

View File

@ -142,7 +142,7 @@ internal abstract class MapLogic
if (files.Length != 4)
continue;
collection = files.Select(l => new FileInfo(l)).ToArray();
isDefault = alphaDirectoryName.First() == 'Z' && IPersonBirthday.IsCounterPersonYear(personKeyFormatted[..4]);
isDefault = alphaDirectoryName.First() == 'X' && IPersonBirthday.IsCounterPersonYear(personKeyFormatted[..4]);
if (isDefault)
facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension select l.FullName).ToArray();
else
@ -279,16 +279,15 @@ internal abstract class MapLogic
personDisplayDirectoryNames = IPath.GetDirectoryNames(personNameDirectory);
if (!personDisplayDirectoryNames.Any())
continue;
isDefault = personDisplayDirectoryNames[^1].First() == 'Z' && IPersonBirthday.IsCounterPersonYear(personKeyFormatted[..4]);
isDefault = personDisplayDirectoryNames[^1].First() == 'X' && IPersonBirthday.IsCounterPersonYear(personKeyFormatted[..4]);
if (isDefault && personDisplayDirectoryNames[^1].Length == 1)
{
if (personKeyFormatted.Length != configuration.PersonBirthdayFormat.Length || !DateTime.TryParseExact(personKeyFormatted, configuration.PersonBirthdayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
continue;
checkDirectory = Path.Combine(yearDirectory, $"Z]{dateTime.Ticks}");
checkDirectory = Path.Combine(yearDirectory, $"X]{dateTime.Ticks}");
if (Directory.Exists(checkDirectory))
{
files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
RenameUnknown(files);
Directory.Delete(yearDirectory, recursive: true);
continue;
}
Directory.Move(personNameDirectory, checkDirectory);
@ -424,7 +423,7 @@ internal abstract class MapLogic
group = IPerson.GetHourGroup(personDisplayDirectoryName, personBirthday.Value.Hour);
(status, sex, first) = IPerson.GetPersonHour(personDisplayDirectoryName, personBirthday.Value.Hour);
personDirectory = new(matches.First(), group, status, sex, first);
personContainer = new(configuration.MappingDefaultName, configuration.PersonCharacters.ToArray(), personBirthday, personDisplayDirectoryName, personDirectory);
personContainer = new(configuration.PersonCharacters.ToArray(), personBirthday, personDisplayDirectoryName, personDirectory);
personKeyFormattedToPersonContainer.Add(personKeyFormattedIdThenWholePercentages.PersonKeyFormatted, personContainer);
}
if (!idThenWholePercentagesToPersonContainerCollection.ContainsKey(personKeyFormattedIdThenWholePercentages.Id))
@ -542,7 +541,7 @@ internal abstract class MapLogic
if (check)
continue;
personBirthday = IPersonBirthday.GetPersonBirthday(personKey + (oneHour * 2));
person = IPerson.GetPerson(configuration.MappingDefaultName, configuration.PersonCharacters.ToArray(), configuration.MappingDefaultName, personKey, personBirthday);
person = IPerson.GetPerson(configuration.PersonCharacters.ToArray(), configuration.MappingDefaultName, personKey, personBirthday);
personContainer = new(approximateYears, new PersonBirthday[] { personBirthday }, personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey, person);
results.Add(personContainer);
if (results.Count > 99)
@ -1185,24 +1184,43 @@ internal abstract class MapLogic
return results;
}
private static bool TryToFind(string a2PeopleSingletonDirectory, string file, string path)
private static string? TryToFind(char[] personCharacters, string a2PeopleSingletonDirectory, List<(string Directory, string DirectoryName, string DirectoryNameSplitFirst)> a2PeopleSingletonDirectories, string file, string path)
{
bool result = false;
string? result;
string? pathName = Path.GetFileName(path);
string? group = Path.GetDirectoryName(path);
string? groupName = Path.GetFileName(group);
if (pathName is not null && group is not null && groupName is not null)
if (pathName is null || group is null || groupName is null)
result = null;
else
{
WindowsShortcut windowsShortcut;
string checkDirectory = Path.Combine(a2PeopleSingletonDirectory, groupName, pathName);
if (Directory.Exists(checkDirectory))
string[] matches;
matches = (from l in a2PeopleSingletonDirectories where l.DirectoryName == pathName select l.Directory).ToArray();
if (matches.Length == 1)
result = matches.First();
else
{
string pathNameSplitFirst = pathName.Split(personCharacters).First();
matches = (from l in a2PeopleSingletonDirectories where l.DirectoryNameSplitFirst == pathNameSplitFirst select l.Directory).ToArray();
if (matches.Length == 1)
result = matches.First();
else
{
string checkDirectory = Path.Combine(a2PeopleSingletonDirectory, groupName, pathName);
if (!Directory.Exists(checkDirectory))
result = null;
else
result = checkDirectory;
}
}
if (!string.IsNullOrEmpty(result))
{
try
{
windowsShortcut = new() { Path = checkDirectory };
WindowsShortcut windowsShortcut;
windowsShortcut = new() { Path = result };
windowsShortcut.Save(file);
windowsShortcut.Dispose();
result = true;
}
catch (Exception)
{ }
@ -1211,29 +1229,71 @@ internal abstract class MapLogic
return result;
}
internal static void BeforeSaveFilteredOriginalImagesFromJLinks(string[] jLinks, string a2PeopleContentDirectory)
private static List<(string, long)> GetJLinkResolvedDirectories(string personBirthdayFormat, List<string> resolvedDirectories)
{
List<(string, long)> results = new();
DateTime dateTime;
string directoryName;
string[] directories;
foreach (string resolvedDirectory in resolvedDirectories)
{
directories = Directory.GetDirectories(resolvedDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string directory in directories)
{
directoryName = Path.GetFileName(directory);
if (directoryName.Length != personBirthdayFormat.Length || !DateTime.TryParseExact(directoryName, personBirthdayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
continue;
results.Add((resolvedDirectory, dateTime.Ticks));
}
}
if (results.Count != resolvedDirectories.Count)
results.Clear();
return results;
}
internal static List<(string, long)> GetJLinkDirectories(string[] jLinks, string personBirthdayFormat, char[] personCharacters, string a2PeopleSingletonDirectory, string a2PeopleContentDirectory)
{
List<(string, long)> results;
string[] files;
string? foundPath;
int totalFiles = 0;
string checkDirectory;
WindowsShortcut windowsShortcut;
List<string> resolvedDirectories = new();
List<(string, string, string)> a2PeopleSingletonDirectories = new();
foreach (string directory in Directory.GetDirectories(a2PeopleSingletonDirectory, "*", SearchOption.AllDirectories))
a2PeopleSingletonDirectories.Add((directory, Path.GetFileName(directory), Path.GetFileName(directory).Split(personCharacters).First()));
foreach (string directoryName in jLinks)
{
checkDirectory = Path.Combine(a2PeopleContentDirectory, directoryName);
if (!Directory.Exists(checkDirectory))
continue;
files = Directory.GetFiles(checkDirectory, "*.lnk", SearchOption.TopDirectoryOnly);
totalFiles += files.Length;
foreach (string file in files)
{
windowsShortcut = WindowsShortcut.Load(file);
if (windowsShortcut.Path is null)
continue;
if (!Directory.Exists(windowsShortcut.Path))
if (Directory.Exists(windowsShortcut.Path))
resolvedDirectories.Add(windowsShortcut.Path);
else
{
if (!TryToFind(a2PeopleContentDirectory, file, windowsShortcut.Path))
foundPath = TryToFind(personCharacters, a2PeopleSingletonDirectory, a2PeopleSingletonDirectories, file, windowsShortcut.Path);
if (string.IsNullOrEmpty(foundPath))
continue;
resolvedDirectories.Add(foundPath);
}
}
}
if (totalFiles == resolvedDirectories.Count)
results = GetJLinkResolvedDirectories(personBirthdayFormat, resolvedDirectories);
else
{
resolvedDirectories.Clear();
results = new();
}
return results;
}
internal static (string, bool, bool) Get(int? useFiltersCounter, bool saveIndividually, bool sortingContainersAny, string forceSingleImageHumanized, Mapping mapping)

View File

@ -28,4 +28,9 @@ public interface IMapLogic
static Dictionary<int, Dictionary<int, Shared.Models.Mapping>> GetIdToWholePercentagesToFace(Shared.Models.Mapping[] mappingCollection) =>
MapLogic.GetIdToWholePercentagesToFace(mappingCollection);
List<(string, long)> TestStatic_GetJLinkDirectories(string[] jLinks, string personBirthdayFormat, char[] personCharacters, string a2PeopleSingletonDirectory, string a2PeopleContentDirectory) =>
GetJLinkDirectories(jLinks, personBirthdayFormat, personCharacters, a2PeopleSingletonDirectory, a2PeopleContentDirectory);
static List<(string, long)> GetJLinkDirectories(string[] jLinks, string personBirthdayFormat, char[] personCharacters, string a2PeopleSingletonDirectory, string a2PeopleContentDirectory) =>
MapLogic.GetJLinkDirectories(jLinks, personBirthdayFormat, personCharacters, a2PeopleSingletonDirectory, a2PeopleContentDirectory);
}