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

@ -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);
}