Can-remap
This commit is contained in:
@ -115,7 +115,15 @@ internal abstract class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
internal static string GetMappingSegmentB(long ticks, PersonBirthday personBirthday, int? approximateYears, DateTime dateTimeOriginalThenMinimumDateTime, bool? isWrongYear)
|
||||
internal static string GetMappingSegmentB(long ticks, long personKey, int? approximateYears, MappingFromItem mappingFromItem)
|
||||
{
|
||||
string result;
|
||||
PersonBirthday personBirthday = IPersonBirthday.GetPersonBirthday(personKey);
|
||||
result = GetMappingSegmentB(ticks, personBirthday, approximateYears, mappingFromItem.GetDateTimeOriginalThenMinimumDateTime(), mappingFromItem.IsWrongYear);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string GetMappingSegmentB(long ticks, PersonBirthday personBirthday, int? approximateYears, DateTime dateTimeOriginalThenMinimumDateTime, bool? isWrongYear)
|
||||
{
|
||||
string result = GetMappingSegmentB(ticks, personBirthday, approximateYears, dateTimeOriginalThenMinimumDateTime.Ticks, isWrongYear);
|
||||
return result;
|
||||
@ -285,7 +293,7 @@ internal abstract class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
private static List<TicksDirectory> UpdateDateVerifyAndGetTicksDirectories(string eDistanceContentDirectory)
|
||||
private static List<TicksDirectory> UpdateDateVerifyAndGetTicksDirectories(Configuration configuration, string eDistanceContentDirectory)
|
||||
{
|
||||
List<TicksDirectory> results = new();
|
||||
float? totalDays;
|
||||
@ -333,7 +341,7 @@ internal abstract class MapLogic
|
||||
lastDirectoryTicks = directoryTicks;
|
||||
}
|
||||
string[] compare = (from l in results where l.TotalDays is not null and < 9.95f select l.Directory).ToArray();
|
||||
if (compare.Length > 0)
|
||||
if (compare.Length > 0 && configuration.ReMap)
|
||||
throw new Exception($"Please Consolidate <{string.Join(Environment.NewLine, compare)}>");
|
||||
return results;
|
||||
}
|
||||
@ -701,7 +709,7 @@ internal abstract class MapLogic
|
||||
OpenPossibleDuplicates(configuration, duplicates);
|
||||
else
|
||||
{
|
||||
if (delete.Count > 5)
|
||||
if (delete.Count > 8)
|
||||
throw new Exception("Something maybe wrong!");
|
||||
foreach (string file in delete)
|
||||
{
|
||||
@ -900,7 +908,7 @@ internal abstract class MapLogic
|
||||
results.Clear();
|
||||
distinct.Clear();
|
||||
directoryNumber = 0;
|
||||
ticksDirectories = UpdateDateVerifyAndGetTicksDirectories(eDistanceContentDirectory);
|
||||
ticksDirectories = UpdateDateVerifyAndGetTicksDirectories(configuration, eDistanceContentDirectory);
|
||||
totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
||||
message = $"{i}) {ticksDirectories.Count:000} compile from and clean ticks Director(ies) - B - {totalSeconds} total second(s)";
|
||||
progressBar = new(ticksDirectories.Count, message, options);
|
||||
@ -1351,46 +1359,44 @@ internal abstract class MapLogic
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static SaveContainer GetDebugSaveContainer(string directory, MappingFromPerson? mappingFromPerson, SortingContainer sortingContainer, Mapping mapping)
|
||||
internal static SaveContainer GetDebugSaveContainer(SortingContainer sortingContainer, string directory, Mapping keyMapping)
|
||||
{
|
||||
SaveContainer result;
|
||||
if (sortingContainer.Mapping.MappingFromLocation is null)
|
||||
throw new NullReferenceException(nameof(sortingContainer.Mapping.MappingFromLocation));
|
||||
FileHolder faceFileHolder = new($"C:/{sortingContainer.Sorting.Id}.{sortingContainer.Sorting.WholePercentages}");
|
||||
string shortcutFile;
|
||||
if (mappingFromPerson is null)
|
||||
shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.{sortingContainer.Sorting.DistancePermyriad}.lnk");
|
||||
if (sortingContainer?.Source.MappingFromLocation is null)
|
||||
throw new NullReferenceException(nameof(sortingContainer.Source.MappingFromLocation));
|
||||
FileHolder faceFileHolder = new($"C:/{sortingContainer.Sorting.Id}.{sortingContainer.Sorting.WholePercentages}");
|
||||
if (keyMapping.MappingFromPerson is not null && keyMapping.MappingFromLocation is not null)
|
||||
shortcutFile = Path.Combine(directory, $"{keyMapping.MappingFromLocation.DeterministicHashCodeKey}{keyMapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.{sortingContainer.Sorting.DistancePermyriad}.lnk");
|
||||
else
|
||||
shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.{sortingContainer.Sorting.DistancePermyriad}.lnk");
|
||||
result = new(directory, faceFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
|
||||
shortcutFile = Path.Combine(directory, $"{sortingContainer.Source.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Source.MappingFromItem.ImageFileHolder.ExtensionLowered}.{sortingContainer.Sorting.DistancePermyriad}.lnk");
|
||||
result = new(directory, faceFileHolder, sortingContainer.Source.MappingFromItem.ResizedFileHolder, shortcutFile);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static (SaveContainer?, SaveContainer?) GetContainers(string facesFileNameExtension, string facePartsFileNameExtension, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string dFacesContentDirectory, string d2FacePartsContentCollectionDirectory, string directory, SortingContainer sortingContainer, Mapping mapping)
|
||||
internal static (SaveContainer?, SaveContainer?) GetContainers(string facesFileNameExtension, string facePartsFileNameExtension, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string dFacesContentDirectory, string d2FacePartsContentCollectionDirectory, string directory, Mapping keyMapping)
|
||||
{
|
||||
SaveContainer? result;
|
||||
SaveContainer? saveContainer;
|
||||
if (sortingContainer.Mapping.MappingFromLocation is null)
|
||||
throw new NullReferenceException(nameof(sortingContainer.Mapping.MappingFromLocation));
|
||||
if (mapping.MappingFromLocation is null)
|
||||
if (keyMapping.MappingFromLocation is null)
|
||||
(result, saveContainer) = (null, null);
|
||||
else
|
||||
{
|
||||
string? facePartsContentCollectionFile = GetFacePartsContentCollectionFile(facePartsFileNameExtension, d2FacePartsContentCollectionDirectory, mapping.MappingFromItem);
|
||||
string? facePartsContentCollectionFile = GetFacePartsContentCollectionFile(facePartsFileNameExtension, d2FacePartsContentCollectionDirectory, keyMapping.MappingFromItem);
|
||||
if (facePartsContentCollectionFile is null || !File.Exists(facePartsContentCollectionFile))
|
||||
result = null;
|
||||
else
|
||||
{
|
||||
string checkFile = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}{facePartsFileNameExtension}");
|
||||
string checkFile = Path.Combine(directory, $"{keyMapping.MappingFromItem.ImageFileHolder.Name}{facePartsFileNameExtension}");
|
||||
result = new(checkFile, directory, new(facePartsContentCollectionFile));
|
||||
}
|
||||
string facesDirectory = GetFacesDirectory(propertyConfiguration, dFacesContentDirectory, mapping.MappingFromItem);
|
||||
FileHolder faceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}"));
|
||||
string facesDirectory = GetFacesDirectory(propertyConfiguration, dFacesContentDirectory, keyMapping.MappingFromItem);
|
||||
FileHolder faceFileHolder = new(Path.Combine(facesDirectory, $"{keyMapping.MappingFromLocation.DeterministicHashCodeKey}{keyMapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}"));
|
||||
if (!faceFileHolder.Exists)
|
||||
saveContainer = null;
|
||||
else
|
||||
{
|
||||
string checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}");
|
||||
string checkFile = Path.Combine(directory, $"{keyMapping.MappingFromLocation.DeterministicHashCodeKey}{keyMapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}");
|
||||
saveContainer = new(checkFile, directory, faceFileHolder);
|
||||
}
|
||||
}
|
||||
@ -1578,19 +1584,20 @@ internal abstract class MapLogic
|
||||
{
|
||||
isByMapping = mapping.By == Shared.Models.Stateless.IMapLogic.Mapping;
|
||||
isBySorting = mapping.By == Shared.Models.Stateless.IMapLogic.Sorting;
|
||||
bool isDefaultName = mapping.MappingFromPerson is not null && IPerson.IsDefaultName(mapping.MappingFromPerson.DisplayDirectoryName);
|
||||
if (isBySorting && mapping.MappingFromPerson is null)
|
||||
by = saveIndividually ? nameof(Shared.Models.Stateless.IMapLogic.Individually) : $"{nameof(Shared.Models.Stateless.IMapLogic.Sorting)} Without Person";
|
||||
else if (isBySorting && useFiltersCounter.HasValue)
|
||||
by = $"{nameof(Shared.Models.Stateless.IMapLogic.Sorting)} Modified Filters - {useFiltersCounter.Value}";
|
||||
by = $"{nameof(Shared.Models.Stateless.IMapLogic.Sorting)}{(!isDefaultName ? "-A" : "-Z")} Modified Filters - {useFiltersCounter.Value}";
|
||||
else
|
||||
{
|
||||
by = mapping.By.Value switch
|
||||
by = $"{mapping.By.Value switch
|
||||
{
|
||||
Shared.Models.Stateless.IMapLogic.Mapping => nameof(Shared.Models.Stateless.IMapLogic.Mapping),
|
||||
Shared.Models.Stateless.IMapLogic.Sorting => saveIndividually ? nameof(Shared.Models.Stateless.IMapLogic.Individually) : nameof(Shared.Models.Stateless.IMapLogic.Sorting),
|
||||
Shared.Models.Stateless.IMapLogic.ForceSingleImage => forceSingleImageHumanized,
|
||||
_ => throw new NotImplementedException()
|
||||
};
|
||||
}}{(!isDefaultName ? "-A" : "-Z")}";
|
||||
}
|
||||
}
|
||||
return new(by, isByMapping, isBySorting);
|
||||
@ -1675,24 +1682,26 @@ internal abstract class MapLogic
|
||||
return new(results);
|
||||
}
|
||||
|
||||
internal static void SetCreationTime(MappingFromItem mappingFromItem, MappingFromPerson mappingFromPerson)
|
||||
internal static string GetDecade(MappingFromItem mappingFromItem)
|
||||
{
|
||||
DateTime dateTime;
|
||||
FileInfo fileInfo;
|
||||
foreach (string locationContainersFile in mappingFromPerson.LocationContainersFiles)
|
||||
string result;
|
||||
string year;
|
||||
if (mappingFromItem.DateTimeOriginal is null)
|
||||
{
|
||||
fileInfo = new(locationContainersFile);
|
||||
if (!fileInfo.Exists)
|
||||
continue;
|
||||
dateTime = mappingFromItem.DateTimeOriginal is null ? mappingFromItem.MinimumDateTime : mappingFromItem.DateTimeOriginal.Value;
|
||||
if (fileInfo.CreationTime != dateTime)
|
||||
File.SetCreationTime(locationContainersFile, dateTime);
|
||||
year = mappingFromItem.MinimumDateTime.Year.ToString();
|
||||
result = year[3] > '4' ? $"#{year[..3]}+" : $"#{year[..3]}-";
|
||||
}
|
||||
else
|
||||
{
|
||||
year = mappingFromItem.DateTimeOriginal.Value.Year.ToString();
|
||||
result = year[3] > '4' ? $"^{year[..3]}+" : $"^{year[..3]}-";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static void MoveToDecade(Property.Models.Configuration propertyConfiguration, MappingFromItem mappingFromItem, MappingFromPerson mappingFromPerson)
|
||||
internal static void SetCreationTimeMaybeMoveToDecade(Property.Models.Configuration propertyConfiguration, bool moveToDecade, MappingFromItem mappingFromItem, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers)
|
||||
{
|
||||
string year;
|
||||
DateTime dateTime;
|
||||
FileInfo fileInfo;
|
||||
string halfDecade;
|
||||
string checkDirectory;
|
||||
@ -1702,12 +1711,17 @@ internal abstract class MapLogic
|
||||
string personNameDirectoryName;
|
||||
string? personKeyFormattedDirectory;
|
||||
string? personKeyFormattedDirectoryName;
|
||||
foreach (string locationContainersFile in mappingFromPerson.LocationContainersFiles)
|
||||
foreach (LocationContainer<MetadataExtractor.Directory> locationContainer in locationContainers)
|
||||
{
|
||||
fileInfo = new(locationContainersFile);
|
||||
fileInfo = new(locationContainer.File);
|
||||
if (!fileInfo.Exists)
|
||||
continue;
|
||||
personNameDirectory = Path.GetDirectoryName(locationContainersFile);
|
||||
dateTime = mappingFromItem.DateTimeOriginal is null ? mappingFromItem.MinimumDateTime : mappingFromItem.DateTimeOriginal.Value;
|
||||
if (fileInfo.CreationTime != dateTime)
|
||||
File.SetCreationTime(locationContainer.File, dateTime);
|
||||
if (!moveToDecade)
|
||||
continue;
|
||||
personNameDirectory = Path.GetDirectoryName(locationContainer.File);
|
||||
if (string.IsNullOrEmpty(personNameDirectory))
|
||||
continue;
|
||||
personNameDirectoryName = Path.GetFileName(personNameDirectory);
|
||||
@ -1721,22 +1735,13 @@ internal abstract class MapLogic
|
||||
personKeyFormattedDirectoryName = Path.GetFileName(personKeyFormattedDirectory);
|
||||
if (personKeyFormattedDirectoryName.Length != propertyConfiguration.PersonBirthdayFormat.Length)
|
||||
break;
|
||||
if (mappingFromItem.DateTimeOriginal is null)
|
||||
{
|
||||
year = mappingFromItem.MinimumDateTime.Year.ToString();
|
||||
halfDecade = year[3] > '4' ? $"#{year[..3]}+" : $"#{year[..3]}-";
|
||||
}
|
||||
else
|
||||
{
|
||||
year = mappingFromItem.DateTimeOriginal.Value.Year.ToString();
|
||||
halfDecade = year[3] > '4' ? $"^{year[..3]}+" : $"^{year[..3]}-";
|
||||
}
|
||||
halfDecade = GetDecade(mappingFromItem);
|
||||
if (halfDecade == yearDirectoryName)
|
||||
continue;
|
||||
checkDirectory = Path.Combine(personKeyFormattedDirectory, halfDecade, personNameDirectoryName);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
File.Move(locationContainersFile, Path.Combine(checkDirectory, Path.GetFileName(locationContainersFile)));
|
||||
File.Move(locationContainer.File, Path.Combine(checkDirectory, Path.GetFileName(locationContainer.File)));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1815,7 +1820,16 @@ internal abstract class MapLogic
|
||||
if (!wholePercentagesToPersonContainers.TryGetValue(mappingFromLocation.WholePercentages, out personContainers))
|
||||
result = null;
|
||||
else
|
||||
result = personContainers.Any(l => IPerson.IsDefaultName(l) && l.Key is not null && IPersonBirthday.IsCounterPersonYear(new DateTime(l.Key.Value).Year) && !jLinkResolvedPersonKeys.Contains(l.Key.Value));
|
||||
{
|
||||
result = false;
|
||||
foreach (PersonContainer personContainer in personContainers)
|
||||
{
|
||||
if (!IPerson.IsDefaultName(personContainer) || personContainer.Key is null || !IPersonBirthday.IsCounterPersonYear(new DateTime(personContainer.Key.Value).Year) || jLinkResolvedPersonKeys.Contains(personContainer.Key.Value))
|
||||
continue;
|
||||
result = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
Reference in New Issue
Block a user