diff --git a/.vscode/launch.json b/.vscode/launch.json index d964162..92f3352 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -144,4 +144,5 @@ // https://scontent-lax3-1.xx.fbcdn.net/v/t1.6435-9/92554157_10158297246718523_986365937043111936_n.jpg?_nc_cat=105&ccb=1-7&_nc_sid=8bfeb9&_nc_ohc=lWhPQlbtKVoAX-4D9Ke&tn=D0unuoVdv--xjhpM&_nc_ht=scontent-lax3-1.xx&oh=00_AT_P1suJEkfnHlSL3rPoDoYW2exSg_gQyN--HoylQbt_JQ&oe=63567442 // https://scontent-lax3-2.xx.fbcdn.net/v/t39.30808-6/280689051_10209840036394561_8737214584492733274_n.jpg?_nc_cat=101&ccb=1-7&_nc_sid=8bfeb9&_nc_ohc=iMAAHqNekCgAX8fvEAm&_nc_ht=scontent-lax3-2.xx&oh=00_AT8b7_ODsDN7lNgTKr7JZiUE65R7WWYxENl1vOUGeobpBw&oe=6336E678 // https://scontent-lax3-1.xx.fbcdn.net/v/t1.18169-9/25110_107749419250772_1842086_n.jpg?_nc_cat=104&ccb=1-7&_nc_sid=09cbfe&_nc_ohc=xPyRCvImlaoAX9Z_UTs&_nc_ht=scontent-lax3-1.xx&oh=00_AT85xffhHDJlhzyFTBvWs8j3Gd4GyDCte_Pnd7hNM006sw&oe=635880C2 -// https://scontent-lax3-2.xx.fbcdn.net/v/t1.18169-9/10259940_10153561109653458_6837681277740526675_n.jpg?_nc_cat=100&ccb=1-7&_nc_sid=8bfeb9&_nc_ohc=T1v9Wfqz8rUAX8y6bxq&tn=D0unuoVdv--xjhpM&_nc_ht=scontent-lax3-2.xx&oh=00_AT9Y9j5s19n0EzgO_dZMom8tAweFYIrJLOEsrsr4HAWHkQ&oe=63588CAE \ No newline at end of file +// https://scontent-lax3-2.xx.fbcdn.net/v/t1.18169-9/10259940_10153561109653458_6837681277740526675_n.jpg?_nc_cat=100&ccb=1-7&_nc_sid=8bfeb9&_nc_ohc=T1v9Wfqz8rUAX8y6bxq&tn=D0unuoVdv--xjhpM&_nc_ht=scontent-lax3-2.xx&oh=00_AT9Y9j5s19n0EzgO_dZMom8tAweFYIrJLOEsrsr4HAWHkQ&oe=63588CAE +// https://scontent-lax3-1.xx.fbcdn.net/v/t31.18172-8/17621858_10154253751886426_3939148233753829194_o.jpg?_nc_cat=104&ccb=1-7&_nc_sid=ad2b24&_nc_ohc=yMOqJQQBV80AX8Xlzr-&_nc_ht=scontent-lax3-1.xx&oh=00_AT_z0oeHJ0fqKhVA4WdgGE2cZSgL0bIKNXzPsY0zeLipAg&oe=6356AF4C \ No newline at end of file diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs index d58cc49..24fb53b 100644 --- a/Map/Models/MapLogic.cs +++ b/Map/Models/MapLogic.cs @@ -201,47 +201,29 @@ public class MapLogic { if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); - string fileName; - string fullName; - string personKeyFormatted; - PersonBirthday personBirthday; - WindowsShortcut windowsShortcut; - PersonContainer? personContainer; - List<(Face, long?, (string, string, string, string))> collection = GetCollection(distinctFilteredFaces); - foreach ((Face face, long? personKey, (string directory, string copyDirectory, string copyFileName, string shortcutFileName)) in collection) + List<(Face, List<(string?, string, string?, string?, string)>)> facesToCollection = GetCollection(distinctFilteredFaces); + foreach ((Face face, List<(string? PersonKeyFormatted, string, string?, string?, string)> collection) in facesToCollection) { - if (personKey is null) + if (collection.Any(l => l.PersonKeyFormatted is not null and "1501-04-10_00")) continue; - if (face.Mapping is null) - throw new NotSupportedException(); - personBirthday = IPersonBirthday.GetPersonBirthday(personKey.Value); - personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday); - if (juliePhares.Contains(personKeyFormatted) && !string.IsNullOrEmpty(copyDirectory)) + foreach ((string? personKeyFormatted, string directory, string? copyDirectory, string? copyFileName, string _) in collection) { + if (face.Mapping is null) + throw new NotSupportedException(); + if (personKeyFormatted is null) + continue; + if (!Directory.Exists(directory)) + _ = Directory.CreateDirectory(directory); + if (string.IsNullOrEmpty(copyDirectory) || string.IsNullOrEmpty(copyFileName)) + continue; + if (!juliePhares.Contains(personKeyFormatted)) + continue; if (!Directory.Exists(copyDirectory)) _ = Directory.CreateDirectory(copyDirectory); - fileName = Path.Combine(copyDirectory, $"{face.Mapping.MappingFromItem.Id}{face.Mapping.MappingFromItem.ResizedFileHolder.ExtensionLowered}"); - if (!File.Exists(fileName)) - File.Copy(face.Mapping.MappingFromItem.ResizedFileHolder.FullName, fileName); + if (!File.Exists(copyFileName)) + File.Copy(face.Mapping.MappingFromItem.ResizedFileHolder.FullName, copyFileName); + break; } - if (!Directory.Exists(directory)) - { - _ = Directory.CreateDirectory(directory); - if (personKey is not null && _PersonKeyToPersonContainer.TryGetValue(personKey.Value, out personContainer)) - { - fullName = string.Concat(personContainer.DisplayDirectoryName, ".txt"); - File.WriteAllText(Path.Combine(directory, fullName), string.Empty); - } - } - fileName = Path.Combine(directory, $"{face.Mapping.MappingFromItem.Id}.lnk"); - if (File.Exists(fileName)) - continue; - windowsShortcut = new() { Path = face.Mapping.MappingFromItem.ResizedFileHolder.FullName }; - windowsShortcut.Save(fileName); - windowsShortcut.Dispose(); - if (!File.Exists(fileName)) - continue; - File.SetLastWriteTime(fileName, face.Mapping.MappingFromItem.MinimumDateTime); } } @@ -423,83 +405,88 @@ public class MapLogic SaveContainers(totalNotMapped, updated, saveContainers); } - public List<(Face, long?, (string, string, string, string))> GetCollection(List distinctFilteredFaces) + private List<(Face, List<(string?, string, string?, string?, string)>)> GetCollection(List distinctFilteredFaces) { if (_Configuration is null) throw new NullReferenceException(nameof(_Configuration)); - List<(Face, long?, (string, string, string, string))> results = new(); + List<(Face, List<(string?, string, string?, string?, string)>)> results = new(); int years; - long? personKey; string directory; - const int zero = 0; TimeSpan? timeSpan; - string copyFileName; - string copyDirectory; + string? copyFileName; string? relativePath; + string? copyDirectory; string isWrongYearFlag; string shortcutFileName; string subDirectoryName; string personKeyFormatted; - PersonBirthday personBirthday; DateTime dateTime = DateTime.Now; PersonContainer[] personContainers; - Dictionary? keyValuePairs; + Dictionary? idToPersonContainers; + List<(string?, string, string?, string?, string)> collection; foreach (Face face in distinctFilteredFaces) { if (face.Mapping is null) throw new NotSupportedException(); - copyFileName = string.Empty; - copyDirectory = string.Empty; + collection = new(); + copyFileName = null; + copyDirectory = null; relativePath = Path.GetDirectoryName($"C:{face.RelativePath}"); if (string.IsNullOrEmpty(relativePath) || relativePath.Length < 3) continue; - if (!_IdThenNormalizedPixelPercentageToPersonContainers.TryGetValue(face.Mapping.MappingFromItem.Id, out keyValuePairs)) + if (!_IdThenNormalizedPixelPercentageToPersonContainers.TryGetValue(face.Mapping.MappingFromItem.Id, out idToPersonContainers)) { - personKey = null; directory = Path.Combine(_EDistanceContentTicksDirectory, $"Unnamed{relativePath[2..]}"); + shortcutFileName = Path.Combine(directory, $"{face.Mapping.MappingFromItem.Id}.lnk"); + collection.Add(new(null, directory, copyDirectory, copyFileName, shortcutFileName)); } else { - if (!keyValuePairs.ContainsKey(face.Mapping.MappingFromLocation.NormalizedPixelPercentage)) + if (!idToPersonContainers.ContainsKey(face.Mapping.MappingFromLocation.NormalizedPixelPercentage)) continue; - personKey = null; isWrongYearFlag = IItem.GetWrongYearFlag(face.Mapping.MappingFromItem.IsWrongYear); subDirectoryName = $"{isWrongYearFlag}{face.Mapping.MappingFromItem.MinimumDateTime:yyyy}"; - personContainers = keyValuePairs[face.Mapping.MappingFromLocation.NormalizedPixelPercentage]; - directory = Path.Combine(_EDistanceContentTicksDirectory, $"Not Supported{relativePath[2..]}", subDirectoryName); + personContainers = idToPersonContainers[face.Mapping.MappingFromLocation.NormalizedPixelPercentage]; foreach (PersonContainer personContainer in personContainers) { if (personContainers.Length != 1) break; if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any()) continue; - personKey = personContainer.Key.Value; - personBirthday = personContainer.Birthdays[zero]; - timeSpan = IPersonBirthday.GetTimeSpan(face.Mapping.MappingFromItem.MinimumDateTime, face.Mapping.MappingFromItem.IsWrongYear, personBirthday); - if (timeSpan.HasValue) + foreach (PersonBirthday personBirthday in personContainer.Birthdays) { - if (timeSpan.Value.Ticks < 0) - subDirectoryName = "!---"; - else + timeSpan = IPersonBirthday.GetTimeSpan(face.Mapping.MappingFromItem.MinimumDateTime, face.Mapping.MappingFromItem.IsWrongYear, personBirthday); + if (timeSpan.HasValue) { - (years, _) = IPersonBirthday.GetAge(dateTime, personBirthday); - subDirectoryName = $"^{years:000}"; + if (timeSpan.Value.Ticks < 0) + subDirectoryName = "!---"; + else + { + (years, _) = IPersonBirthday.GetAge(dateTime, personBirthday); + subDirectoryName = $"^{years:000}"; + } } + personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday); + directory = Path.Combine(_EDistanceContentTicksDirectory, "Shortcuts", personKeyFormatted, subDirectoryName); + if (face.FaceEncoding is not null) + copyDirectory = Path.Combine(_EDistanceContentTicksDirectory, "Images", personKeyFormatted, subDirectoryName); + else + copyDirectory = Path.Combine(_EDistanceContentTicksDirectory, "ImagesBut", personKeyFormatted, subDirectoryName); + copyFileName = Path.Combine(copyDirectory, $"{face.Mapping.MappingFromItem.Id}{face.Mapping.MappingFromItem.ResizedFileHolder.ExtensionLowered}"); + shortcutFileName = Path.Combine(directory, $"{face.Mapping.MappingFromItem.Id}.lnk"); + collection.Add(new(personKeyFormatted, directory, copyDirectory, copyFileName, shortcutFileName)); } - personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday); - directory = Path.Combine(_EDistanceContentTicksDirectory, "Shortcuts", personKeyFormatted, subDirectoryName); - if (face.FaceEncoding is not null) - copyDirectory = Path.Combine(_EDistanceContentTicksDirectory, "Images", personKeyFormatted, subDirectoryName); - else - copyDirectory = Path.Combine(_EDistanceContentTicksDirectory, "ImagesBut", personKeyFormatted, subDirectoryName); - copyFileName = Path.Combine(copyDirectory, $"{face.Mapping.MappingFromItem.Id}{face.Mapping.MappingFromItem.ResizedFileHolder.ExtensionLowered}"); + } + if (!collection.Any()) + { + copyFileName = null; + copyDirectory = null; + directory = Path.Combine(_EDistanceContentTicksDirectory, $"Not Supported{relativePath[2..]}", subDirectoryName); + shortcutFileName = Path.Combine(directory, $"{face.Mapping.MappingFromItem.Id}.lnk"); + collection.Add(new(null, directory, copyDirectory, copyFileName, shortcutFileName)); } } - shortcutFileName = Path.Combine(directory, $"{face.Mapping.MappingFromItem.Id}.lnk"); - if (personKey is null) - results.Add(new(face, null, (directory, copyDirectory, copyFileName, shortcutFileName))); - else - results.Add(new(face, personKey, (directory, copyDirectory, copyFileName, shortcutFileName))); + results.Add(new(face, collection)); } return results; } diff --git a/Map/Models/Stateless/MapLogic.cs b/Map/Models/Stateless/MapLogic.cs index 5d181e6..c0acf4f 100644 --- a/Map/Models/Stateless/MapLogic.cs +++ b/Map/Models/Stateless/MapLogic.cs @@ -126,14 +126,7 @@ internal abstract class MapLogic personDisplayDirectoryNames = IPath.GetDirectoryNames(personNameDirectory); if (!personDisplayDirectoryNames.Any()) continue; - if (personDisplayDirectoryNames[^1].Length == 1 || personDisplayDirectoryNames[^1] == configuration.MappingDefaultName || !personKeyFormattedCollection.Contains(personKeyFormatted)) - personFirstInitialDirectory = personNameDirectory; - else - { - personFirstInitial = personDisplayDirectoryNames[^1][..1]; - personFirstInitialDirectory = Path.Combine(yearDirectory, personFirstInitial.ToString()); - } - files = Directory.GetFiles(personFirstInitialDirectory, "*", SearchOption.TopDirectoryOnly); + files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly); if (personKeyFormatted == nameof(IMapLogic.Sorting) && files.Any()) throw new Exception($"Move personKey directories up one from {nameof(IMapLogic.Sorting)} and delete {nameof(IMapLogic.Sorting)} directory!"); if (personKeyFormatted == manualCopyHumanized && files.Any()) @@ -142,8 +135,12 @@ internal abstract class MapLogic throw new Exception($"Move personKey directories up one from {forceSingleImageHumanized} and delete {forceSingleImageHumanized} directory!"); if (personKeyFormatted.Length != configuration.PersonBirthdayFormat.Length) continue; - if (personNameDirectory != personFirstInitialDirectory && !Directory.Exists(personFirstInitialDirectory)) + if (personDisplayDirectoryNames[^1].Length == 1 || personDisplayDirectoryNames[^1] == configuration.MappingDefaultName || !personKeyFormattedCollection.Contains(personKeyFormatted)) + personFirstInitialDirectory = personNameDirectory; + else { + personFirstInitial = personDisplayDirectoryNames[^1][..1]; + personFirstInitialDirectory = Path.Combine(yearDirectory, personFirstInitial.ToString()); Directory.Move(personNameDirectory, personFirstInitialDirectory); files = Directory.GetFiles(personFirstInitialDirectory, "*", SearchOption.TopDirectoryOnly); } diff --git a/Shared/Models/Stateless/Methods/PersonBirthday.cs b/Shared/Models/Stateless/Methods/PersonBirthday.cs index 3f7fc76..0b03049 100644 --- a/Shared/Models/Stateless/Methods/PersonBirthday.cs +++ b/Shared/Models/Stateless/Methods/PersonBirthday.cs @@ -122,7 +122,7 @@ internal abstract class PersonBirthday personBirthday = IPersonBirthday.GetPersonBirthday(personBirthdayFormat, personKeyFormatted); else (personBirthday, personKeyFormatted) = Person.Get(personBirthdayFormat, personDisplayDirectory, personKeyDirectory, birthday); - if (personBirthday is null) + if (personBirthday is null || personKeyFormatted.Contains('#')) continue; results.Add(personBirthday); files = Directory.GetFiles(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);