IsDefault

extraSaveContainer
This commit is contained in:
2023-07-31 09:47:56 -07:00
parent 5b9e32bce6
commit c06435abf9
6 changed files with 52 additions and 56 deletions

View File

@ -3,6 +3,7 @@ using ShellProgressBar;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using View_by_Distance.Shared.Models;
using View_by_Distance.Shared.Models.Stateless.Methods;
using WindowsShortcutFactory;
@ -14,10 +15,12 @@ internal abstract class MapLogic
private record Record(string PersonKeyFormatted,
string[] PersonDisplayDirectoryNames,
bool IsDefault,
string MappedFaceFile);
private record PersonKeyFormattedIdThenWholePercentages(string PersonKeyFormatted,
string[] PersonDisplayDirectoryNames,
bool IsDefault,
string MappedFaceFile,
int Id,
int WholePercentages);
@ -90,6 +93,7 @@ internal abstract class MapLogic
private static void Individually(Configuration configuration, string ticksDirectory, string directory)
{
bool isDefault;
string[] files;
FileInfo[] collection;
string[] facesFileNames;
@ -133,7 +137,8 @@ internal abstract class MapLogic
if (files.Length != 4)
continue;
collection = files.Select(l => new FileInfo(l)).ToArray();
if (IPerson.IsDefaultName(configuration.MappingDefaultName, alphaDirectoryName))
isDefault = alphaDirectoryName.First() == 'Z' && IPersonBirthday.IsCounterPersonYear(personKeyFormatted[..4]);
if (isDefault)
facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension select l.FullName).ToArray();
else
facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension && l.Name.Contains(matchDirectoryName) select l.FullName).ToArray();
@ -215,12 +220,14 @@ internal abstract class MapLogic
List<Record> results = new();
int? id;
long ticks;
bool isDefault;
string[] files;
string fileName;
bool isNotDefault;
DateTime dateTime;
TimeSpan timeSpan;
bool check = false;
int? wholePercentages;
string checkDirectory;
string[] yearDirectories;
string personKeyFormatted;
string ticksDirectoryName;
@ -274,9 +281,12 @@ internal abstract class MapLogic
personDisplayDirectoryNames = IPath.GetDirectoryNames(personNameDirectory);
if (!personDisplayDirectoryNames.Any())
continue;
if (personDisplayDirectoryNames[^1] == "Z" && personKeyFormatted.StartsWith("140"))
isDefault = personDisplayDirectoryNames[^1].First() == 'Z' && IPersonBirthday.IsCounterPersonYear(personKeyFormatted[..4]);
if (isDefault && personDisplayDirectoryNames[^1].Length == 1)
{
string checkDirectory = Path.Combine(yearDirectory, $"Z]{DateTime.Now.Ticks}");
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}");
if (Directory.Exists(checkDirectory))
{
files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
@ -284,6 +294,8 @@ internal abstract class MapLogic
continue;
}
Directory.Move(personNameDirectory, checkDirectory);
if (!check)
check = true;
continue;
}
files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
@ -293,8 +305,7 @@ internal abstract class MapLogic
throw new Exception($"Move personKey directories up one from {manualCopyHumanized} and delete {manualCopyHumanized} directory!");
if (personKeyFormatted == forceSingleImageHumanized && files.Any())
throw new Exception($"Move personKey directories up one from {forceSingleImageHumanized} and delete {forceSingleImageHumanized} directory!");
isNotDefault = personDisplayDirectoryNames[^1].First() != 'Z' || !personKeyFormatted.StartsWith("140");
if (isNotDefault)
if (!isDefault)
{
if (personKeyFormattedToNewestPersonKeyFormatted.Count > 0 && newestPersonKeyFormatted is null)
RenameUnknown(files);
@ -308,7 +319,7 @@ internal abstract class MapLogic
}
if (personKeyFormatted.Length != configuration.PersonBirthdayFormat.Length)
continue;
if (personDisplayDirectoryNames[^1].Length == 1 || !isNotDefault || !personKeyFormattedCollection.Contains(personKeyFormatted))
if (personDisplayDirectoryNames[^1].Length == 1 || isDefault || !personKeyFormattedCollection.Contains(personKeyFormatted))
personFirstInitialDirectory = personNameDirectory;
else
{
@ -344,7 +355,7 @@ internal abstract class MapLogic
continue;
}
distinct.Add(fileName);
results.Add(new(personKeyFormatted, personDisplayDirectoryNames, mappedFaceFile));
results.Add(new(personKeyFormatted, personDisplayDirectoryNames, isDefault, mappedFaceFile));
}
personNameLinkDirectories = Directory.GetDirectories(personFirstInitialDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string personNameLinkDirectory in personNameLinkDirectories)
@ -479,10 +490,10 @@ internal abstract class MapLogic
string message = $") {collection.Count:000} join from ticks Director(ies) - C - {totalSeconds} total second(s)";
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
using ProgressBar progressBar = new(collection.Count, message, options);
foreach ((string personKeyFormatted, string[] personDisplayDirectoryNames, string mappedFaceFile) in collection)
foreach (Record record in collection)
{
progressBar.Tick();
(id, wholePercentages) = IMapping.GetConverted(configuration.FacesFileNameExtension, mappedFaceFile);
(id, wholePercentages) = IMapping.GetConverted(configuration.FacesFileNameExtension, record.MappedFaceFile);
if (id is null || wholePercentages is null)
{
result++;
@ -493,10 +504,10 @@ internal abstract class MapLogic
wholePercentagesCollection = idToWholePercentagesCollection[id.Value];
wholePercentagesCollection.Add(wholePercentages.Value);
idToWholePercentagesCollection[id.Value].Add(wholePercentages.Value);
personDisplayDirectoryName = personDisplayDirectoryNames[^1];
personDisplayDirectoryName = record.PersonDisplayDirectoryNames[^1];
if (string.IsNullOrEmpty(personDisplayDirectoryName))
continue;
personKeyFormattedIdThenWholePercentagesCollection.Add(new(personKeyFormatted, personDisplayDirectoryNames, mappedFaceFile, id.Value, wholePercentages.Value));
personKeyFormattedIdThenWholePercentagesCollection.Add(new(record.PersonKeyFormatted, record.PersonDisplayDirectoryNames, record.IsDefault, record.MappedFaceFile, id.Value, wholePercentages.Value));
}
return result;
}
@ -536,7 +547,7 @@ internal abstract class MapLogic
person = IPerson.GetPerson(configuration.MappingDefaultName, configuration.PersonCharacters.ToArray(), configuration.MappingDefaultName, personKey, personBirthday);
personContainer = new(approximateYears, new PersonBirthday[] { personBirthday }, personDisplayDirectoryAllFiles, configuration.MappingDefaultName, personKey, person);
results.Add(personContainer);
if (results.Count > 999)
if (results.Count > 99)
break;
}
return results;
@ -773,7 +784,7 @@ internal abstract class MapLogic
(id, wholePercentages) = IMapping.GetConverted(configuration.FacesFileNameExtension, file[..^4]);
if (id is null || wholePercentages is null)
return;
if (file.EndsWith(lnk) || (!configuration.DistanceMoveUnableToMatch && !configuration.DistanceRenameToMatch))
if (file.EndsWith(lnk) || (!configuration.DistanceMoveUnableToMatch && !configuration.DistanceRenameToMatch) || !File.Exists(file))
directories = new List<MetadataExtractor.Directory>();
else
directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(file);
@ -1023,16 +1034,16 @@ internal abstract class MapLogic
return (result, saveContainer);
}
internal static (SaveContainer, SaveContainer) GetContainers(string facesFileNameExtension, string facePartsFileNameExtension, string directory, FileHolder faceFileHolder, string facePartsContentCollectionFile, Mapping mapping)
internal static (SaveContainer, SaveContainer?) GetContainers(string facesFileNameExtension, string facePartsFileNameExtension, string directory, FileHolder faceFileHolder, FileHolder facePartsFileHolder, Mapping mapping)
{
string checkFile;
SaveContainer result;
SaveContainer? saveContainer;
if (mapping.MappingFromLocation is null)
throw new NullReferenceException(nameof(mapping.MappingFromLocation));
checkFile = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}{facePartsFileNameExtension}");
result = new(checkFile, directory, new(facePartsContentCollectionFile));
saveContainer = !facePartsFileHolder.Exists ? null : new(checkFile, directory, facePartsFileHolder);
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}");
return (result, new(checkFile, directory, faceFileHolder));
return (new(checkFile, directory, faceFileHolder), saveContainer);
}
private static IEnumerable<(string, string)> GetCollection(string[] yearDirectories)