IsDefault
extraSaveContainer
This commit is contained in:
parent
5b9e32bce6
commit
c06435abf9
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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) =>
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user