Rebuilt and moved CopyManualFiles closer

This commit is contained in:
2023-08-07 22:50:03 -07:00
parent 5582504c4b
commit 8b4d5248cb
4 changed files with 78 additions and 43 deletions

View File

@ -80,7 +80,7 @@ internal abstract class MapLogic
}
}
private static void SetPersonCollections(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, List<string> personKeyFormattedCollection)
internal static void SetPersonCollections(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, List<string> personKeyFormattedCollection)
{
string personKeyFormatted;
string newestPersonKeyFormatted;
@ -246,7 +246,7 @@ internal abstract class MapLogic
}
}
private static List<Record> DeleteEmptyDirectoriesAndGetCollection(Configuration configuration, long ticks, string eDistanceContentDirectory, ReadOnlyDictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, ReadOnlyCollection<string> personKeyFormattedCollection)
internal static List<Record> DeleteEmptyDirectoriesAndGetCollection(Configuration configuration, long ticks, string eDistanceContentDirectory, ReadOnlyDictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, ReadOnlyCollection<string> personKeyFormattedCollection)
{
List<Record> results = new();
int? id;
@ -826,20 +826,11 @@ internal abstract class MapLogic
return results;
}
private static List<(long, int?, string)> GetDisplayDirectoryAllFiles(string fileNameExtension, string personBirthdayFormat, long ticks, string eDistanceContentTicksDirectory, ReadOnlyCollection<PersonContainer> personContainers)
private static List<(long, int?, string)> GetDisplayDirectoryAllFiles(string fileNameExtension, 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)
@ -853,30 +844,12 @@ internal abstract class MapLogic
continue;
distinct.Add(fileName);
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, long ticks, string eDistanceContentTicksDirectory, ReadOnlyCollection<PersonContainer> personContainers, List<Record> records)
private static List<(long PersonKey, int? DirectoryNumber, string File)> GetCollection(Configuration configuration, ReadOnlyCollection<PersonContainer> personContainers, List<Record> records)
{
List<(long PersonKey, int? DirectoryNumber, string File)> results = new();
string file;
@ -884,7 +857,7 @@ internal abstract class MapLogic
string fileName;
List<string> distinct = new();
PersonBirthday? personBirthday;
results.AddRange(GetDisplayDirectoryAllFiles(configuration.FacesFileNameExtension, configuration.PersonBirthdayFormat, ticks, eDistanceContentTicksDirectory, personContainers));
results.AddRange(GetDisplayDirectoryAllFiles(configuration.FacesFileNameExtension, personContainers));
foreach (Record record in records)
{
personBirthday = IPersonBirthday.GetPersonBirthday(configuration.PersonBirthdayFormat, record.PersonKeyFormatted);
@ -1021,10 +994,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, string eDistanceContentTicksDirectory, 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, 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, ticks, eDistanceContentTicksDirectory, personContainers, records);
List<(long PersonKey, int? DirectoryNumber, string File)> collection = GetCollection(configuration, personContainers, records);
if (collection.Count > 0 && (configuration.DistanceMoveUnableToMatch || configuration.DistanceRenameToMatch))
{
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
@ -1045,14 +1018,53 @@ internal abstract class MapLogic
return results;
}
internal static List<Record> SetPersonCollectionsAndGetRecords(Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, string eDistanceContentDirectory)
internal static int CopyManualFiles(Configuration configuration, long ticks, ReadOnlyCollection<PersonContainer> personContainers, string eDistanceContentTicksDirectory)
{
List<Record> results;
List<string> personKeyFormattedCollection = new();
Dictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted = new();
SetPersonCollections(configuration, personContainers, personKeyFormattedToNewestPersonKeyFormatted, personKeyFormattedCollection);
results = DeleteEmptyDirectoriesAndGetCollection(configuration, ticks, eDistanceContentDirectory, new(personKeyFormattedToNewestPersonKeyFormatted), new(personKeyFormattedCollection));
return results;
int result = 0;
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;
for (int i = personContainer.DisplayDirectoryAllFiles.Length - 1; i > -1; i--)
{
if (!personContainer.DisplayDirectoryAllFiles[i].EndsWith(configuration.FacesFileNameExtension))
continue;
fileName = Path.GetFileName(personContainer.DisplayDirectoryAllFiles[i]);
if (distinct.Contains(fileName))
continue;
distinct.Add(fileName);
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(configuration.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);
personContainer.DisplayDirectoryAllFiles[i] = string.Empty;
result++;
}
}
return result;
}
private static string GetMappingSegmentB(long ticks, PersonBirthday personBirthday, int? approximateYears, long dateTimeOriginalThenMinimumDateTimeTicks, bool? isWrongYear)