IsDefault

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

View File

@ -57,6 +57,8 @@ public partial class DlibDotNet
_IsEnvironment = isEnvironment;
long ticks = DateTime.Now.Ticks;
_Exceptions = new List<string>();
if (ticks.ToString().Last() == '0')
ticks += 1;
_Log = Serilog.Log.ForContext<DlibDotNet>();
ReadOnlyCollection<PersonContainer> personContainers;
Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);

View File

@ -383,14 +383,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
string facesDirectory;
string? directoryName;
string personDirectory;
string facePartsDirectory;
FileHolder faceFileHolder;
string facePartsDirectory;
string personKeyFormatted;
List<int> distinct = new();
SaveContainer? saveContainer;
FileHolder facePartsFileHolder;
FileHolder hiddenFaceFileHolder;
string? facePartsContentCollectionFile;
Dictionary<int, Mapping>? wholePercentagesToMapping;
int padLeft = _Configuration.FaceDistancePermyriad.ToString().Length;
string forceSingleImageHumanized = nameof(Shared.Models.Stateless.IMapLogic.ForceSingleImage).Humanize(LetterCasing.Title);
@ -491,10 +490,11 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
{
if (saveIndividually)
{
facePartsContentCollectionFile = Stateless.MapLogic.GetFacePartsContentCollectionFile(_Configuration.FacePartsFileNameExtension, d2FacePartsContentCollectionDirectory, mapping.MappingFromItem);
if (facePartsContentCollectionFile is null)
facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(_PropertyConfiguration, d2FacePartsContentDirectory, mapping.MappingFromItem);
facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacePartsFileNameExtension}"));
(saveContainer, SaveContainer? extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, directory, faceFileHolder, facePartsFileHolder, mapping);
if (extraSaveContainer is null)
continue;
(saveContainer, SaveContainer extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, directory, faceFileHolder, facePartsContentCollectionFile, mapping);
results.Add(extraSaveContainer);
}
else

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)

View File

@ -4,6 +4,7 @@ using Serilog;
using ShellProgressBar;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.Reflection;
using System.Text;
using View_by_Distance.Offset.Date.Time.Original.Models;
@ -198,8 +199,8 @@ public class OffsetDateTimeOriginal
bool targetIsValidImageFormatExtension = _PropertyConfiguration.ValidImageFormatExtensions.Contains(targetFileHolder.ExtensionLowered);
badIsIgnoreExtension = badIsValidImageFormatExtension && _PropertyConfiguration.IgnoreExtensions.Contains(badFileHolder.ExtensionLowered);
targetIsIgnoreExtension = targetIsValidImageFormatExtension && _PropertyConfiguration.IgnoreExtensions.Contains(targetFileHolder.ExtensionLowered);
DateTime minimumDateTime = DateTime.ParseExact(Path.GetFileName(minimumDirectory.First()), format, null, System.Globalization.DateTimeStyles.None);
DateTime maximumDateTime = DateTime.ParseExact(Path.GetFileName(maximumDirectory.First()), format, null, System.Globalization.DateTimeStyles.None).AddHours(23);
DateTime minimumDateTime = DateTime.ParseExact(Path.GetFileName(minimumDirectory.First()), format, CultureInfo.InvariantCulture, DateTimeStyles.None);
DateTime maximumDateTime = DateTime.ParseExact(Path.GetFileName(maximumDirectory.First()), format, CultureInfo.InvariantCulture, DateTimeStyles.None).AddHours(23);
(badDateTimeOriginal, badDateTimes, badId, badMessage) = Property.Models.Stateless.IProperty.Get(_PropertyConfiguration.PopulatePropertyId, badFileHolder, badIsIgnoreExtension, badIsValidImageFormatExtension, asciiEncoding);
if (badMessage is not null)
throw new Exception(badMessage);

View File

@ -13,6 +13,18 @@ public interface IPersonBirthday
// ...
static bool IsCounterPersonBirthday(Models.PersonBirthday personBirthday) =>
personBirthday.Value.Year < 1809;
static bool IsCounterPersonYear(int year) =>
year < 1809;
static bool IsCounterPersonYear(string year) =>
new string[] { year, "1809" }.Min() == year;
static bool IsWrongYearFilterOrCounterPersonBirthday(bool? isWrongYear, Models.PersonBirthday personBirthday) =>
isWrongYear is null || isWrongYear.Value || IsCounterPersonBirthday(personBirthday);
string TestStatic_GetDateTime(string personKeyFormatted) =>
GetDateTime(personKeyFormatted);
static string GetDateTime(string personKeyFormatted) =>
@ -68,11 +80,6 @@ public interface IPersonBirthday
static string GetFormatted(string personBirthdayFormat, long personKey) =>
GetFormatted(personBirthdayFormat, GetPersonBirthday(personKey));
bool TestStatic_IsCounterPersonBirthday(Models.PersonBirthday personBirthday) =>
IsCounterPersonBirthday(personBirthday);
static bool IsCounterPersonBirthday(Models.PersonBirthday personBirthday) =>
PersonBirthday.IsCounterPersonBirthday(personBirthday);
Models.PersonBirthday TestStatic_GetNextBirthDate(Properties.IStorage storage) =>
GetNextBirthDate(storage);
static Models.PersonBirthday GetNextBirthDate(Properties.IStorage storage) =>
@ -103,11 +110,6 @@ public interface IPersonBirthday
static TimeSpan? GetTimeSpan(DateTime minimumDateTime, bool? isWrongYear, Models.PersonBirthday personBirthday) =>
PersonBirthday.GetTimeSpan(minimumDateTime, isWrongYear, personBirthday);
bool TestStatic_IsWrongYearFilterOrCounterPersonBirthday(bool? isWrongYear, Models.PersonBirthday personBirthday) =>
IsWrongYearFilterOrCounterPersonBirthday(isWrongYear, personBirthday);
static bool IsWrongYearFilterOrCounterPersonBirthday(bool? isWrongYear, Models.PersonBirthday personBirthday) =>
PersonBirthday.IsWrongYearFilterOrCounterPersonBirthday(isWrongYear, personBirthday);
string TestStatic_GetFileFullName(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday personBirthday) =>
GetFileFullName(storage, personBirthdayFormat, personBirthday);
static string GetFileFullName(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday personBirthday) =>

View File

@ -24,30 +24,10 @@ internal abstract class PersonBirthday
return result;
}
internal static bool IsCounterPersonBirthday(Models.PersonBirthday personBirthday)
{
bool result;
if (personBirthday.Value.Year < 1809)
result = true;
else
result = false;
return result;
}
internal static bool IsWrongYearFilterOrCounterPersonBirthday(bool? isWrongYear, Models.PersonBirthday personBirthday)
{
bool result;
if (isWrongYear is null || isWrongYear.Value || IsCounterPersonBirthday(personBirthday))
result = true;
else
result = false;
return result;
}
internal static TimeSpan? GetTimeSpan(long minimumDateTimeTicks, bool? isWrongYear, Models.PersonBirthday personBirthday)
{
TimeSpan? timeSpan;
bool isWrongYearFilterOrCounterPersonBirthday = IsWrongYearFilterOrCounterPersonBirthday(isWrongYear, personBirthday);
bool isWrongYearFilterOrCounterPersonBirthday = IPersonBirthday.IsWrongYearFilterOrCounterPersonBirthday(isWrongYear, personBirthday);
if (isWrongYearFilterOrCounterPersonBirthday)
timeSpan = null;
else