Removed CopyManualFiles

Updated Tests
This commit is contained in:
2023-08-07 22:02:08 -07:00
parent 9991d2bfac
commit 5582504c4b
15 changed files with 166 additions and 183 deletions

View File

@ -59,7 +59,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
Stateless.MapLogic.SetSkipCollections(configuration, personContainers, a2PeopleSingletonDirectory, skipCollection, skipNotSkipCollection);
List<Stateless.MapLogic.Record> records = Stateless.MapLogic.SetPersonCollectionsAndGetRecords(configuration, ticks, personContainers, eDistanceContentDirectory);
ReadOnlyCollection<(Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages, PersonContainer)> readOnlyPossiblyNewPersonDisplayDirectoryNamesAndPersonContainer;
locationContainers.AddRange(Stateless.MapLogic.GetLocationContainers(distance, maxDegreeOfParallelism, configuration, ticks, personContainers, eDistanceContentDirectory, skipCollection, records));
locationContainers.AddRange(Stateless.MapLogic.GetLocationContainers(distance, maxDegreeOfParallelism, configuration, ticks, personContainers, eDistanceContentDirectory, eDistanceContentTicksDirectory, skipCollection, records));
int lossCount = records.Count - locationContainers.Count;
ReadOnlyCollection<Stateless.MapLogic.PersonKeyFormattedIdThenWholePercentages> personKeyFormattedIdThenWholePercentagesCollection = Stateless.MapLogic.GetPersonKeyFormattedIdThenWholePercentages(configuration, ticks, records);
int unableToMatchCount = records.Count - personKeyFormattedIdThenWholePercentagesCollection.Count;
@ -720,104 +720,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
return result;
}
public void CopyManualFiles(string dFacesContentDirectory, ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> idToWholePercentagesToMapping)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
int? id;
string faceFile;
Mapping? mapping;
string checkFile;
string directory;
FileInfo fileInfo;
const int zero = 0;
string faceFileName;
string shortcutFile;
string facesDirectory;
int? wholePercentages;
string? directoryName;
string mappingSegmentB;
string personDirectory;
string personKeyFormatted;
string personDisplayFileName;
PersonBirthday personBirthday;
string? personDisplayDirectory;
WindowsShortcut windowsShortcut;
ReadOnlyDictionary<int, Mapping>? wholePercentagesToMapping;
string by = nameof(Shared.Models.Stateless.IMapLogic.ManualCopy);
ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPeronContainerCollection;
string successful = $"_ {nameof(Shared.Models.Stateless.IMapLogic.ManualCopy).Humanize(LetterCasing.Title)} Successful";
foreach (KeyValuePair<long, PersonContainer> personKeyToPersonContainer in _PersonKeyToPersonContainer)
{
if (personKeyToPersonContainer.Value.Key is null || personKeyToPersonContainer.Value.Birthdays is null || personKeyToPersonContainer.Value.Birthdays.Length == 0 || personKeyToPersonContainer.Value.PersonDirectory is null)
continue;
personBirthday = personKeyToPersonContainer.Value.Birthdays[zero];
foreach (string personDisplayDirectoryAllFile in personKeyToPersonContainer.Value.DisplayDirectoryAllFiles)
{
if (!personDisplayDirectoryAllFile.EndsWith(_Configuration.FacesFileNameExtension))
continue;
(id, wholePercentages) = IMapping.GetConverted(_Configuration.FacesFileNameExtension, personDisplayDirectoryAllFile);
if (id is null || wholePercentages is null)
continue;
fileInfo = new(personDisplayDirectoryAllFile);
if (!fileInfo.Exists)
continue;
personDisplayFileName = Path.GetFileName(personDisplayDirectoryAllFile);
personDisplayDirectory = Path.GetDirectoryName(personDisplayDirectoryAllFile);
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
mappingSegmentB = Stateless.MapLogic.GetMappingSegmentB(_Ticks, personBirthday, personKeyToPersonContainer.Value.ApproximateYears, fileInfo.CreationTime, isWrongYear: null);
directory = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, mappingSegmentB);
personDirectory = Path.Combine(directory, personKeyToPersonContainer.Value.DisplayDirectoryName, "lnk");
if (!idToWholePercentagesToMapping.TryGetValue(id.Value, out wholePercentagesToMapping))
continue;
if (!wholePercentagesToMapping.TryGetValue(wholePercentages.Value, out mapping))
continue;
if (mapping.MappingFromLocation is null)
continue;
if (string.IsNullOrEmpty(personDisplayDirectory))
throw new NotSupportedException();
directoryName = Path.GetDirectoryName(mapping.MappingFromItem.RelativePath);
if (string.IsNullOrEmpty(directoryName))
throw new NotSupportedException();
shortcutFile = Path.Combine(personDisplayDirectory, $"{personDisplayFileName}.lnk");
facesDirectory = Stateless.MapLogic.GetFacesDirectory(_PropertyConfiguration, dFacesContentDirectory, mapping.MappingFromItem);
faceFileName = $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}";
checkFile = Path.Combine(directory, fileInfo.Name);
if (!_IdThenWholePercentagesToPersonContainers.TryGetValue(id.Value, out wholePercentagesToPeronContainerCollection) || !wholePercentagesToPeronContainerCollection.ContainsKey(wholePercentages.Value))
{
if (!Directory.Exists(personDirectory))
_ = Directory.CreateDirectory(personDirectory);
if (!File.Exists(checkFile))
File.Copy(personDisplayDirectoryAllFile, checkFile);
}
if (personDisplayDirectoryAllFile.Contains(successful))
continue;
directoryName = Path.Combine(personDisplayDirectory, successful);
if (!Directory.Exists(directoryName))
_ = Directory.CreateDirectory(directoryName);
checkFile = Path.Combine(directoryName, personDisplayFileName);
if (File.Exists(checkFile))
File.Delete(personDisplayDirectoryAllFile);
else
File.Move(personDisplayDirectoryAllFile, checkFile);
faceFile = Path.Combine(facesDirectory, faceFileName);
if (!File.Exists(faceFile))
continue;
if (File.Exists(shortcutFile))
continue;
if (personKeyToPersonContainer.Value.PersonDirectory.Char == ']')
windowsShortcut = new() { Path = faceFile };
else
windowsShortcut = new() { Path = checkFile };
windowsShortcut.Save(shortcutFile);
windowsShortcut.Dispose();
if (!File.Exists(shortcutFile))
continue;
File.SetLastWriteTime(shortcutFile, mapping.MappingFromItem.GetDateTimeOriginalThenMinimumDateTime());
}
}
}
private (string, PersonBirthday?) GetPersonBirthday(string[] directoryNames)
{
if (_Configuration is null)

View File

@ -826,30 +826,57 @@ internal abstract class MapLogic
return results;
}
private static List<(long, int?, string)> GetDisplayDirectoryAllFiles(string fileNameExtension, ReadOnlyCollection<PersonContainer> personContainers)
private static List<(long, int?, string)> GetDisplayDirectoryAllFiles(string fileNameExtension, string personBirthdayFormat, long ticks, string eDistanceContentTicksDirectory, ReadOnlyCollection<PersonContainer> personContainers)
{
List<(long, int?, string)> results = new();
string fileName;
string checkFile;
string? directory;
string dateDirectory;
string directoryName;
string checkDirectory;
string personKeyFormatted;
PersonBirthday personBirthday;
List<string> distinct = new();
DateTime dateTime = new(ticks);
string by = nameof(Shared.Models.Stateless.IMapLogic.ManualCopy);
foreach (PersonContainer personContainer in personContainers)
{
if (personContainer.Key is null)
continue;
foreach (string displayDirectoryAllFile in personContainer.DisplayDirectoryAllFiles)
for (int i = personContainer.DisplayDirectoryAllFiles.Length - 1; i > -1; i--)
{
fileName = Path.GetFileName(displayDirectoryAllFile);
if (!fileName.EndsWith(fileNameExtension))
if (!personContainer.DisplayDirectoryAllFiles[i].EndsWith(fileNameExtension))
continue;
fileName = Path.GetFileName(personContainer.DisplayDirectoryAllFiles[i]);
if (distinct.Contains(fileName))
continue;
distinct.Add(fileName);
results.Add(new(personContainer.Key.Value, null, displayDirectoryAllFile));
results.Add(new(personContainer.Key.Value, null, personContainer.DisplayDirectoryAllFiles[i]));
directory = Path.GetDirectoryName(personContainer.DisplayDirectoryAllFiles[i]);
if (string.IsNullOrEmpty(directory))
continue;
directoryName = Path.GetFileName(directory);
if (directoryName != personContainer.DisplayDirectoryName)
continue;
personBirthday = IPersonBirthday.GetPersonBirthday(personContainer.Key.Value);
personKeyFormatted = IPersonBirthday.GetFormatted(personBirthdayFormat, personBirthday);
dateDirectory = Path.Combine(eDistanceContentTicksDirectory, by, personKeyFormatted, dateTime.ToString("yyyy"));
checkDirectory = Path.Combine(dateDirectory, personContainer.DisplayDirectoryName);
if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory);
checkFile = Path.Combine(dateDirectory, fileName);
if (File.Exists(checkFile))
continue;
File.Move(personContainer.DisplayDirectoryAllFiles[i], checkFile);
results.RemoveAt(results.Count - 1);
personContainer.DisplayDirectoryAllFiles[i] = string.Empty;
}
}
return results;
}
private static List<(long PersonKey, int? DirectoryNumber, string File)> GetCollection(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, List<Record> records)
private static List<(long PersonKey, int? DirectoryNumber, string File)> GetCollection(Configuration configuration, long ticks, string eDistanceContentTicksDirectory, ReadOnlyCollection<PersonContainer> personContainers, List<Record> records)
{
List<(long PersonKey, int? DirectoryNumber, string File)> results = new();
string file;
@ -857,7 +884,7 @@ internal abstract class MapLogic
string fileName;
List<string> distinct = new();
PersonBirthday? personBirthday;
results.AddRange(GetDisplayDirectoryAllFiles(configuration.FacesFileNameExtension, personContainers));
results.AddRange(GetDisplayDirectoryAllFiles(configuration.FacesFileNameExtension, configuration.PersonBirthdayFormat, ticks, eDistanceContentTicksDirectory, personContainers));
foreach (Record record in records)
{
personBirthday = IPersonBirthday.GetPersonBirthday(configuration.PersonBirthdayFormat, record.PersonKeyFormatted);
@ -907,6 +934,8 @@ internal abstract class MapLogic
fileMatches = (from l in wholePercentagesCollection where l.WholePercentages == wholePercentages select l.File).ToArray();
foreach (string fileMatch in fileMatches)
{
if (string.IsNullOrEmpty(fileMatch) || !File.Exists(fileMatch))
continue;
if (!fileMatch.EndsWith(".dup") && !File.Exists($"{fileMatch}.dup"))
File.Move(fileMatch, $"{fileMatch}.dup");
}
@ -992,10 +1021,10 @@ internal abstract class MapLogic
}
}
internal static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(Shared.Models.Methods.IDistance<MetadataExtractor.Directory> distance, int maxDegreeOfParallelism, Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, string eDistanceContentDirectory, Dictionary<int, List<(string, int)>> skipCollection, List<Record> records)
internal static List<LocationContainer<MetadataExtractor.Directory>> GetLocationContainers(Shared.Models.Methods.IDistance<MetadataExtractor.Directory> distance, int maxDegreeOfParallelism, Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, string eDistanceContentDirectory, string eDistanceContentTicksDirectory, Dictionary<int, List<(string, int)>> skipCollection, List<Record> records)
{
List<LocationContainer<MetadataExtractor.Directory>> results = new();
List<(long PersonKey, int? DirectoryNumber, string File)> collection = GetCollection(configuration, personContainers, records);
List<(long PersonKey, int? DirectoryNumber, string File)> collection = GetCollection(configuration, ticks, eDistanceContentTicksDirectory, personContainers, records);
if (collection.Count > 0 && (configuration.DistanceMoveUnableToMatch || configuration.DistanceRenameToMatch))
{
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);