LocationContainerDebugDirectory
This commit is contained in:
parent
8d759ccefd
commit
331d98793e
@ -503,12 +503,14 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(Path.Combine(vsCodeDirectory, "tasks.json"), json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null);
|
||||
}
|
||||
|
||||
private static void MoveFiles(Dictionary<string, int> keyValuePairs, List<string> linkedOnce, List<string> linkedTwice, List<string> linkedThrice)
|
||||
private static void MoveFiles(string locationContainerDebugDirectory, bool isCounterPersonYear, string? displayDirectoryName, Dictionary<string, int> keyValuePairs, List<string> linkedOnce, List<string> linkedTwice, List<string> linkedThrice, List<string> linkedFour, List<string> linkedFive)
|
||||
{
|
||||
string checkFile;
|
||||
string debugFile;
|
||||
string checkDirectory;
|
||||
string? yearDirectory;
|
||||
string? personNameDirectory;
|
||||
string? maybeTicksDirectoryName;
|
||||
string? personNameDirectoryName;
|
||||
string? personKeyFormattedDirectory;
|
||||
foreach (string file in linkedOnce)
|
||||
@ -517,28 +519,60 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
keyValuePairs[file] += 1;
|
||||
foreach (string file in linkedThrice)
|
||||
keyValuePairs[file] += 1;
|
||||
foreach (string file in linkedFour)
|
||||
keyValuePairs[file] += 1;
|
||||
foreach (string file in linkedFive)
|
||||
keyValuePairs[file] += 1;
|
||||
foreach (KeyValuePair<string, int> keyValuePair in keyValuePairs)
|
||||
{
|
||||
personNameDirectory = Path.GetDirectoryName(keyValuePair.Key);
|
||||
yearDirectory = Path.GetDirectoryName(personNameDirectory);
|
||||
personNameDirectoryName = Path.GetFileName(personNameDirectory);
|
||||
personKeyFormattedDirectory = Path.GetDirectoryName(yearDirectory);
|
||||
maybeTicksDirectoryName = Path.GetFileName(personKeyFormattedDirectory);
|
||||
if (string.IsNullOrEmpty(personNameDirectory) || string.IsNullOrEmpty(yearDirectory) || string.IsNullOrEmpty(personKeyFormattedDirectory) || string.IsNullOrEmpty(personNameDirectoryName))
|
||||
continue;
|
||||
checkDirectory = Path.Combine(personKeyFormattedDirectory, $"{keyValuePair.Value}{new string(Convert.ToChar(65 + keyValuePair.Value), 7)}");
|
||||
if (checkDirectory == yearDirectory)
|
||||
if (maybeTicksDirectoryName == locationContainerDebugDirectory)
|
||||
checkDirectory = Path.Combine(yearDirectory, $"{keyValuePair.Value}{new string(Convert.ToChar(65 + keyValuePair.Value), 7)}");
|
||||
else
|
||||
{
|
||||
if (!string.IsNullOrEmpty(locationContainerDebugDirectory))
|
||||
continue;
|
||||
checkDirectory = Path.Combine(personKeyFormattedDirectory, $"{keyValuePair.Value}{new string(Convert.ToChar(65 + keyValuePair.Value), 7)}");
|
||||
}
|
||||
if (maybeTicksDirectoryName != locationContainerDebugDirectory)
|
||||
{
|
||||
if (isCounterPersonYear || string.IsNullOrEmpty(displayDirectoryName))
|
||||
checkDirectory = Path.Combine(checkDirectory, personNameDirectoryName);
|
||||
else
|
||||
checkDirectory = Path.Combine(checkDirectory, displayDirectoryName[0].ToString());
|
||||
}
|
||||
if (checkDirectory == personNameDirectory)
|
||||
continue;
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
checkFile = Path.Combine(checkDirectory, Path.GetFileName(keyValuePair.Key));
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(keyValuePair.Key, checkFile);
|
||||
debugFile = $"{keyValuePair.Key[..^4]}.gif";
|
||||
if (File.Exists(debugFile))
|
||||
{
|
||||
checkFile = Path.Combine(checkDirectory, $"{Path.GetFileName(keyValuePair.Key)[..^4]}.gif");
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(debugFile, checkFile);
|
||||
}
|
||||
if (maybeTicksDirectoryName == locationContainerDebugDirectory && !string.IsNullOrEmpty(displayDirectoryName))
|
||||
{
|
||||
checkDirectory = Path.Combine(checkDirectory, displayDirectoryName);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void SaveMappedForOutputResolutions(string eDistanceContentDirectory, float distanceTolerance, long personKey, bool isCounterPersonYear, string personKeyFormatted, string? displayDirectoryName, List<Record> records, string directory)
|
||||
private static void SaveMappedForOutputResolutions(string locationContainerDebugDirectory, string eDistanceContentDirectory, float distanceTolerance, long personKey, bool isCounterPersonYear, string personKeyFormatted, string? displayDirectoryName, List<Record> records, string directory)
|
||||
{
|
||||
int years;
|
||||
string text;
|
||||
@ -547,6 +581,8 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
List<string> files = new();
|
||||
List<string> lines = new();
|
||||
List<Mapped> results = new();
|
||||
List<string> linkedFive = new();
|
||||
List<string> linkedFour = new();
|
||||
List<string> linkedOnce = new();
|
||||
long ticks = DateTime.Now.Ticks;
|
||||
string fileNameWithoutExtension;
|
||||
@ -606,6 +642,16 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
linkedThrice.Add(mapped.File);
|
||||
continue;
|
||||
}
|
||||
if (!linkedFour.Contains(mapped.File))
|
||||
{
|
||||
linkedFour.Add(mapped.File);
|
||||
continue;
|
||||
}
|
||||
if (!linkedFive.Contains(mapped.File))
|
||||
{
|
||||
linkedFive.Add(mapped.File);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (isCounterPersonYear)
|
||||
(years, _) = Shared.Models.Stateless.Methods.IAge.GetAge(ticks, fileInfo.CreationTime.Ticks);
|
||||
@ -633,10 +679,10 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
if (!Shared.Models.Stateless.Methods.IPath.WriteAllText(Path.Combine(directory, $"{fileNameWithoutExtension}.md"), text, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null))
|
||||
continue;
|
||||
}
|
||||
MoveFiles(keyValuePairs, linkedOnce, linkedTwice, linkedThrice);
|
||||
MoveFiles(locationContainerDebugDirectory, isCounterPersonYear, displayDirectoryName, keyValuePairs, linkedOnce, linkedTwice, linkedThrice, linkedFour, linkedFive);
|
||||
}
|
||||
|
||||
void IDistance<MetadataExtractor.Directory>.SaveMappedForOutputResolutions(string a2PeopleContentDirectory, string eDistanceContentDirectory, float locationContainerDistanceTolerance, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers, long personKey, bool isCounterPersonYear, string personKeyFormatted, string? displayDirectoryName)
|
||||
void IDistance<MetadataExtractor.Directory>.SaveMappedForOutputResolutions(string locationContainerDebugDirectory, string a2PeopleContentDirectory, string eDistanceContentDirectory, float locationContainerDistanceTolerance, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers, long personKey, bool isCounterPersonYear, string personKeyFormatted, string? displayDirectoryName)
|
||||
{
|
||||
string? json;
|
||||
List<Record> records = new();
|
||||
@ -659,7 +705,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
if (records.Count > 0)
|
||||
{
|
||||
WriteVsCodeFiles(eDistanceContentDirectory, displayDirectoryName, directory);
|
||||
SaveMappedForOutputResolutions(eDistanceContentDirectory, locationContainerDistanceTolerance, personKey, isCounterPersonYear, personKeyFormatted, displayDirectoryName, records, directory);
|
||||
SaveMappedForOutputResolutions(locationContainerDebugDirectory, eDistanceContentDirectory, locationContainerDistanceTolerance, personKey, isCounterPersonYear, personKeyFormatted, displayDirectoryName, records, directory);
|
||||
}
|
||||
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(directory);
|
||||
}
|
||||
|
@ -170,6 +170,8 @@ public partial class DlibDotNet
|
||||
throw new NullReferenceException(nameof(configuration.RangeFaceAreaPermyriadTolerance));
|
||||
if (configuration.RangeFaceConfidence.Length != 3)
|
||||
throw new NullReferenceException(nameof(configuration.RangeFaceConfidence));
|
||||
if (configuration.LocationContainerDistanceTolerance is null && !string.IsNullOrEmpty(configuration.LocationContainerDebugDirectory))
|
||||
throw new NullReferenceException($"{nameof(configuration.LocationContainerDistanceTolerance)} must have a value when {nameof(configuration.LocationContainerDebugDirectory)} is set!");
|
||||
_ = DateTime.Now.AddDays(-configuration.RangeDaysDeltaTolerance[1]);
|
||||
if (configuration.OutputResolutions.Length == 0 || string.IsNullOrEmpty(configuration.OutputResolutions[0]) || !configuration.ValidResolutions.Contains(configuration.OutputResolutions[0]))
|
||||
throw new NullReferenceException($"{nameof(configuration.OutputResolutions)} must be fileNameToCollection valid outputResolution!");
|
||||
@ -840,6 +842,7 @@ public partial class DlibDotNet
|
||||
configuration.DistanceRenameToMatch,
|
||||
configuration.FaceConfidencePercent,
|
||||
configuration.FaceDistancePermyriad,
|
||||
configuration.LocationContainerDebugDirectory,
|
||||
configuration.LocationContainerDistanceTolerance,
|
||||
configuration.LocationDigits,
|
||||
configuration.MappingDefaultName,
|
||||
|
@ -32,6 +32,7 @@ public class Configuration
|
||||
public string[]? LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; }
|
||||
public string[]? LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; }
|
||||
public bool? LoadPhotoPrismLocations { get; set; }
|
||||
public string? LocationContainerDebugDirectory { get; set; }
|
||||
public float? LocationContainerDistanceTolerance { get; set; }
|
||||
public int? LocationDigits { get; set; }
|
||||
public int? LocationFactor { get; set; }
|
||||
@ -130,6 +131,7 @@ public class Configuration
|
||||
// if (configuration?.LoadOrCreateThenSaveDistanceResultsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions));
|
||||
// if (configuration?.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions));
|
||||
if (configuration?.LoadPhotoPrismLocations is null) throw new NullReferenceException(nameof(configuration.LoadPhotoPrismLocations));
|
||||
if (configuration?.LocationContainerDebugDirectory is null) throw new NullReferenceException(nameof(configuration.LocationContainerDebugDirectory));
|
||||
// if (configuration?.LocationContainerDistanceTolerance is null) throw new NullReferenceException(nameof(configuration.LocationContainerDistanceTolerance));
|
||||
if (configuration?.LocationDigits is null) throw new NullReferenceException(nameof(configuration.LocationDigits));
|
||||
if (configuration?.LocationFactor is null) throw new NullReferenceException(nameof(configuration.LocationFactor));
|
||||
@ -215,6 +217,7 @@ public class Configuration
|
||||
configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions ?? Array.Empty<string>(),
|
||||
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions ?? Array.Empty<string>(),
|
||||
configuration.LoadPhotoPrismLocations.Value,
|
||||
configuration.LocationContainerDebugDirectory,
|
||||
configuration.LocationContainerDistanceTolerance,
|
||||
configuration.LocationDigits.Value,
|
||||
configuration.LocationFactor.Value,
|
||||
|
@ -26,6 +26,7 @@ public record Configuration(Property.Models.Configuration PropertyConfiguration,
|
||||
string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions,
|
||||
string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions,
|
||||
bool LoadPhotoPrismLocations,
|
||||
string LocationContainerDebugDirectory,
|
||||
float? LocationContainerDistanceTolerance,
|
||||
int LocationDigits,
|
||||
int LocationFactor,
|
||||
|
@ -5,6 +5,7 @@ public record Configuration(bool DeletePossibleDuplicates,
|
||||
bool DistanceRenameToMatch,
|
||||
int FaceConfidencePercent,
|
||||
int FaceDistancePermyriad,
|
||||
string LocationContainerDebugDirectory,
|
||||
float? LocationContainerDistanceTolerance,
|
||||
int LocationDigits,
|
||||
string MappingDefaultName,
|
||||
|
@ -18,6 +18,11 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
[GeneratedRegex("[\\\\,\\/,\\:,\\*,\\?,\\\",\\<,\\>,\\|]")]
|
||||
private static partial Regex FileSystemSafe();
|
||||
|
||||
internal record Record(string? DebugDirectory,
|
||||
string? Directory,
|
||||
long? Ticks,
|
||||
string PersonDirectory);
|
||||
|
||||
public void SaveContainers(int? updated, List<SaveContainer> saveContainers)
|
||||
{
|
||||
if (_Configuration is null)
|
||||
@ -116,7 +121,11 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
continue;
|
||||
try
|
||||
{
|
||||
string description = saveContainer.FaceFileHolder is not null ? saveContainer.FaceFileHolder.Name : string.Empty;
|
||||
string description;
|
||||
if (saveContainer.FaceFileHolder is not null && saveContainer.FaceFileHolder.Name.StartsWith(saveContainer.ResizedFileHolder.Name))
|
||||
description = saveContainer.FaceFileHolder.Name;
|
||||
else
|
||||
description = saveContainer.ResizedFileHolder.Name;
|
||||
windowsShortcut = new() { Path = saveContainer.ResizedFileHolder.FullName, Description = description };
|
||||
windowsShortcut.Save(saveContainer.ShortcutFile);
|
||||
windowsShortcut.Dispose();
|
||||
@ -307,6 +316,8 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
{ }
|
||||
if (!string.IsNullOrEmpty(a2PeopleContentDirectory) && configuration.LocationContainerDistanceTolerance is not null)
|
||||
Stateless.MapLogic.SaveMappedRelations(configuration, distance, a2PeopleContentDirectory, eDistanceContentDirectory, ticks, locationContainers, readOnlyPersonKeyFormattedToPersonContainer, readOnlyPersonKeyToPersonContainerCollection);
|
||||
if (!string.IsNullOrEmpty(configuration.LocationContainerDebugDirectory))
|
||||
throw new Exception($"{nameof(configuration.LocationContainerDebugDirectory)} is not IsNullOrEmpty!");
|
||||
}
|
||||
_PersonKeyToCount = readOnlyPersonKeyToCount;
|
||||
_EDistanceContentTicksDirectory = eDistanceContentTicksDirectory;
|
||||
@ -469,7 +480,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
return (ticks, directory);
|
||||
}
|
||||
|
||||
private static bool PreAndPostContinue(Configuration configuration, ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> idToWholePercentagesToMapping, Sorting sorting, Mapping mapping, Mapping keyMapping)
|
||||
private static bool PreAndPostContinue(Configuration configuration, Mapping mapping, Mapping keyMapping)
|
||||
{
|
||||
bool result = true;
|
||||
if (result && mapping.MappingFromFilterPre.InSkipCollection is not null && mapping.MappingFromFilterPre.InSkipCollection.Value)
|
||||
@ -493,13 +504,15 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
return result;
|
||||
}
|
||||
|
||||
private (string?, long?, string) Get(Configuration configuration, bool saveIndividually, string by, Mapping question, int padLeft)
|
||||
private Record Get(Configuration configuration, bool saveIndividually, string by, Mapping question, int padLeft)
|
||||
{
|
||||
long? ticks;
|
||||
string? directory;
|
||||
string? debugDirectory;
|
||||
string personDirectory;
|
||||
if (question.MappingFromPerson is null)
|
||||
{
|
||||
debugDirectory = null;
|
||||
(ticks, directory) = GetDirectory(configuration, saveIndividually, padLeft, question.SegmentC, by, question.MappingFromItem);
|
||||
personDirectory = directory is null ? string.Empty : Path.Combine(directory, $"X+{ticks}");
|
||||
}
|
||||
@ -507,34 +520,34 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
{
|
||||
ticks = null;
|
||||
string personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, question.MappingFromPerson.PersonKey);
|
||||
debugDirectory = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, question.MappingFromPerson.DisplayDirectoryName);
|
||||
if (string.IsNullOrEmpty(question.SegmentC))
|
||||
directory = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, question.MappingFromPerson.SegmentB);
|
||||
else if (saveIndividually)
|
||||
directory = Path.Combine(_EDistanceContentTicksDirectory, by, question.SegmentC.PadLeft(padLeft, '0'), personKeyFormatted, question.MappingFromPerson.SegmentB);
|
||||
else if (!saveIndividually)
|
||||
directory = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, $"Z-{question.MappingFromPerson.SegmentB}-{question.SegmentC}");
|
||||
else
|
||||
directory = Path.Combine(_EDistanceContentTicksDirectory, by, personKeyFormatted, question.MappingFromPerson.SegmentB, question.SegmentC);
|
||||
directory = Path.Combine(_EDistanceContentTicksDirectory, by, question.SegmentC.PadLeft(padLeft, '0'), personKeyFormatted, question.MappingFromPerson.SegmentB);
|
||||
personDirectory = Path.Combine(directory, question.MappingFromPerson.DisplayDirectoryName, "lnk");
|
||||
}
|
||||
return (directory, ticks, personDirectory);
|
||||
return new(debugDirectory, directory, ticks, personDirectory);
|
||||
}
|
||||
|
||||
private List<SaveContainer> GetSaveContainers(string dFacesContentDirectory, string d2FacePartsContentDirectory, string d2FacePartsContentCollectionDirectory, ReadOnlyCollection<Mapping> mappingCollection, ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> idToWholePercentagesToMapping, ReadOnlyDictionary<long, List<int>> personKeyToIds, int? useFiltersCounter, bool saveMapped, bool saveIndividually, bool sortingContainersAny)
|
||||
private List<SaveContainer> GetSaveContainers(string dFacesContentDirectory, string d2FacePartsContentDirectory, ReadOnlyCollection<Mapping> mappingCollection, ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> idToWholePercentagesToMapping, ReadOnlyDictionary<long, List<int>> personKeyToIds, int? useFiltersCounter, bool saveMapped, bool saveIndividually, bool sortingContainersAny)
|
||||
{
|
||||
if (_Configuration is null)
|
||||
throw new NullReferenceException(nameof(_Configuration));
|
||||
List<SaveContainer> results = new();
|
||||
string by;
|
||||
long? ticks;
|
||||
Record record;
|
||||
List<int>? ids;
|
||||
bool isByMapping;
|
||||
bool isBySorting;
|
||||
Sorting? sorting;
|
||||
string checkFile;
|
||||
string? directory;
|
||||
Mapping? question;
|
||||
string? directory;
|
||||
string shortcutFile;
|
||||
string facesDirectory;
|
||||
string personDirectory;
|
||||
FileHolder faceFileHolder;
|
||||
string facePartsDirectory;
|
||||
SaveContainer? saveContainer;
|
||||
@ -569,12 +582,13 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
throw new NotSupportedException();
|
||||
if (!wholePercentagesToMapping.TryGetValue(sorting.WholePercentages, out question))
|
||||
throw new NotSupportedException();
|
||||
if (!PreAndPostContinue(_Configuration, idToWholePercentagesToMapping, sorting, mapping, question))
|
||||
if (!PreAndPostContinue(_Configuration, mapping, question))
|
||||
continue;
|
||||
}
|
||||
(directory, ticks, personDirectory) = Get(_Configuration, saveIndividually, by, mapping, padLeft);
|
||||
if (string.IsNullOrEmpty(directory))
|
||||
record = Get(_Configuration, saveIndividually, by, mapping, padLeft);
|
||||
if (string.IsNullOrEmpty(record.Directory))
|
||||
throw new NotSupportedException();
|
||||
directory = record.Directory;
|
||||
if (mapping.MappingFromPerson is not null)
|
||||
{
|
||||
if (saveIndividually)
|
||||
@ -589,15 +603,15 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
{
|
||||
if (!_Configuration.SaveSortingWithoutPerson)
|
||||
continue;
|
||||
if (ticks is null)
|
||||
if (record.Ticks is null)
|
||||
continue;
|
||||
if (saveIndividually)
|
||||
{
|
||||
directory = Path.Combine(directory, mapping.MappingFromItem.Id.ToString());
|
||||
results.Add(new(Path.Combine(directory, $"X+{ticks}")));
|
||||
results.Add(new(Path.Combine(directory, $"X+{record.Ticks}")));
|
||||
}
|
||||
}
|
||||
results.Add(new(personDirectory));
|
||||
results.Add(new(record.PersonDirectory));
|
||||
if (question is not null)
|
||||
{
|
||||
if (question.MappingFromLocation is null)
|
||||
@ -611,7 +625,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
continue;
|
||||
if (isByMapping)
|
||||
{
|
||||
checkFile = Path.Combine(personDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
|
||||
checkFile = Path.Combine(record.PersonDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
|
||||
saveContainer = new(checkFile, directory, faceFileHolder);
|
||||
}
|
||||
else if (saveIndividually)
|
||||
@ -625,7 +639,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
else
|
||||
{
|
||||
facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(_PropertyConfiguration, d2FacePartsContentDirectory, mapping.MappingFromItem);
|
||||
shortcutFile = Path.Combine(personDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.lnk");
|
||||
shortcutFile = Path.Combine(record.PersonDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.lnk");
|
||||
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
|
||||
hiddenFaceFileHolder = new(Path.Combine(facesDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesHiddenFileNameExtension}"));
|
||||
facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacePartsFileNameExtension}"));
|
||||
@ -644,7 +658,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
bool saveMapped = true;
|
||||
int? useFiltersCounter = null;
|
||||
string mappingDirectory = Path.Combine(_EDistanceContentTicksDirectory, nameof(Shared.Models.Stateless.IMapLogic.Mapping));
|
||||
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, d2FacePartsContentCollectionDirectory, mappingCollection, idToWholePercentagesToMapping, personKeyToIds, useFiltersCounter, saveMapped, sortingContainersAny: true, saveIndividually: false);
|
||||
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToWholePercentagesToMapping, personKeyToIds, useFiltersCounter, saveMapped, sortingContainersAny: true, saveIndividually: false);
|
||||
SaveContainers(updated, saveContainers);
|
||||
if (!string.IsNullOrEmpty(_EDistanceContentTicksDirectory) && Directory.Exists(mappingDirectory))
|
||||
Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory);
|
||||
@ -759,14 +773,13 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
}
|
||||
List<SaveContainer> results = new();
|
||||
string by;
|
||||
long? ticks;
|
||||
Record record;
|
||||
bool isBySorting;
|
||||
string checkFile;
|
||||
Mapping? question;
|
||||
string? directory;
|
||||
string shortcutFile;
|
||||
string facesDirectory;
|
||||
string personDirectory;
|
||||
bool isCounterPersonYear;
|
||||
string facePartsDirectory;
|
||||
FileHolder? faceFileHolder;
|
||||
@ -786,9 +799,12 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
throw new NotSupportedException();
|
||||
if (question.MappingFromLocation is null)
|
||||
continue;
|
||||
(directory, ticks, personDirectory) = Get(_Configuration, _Configuration.SaveIndividually, by, question, padLeft);
|
||||
if (string.IsNullOrEmpty(directory))
|
||||
record = Get(_Configuration, _Configuration.SaveIndividually, by, question, padLeft);
|
||||
if (string.IsNullOrEmpty(record.Directory))
|
||||
throw new NotSupportedException();
|
||||
directory = record.Directory;
|
||||
if (!string.IsNullOrEmpty(record.DebugDirectory))
|
||||
results.Add(new(record.DebugDirectory));
|
||||
if (question.MappingFromPerson is not null)
|
||||
{
|
||||
if (_Configuration.SaveIndividually)
|
||||
@ -801,21 +817,21 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
{
|
||||
if (!_Configuration.SaveSortingWithoutPerson)
|
||||
throw new NotSupportedException();
|
||||
if (ticks is null)
|
||||
if (record.Ticks is null)
|
||||
continue;
|
||||
if (_Configuration.SaveIndividually)
|
||||
{
|
||||
directory = Path.Combine(directory, question.MappingFromItem.Id.ToString());
|
||||
results.Add(new(Path.Combine(directory, $"X+{ticks}")));
|
||||
results.Add(new(Path.Combine(directory, $"X+{record.Ticks}")));
|
||||
}
|
||||
}
|
||||
results.Add(new(personDirectory));
|
||||
results.Add(new(record.PersonDirectory));
|
||||
if (_Configuration.SaveIndividually && question.MappingFromLocation.WholePercentages == question.MappingFromLocation.WholePercentages)
|
||||
results.Add(new(Path.Combine(directory, "Maybe")));
|
||||
facesDirectory = Stateless.MapLogic.GetFacesDirectory(_PropertyConfiguration, dFacesContentDirectory, question.MappingFromItem);
|
||||
faceFileHolder = new(Path.Combine(facesDirectory, $"{question.MappingFromLocation.DeterministicHashCodeKey}{question.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}"));
|
||||
facePartsDirectory = Stateless.MapLogic.GetFacePartsDirectory(_PropertyConfiguration, d2FacePartsContentDirectory, question.MappingFromItem);
|
||||
shortcutFile = Path.Combine(personDirectory, $"{question.MappingFromLocation.DeterministicHashCodeKey}{question.MappingFromItem.ImageFileHolder.ExtensionLowered}.lnk");
|
||||
shortcutFile = Path.Combine(record.PersonDirectory, $"{question.MappingFromLocation.DeterministicHashCodeKey}{question.MappingFromItem.ImageFileHolder.ExtensionLowered}.lnk");
|
||||
checkFile = Path.Combine(directory, $"{question.MappingFromLocation.DeterministicHashCodeKey}{question.MappingFromItem.ImageFileHolder.ExtensionLowered}");
|
||||
hiddenFaceFileHolder = new(Path.Combine(facesDirectory, $"{question.MappingFromLocation.DeterministicHashCodeKey}{question.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesHiddenFileNameExtension}"));
|
||||
facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{question.MappingFromLocation.DeterministicHashCodeKey}{question.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacePartsFileNameExtension}"));
|
||||
@ -893,7 +909,7 @@ public partial class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
throw new NotSupportedException(nameof(GetSortingCollection));
|
||||
if (keyMapping.MappingFromFilterPost.CanReMap is not null && !keyMapping.MappingFromFilterPost.CanReMap.Value)
|
||||
throw new NotSupportedException(nameof(GetSortingCollection));
|
||||
if (!PreAndPostContinue(_Configuration, idToWholePercentagesToMapping, sorting, sortingContainer.Source, keyMapping))
|
||||
if (!PreAndPostContinue(_Configuration, sortingContainer.Source, keyMapping))
|
||||
continue;
|
||||
if (!idToWholePercentagesCollection.TryGetValue(sorting.Id, out wholePercentagesCollection))
|
||||
{
|
||||
|
@ -16,13 +16,13 @@ internal abstract class MapLogic
|
||||
|
||||
internal record Record(string PersonKeyFormatted,
|
||||
int DirectoryNumber,
|
||||
string PersonDisplayDirectoryName,
|
||||
bool IsDefault,
|
||||
string? PersonDisplayDirectoryName,
|
||||
bool? IsDefault,
|
||||
string MappedFaceFile);
|
||||
|
||||
internal record MappedFile(long PersonKey,
|
||||
string PersonKeyFormatted,
|
||||
string PersonDisplayDirectoryName,
|
||||
string? PersonDisplayDirectoryName,
|
||||
int? DirectoryNumber,
|
||||
string File);
|
||||
|
||||
@ -38,8 +38,8 @@ internal abstract class MapLogic
|
||||
float? TotalDays);
|
||||
|
||||
internal record PersonKeyFormattedIdThenWholePercentages(string PersonKeyFormatted,
|
||||
string PersonDisplayDirectoryName,
|
||||
bool IsDefault,
|
||||
string? PersonDisplayDirectoryName,
|
||||
bool? IsDefault,
|
||||
string MappedFaceFile,
|
||||
int Id,
|
||||
int WholePercentages);
|
||||
@ -335,7 +335,7 @@ internal abstract class MapLogic
|
||||
if (directoryInfo.LastWriteTime.Ticks != directoryTicks)
|
||||
Directory.SetLastWriteTime(ticksDirectory, new DateTime(directoryTicks));
|
||||
totalDays = lastDirectoryTicks is null || new TimeSpan(dateTime.Ticks - directoryTicks).TotalDays < 1 ? null : (float)new TimeSpan(directoryTicks - lastDirectoryTicks.Value).TotalDays;
|
||||
results.Add(new(ticksDirectory, ticksDirectoryName, new(directoryTicks), new DateTime(directoryDateTime.Year, directoryDateTime.Month, directoryDateTime.Day + 1), totalDays));
|
||||
results.Add(new(ticksDirectory, ticksDirectoryName, new(directoryTicks), new DateTime(directoryDateTime.Year, directoryDateTime.Month, directoryDateTime.Day).AddMonths(1), totalDays));
|
||||
if (directoryDateTime.Hour == 0 && directoryDateTime.Minute == 0 && directoryDateTime.Second == 0)
|
||||
continue;
|
||||
lastDirectoryTicks = directoryTicks;
|
||||
@ -641,6 +641,7 @@ internal abstract class MapLogic
|
||||
string[] fileMatches;
|
||||
const string lnk = ".lnk";
|
||||
int? id, wholePercentages;
|
||||
string personDisplayDirectoryName;
|
||||
const bool fromDistanceContent = true;
|
||||
IReadOnlyList<MetadataExtractor.Directory> directories;
|
||||
List<(string File, int WholePercentages)>? wholePercentagesCollection;
|
||||
@ -650,7 +651,7 @@ internal abstract class MapLogic
|
||||
(id, wholePercentages) = IMapping.GetConverted(configuration.FacesFileNameExtension, mappedFile.File[..^4]);
|
||||
if (id is null || wholePercentages is null)
|
||||
return;
|
||||
if (skipCollection.TryGetValue(id.Value, out wholePercentagesCollection))
|
||||
if (string.IsNullOrEmpty(configuration.LocationContainerDebugDirectory) && skipCollection.TryGetValue(id.Value, out wholePercentagesCollection))
|
||||
{
|
||||
fileMatches = (from l in wholePercentagesCollection where l.WholePercentages == wholePercentages select l.File).ToArray();
|
||||
foreach (string fileMatch in fileMatches)
|
||||
@ -669,8 +670,9 @@ internal abstract class MapLogic
|
||||
else
|
||||
directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(mappedFile.File);
|
||||
RectangleF? rectangle = ILocation.GetPercentagesRectangle(configuration.LocationDigits, wholePercentages.Value);
|
||||
personDisplayDirectoryName = mappedFile.PersonDisplayDirectoryName is null ? configuration.MappingDefaultName : mappedFile.PersonDisplayDirectoryName;
|
||||
lock (locationContainers)
|
||||
locationContainers.Add(new(fromDistanceContent, mappedFile.DirectoryNumber, mappedFile.File, mappedFile.PersonKey, mappedFile.PersonDisplayDirectoryName, id.Value, wholePercentages.Value, directories, rectangle, null));
|
||||
locationContainers.Add(new(fromDistanceContent, mappedFile.DirectoryNumber, mappedFile.File, mappedFile.PersonKey, personDisplayDirectoryName, id.Value, wholePercentages.Value, directories, rectangle, null));
|
||||
}
|
||||
|
||||
private static void LookForPossibleDuplicates(Configuration configuration, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers)
|
||||
@ -870,21 +872,46 @@ internal abstract class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
internal static List<Record> DeleteEmptyDirectoriesAndGetCollection(Configuration configuration, long ticks, string eDistanceContentDirectory, ReadOnlyDictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, ReadOnlyCollection<string> personKeyFormattedCollection)
|
||||
private static List<Record> GetRecords(Configuration configuration, bool? isDefault, string[] files, int directoryNumber, string personKeyFormatted, List<string> distinct, string? personDisplayDirectoryName)
|
||||
{
|
||||
List<Record> results = new();
|
||||
int? id;
|
||||
string fileName;
|
||||
string checkFile;
|
||||
int? wholePercentages;
|
||||
foreach (string mappedFaceFile in files)
|
||||
{
|
||||
if (mappedFaceFile.EndsWith(".lnk"))
|
||||
continue;
|
||||
(id, wholePercentages) = IMapping.GetConverted(configuration.FacesFileNameExtension, mappedFaceFile);
|
||||
if (id is null || wholePercentages is null)
|
||||
continue;
|
||||
fileName = Path.GetFileName(mappedFaceFile);
|
||||
if (distinct.Contains(fileName))
|
||||
{
|
||||
checkFile = $"{mappedFaceFile}.dup";
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(mappedFaceFile, checkFile);
|
||||
continue;
|
||||
}
|
||||
distinct.Add(fileName);
|
||||
results.Add(new(personKeyFormatted, directoryNumber, personDisplayDirectoryName, isDefault, mappedFaceFile));
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static List<Record> DeleteEmptyDirectoriesAndGetCollection(Configuration configuration, long ticks, string eDistanceContentDirectory, ReadOnlyDictionary<string, string> personKeyFormattedToNewestPersonKeyFormatted, ReadOnlyCollection<string> personKeyFormattedCollection)
|
||||
{
|
||||
List<Record> results = new();
|
||||
bool check;
|
||||
bool isDefault;
|
||||
string message;
|
||||
string[] files;
|
||||
string fileName;
|
||||
bool? isDefault;
|
||||
int totalSeconds;
|
||||
string checkFile;
|
||||
DateTime dateTime;
|
||||
TimeSpan timeSpan;
|
||||
int directoryNumber;
|
||||
int? wholePercentages;
|
||||
string? checkDirectory;
|
||||
ProgressBar progressBar;
|
||||
string[] yearDirectories;
|
||||
@ -894,7 +921,7 @@ internal abstract class MapLogic
|
||||
List<string> distinct = new();
|
||||
string[] personNameDirectories;
|
||||
string? newestPersonKeyFormatted;
|
||||
string personDisplayDirectoryName;
|
||||
string? personDisplayDirectoryName;
|
||||
string[] personNameLinkDirectories;
|
||||
string? personFirstInitialDirectory;
|
||||
List<TicksDirectory> ticksDirectories;
|
||||
@ -938,16 +965,32 @@ internal abstract class MapLogic
|
||||
{
|
||||
if (check && !Directory.Exists(yearDirectory))
|
||||
continue;
|
||||
if (ticksDirectory.DirectoryName != configuration.LocationContainerDebugDirectory)
|
||||
{
|
||||
files = Directory.GetFiles(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
personNameDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string file in files)
|
||||
File.Delete(file);
|
||||
}
|
||||
if (ticksDirectory.DirectoryName == configuration.LocationContainerDebugDirectory)
|
||||
{
|
||||
isDefault = null;
|
||||
personDisplayDirectoryName = null;
|
||||
files = Directory.GetFiles(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
results.AddRange(GetRecords(configuration, isDefault, files, directoryNumber, personKeyFormatted, distinct, personDisplayDirectoryName));
|
||||
files = Directory.GetFiles(yearDirectory, "*.lnk", SearchOption.AllDirectories);
|
||||
foreach (string file in files)
|
||||
File.Delete(file);
|
||||
continue;
|
||||
}
|
||||
personNameDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
if (personNameDirectories.Length > 1)
|
||||
throw new NotSupportedException();
|
||||
foreach (string personNameDirectory in personNameDirectories)
|
||||
{
|
||||
directoryNumber++;
|
||||
personDisplayDirectoryName = Path.GetFileName(personNameDirectory);
|
||||
isDefault = IPerson.IsDefaultName(personDisplayDirectoryName) && IPersonBirthday.IsCounterPersonYear(personKeyFormatted[..4]);
|
||||
if (isDefault && personDisplayDirectoryName.Length == 1)
|
||||
if (isDefault.Value && personDisplayDirectoryName.Length == 1)
|
||||
{
|
||||
if (personKeyFormatted.Length != configuration.PersonBirthdayFormat.Length || !DateTime.TryParseExact(personKeyFormatted, configuration.PersonBirthdayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
|
||||
continue;
|
||||
@ -962,7 +1005,7 @@ internal abstract class MapLogic
|
||||
check = true;
|
||||
continue;
|
||||
}
|
||||
if (isDefault && (ticksDirectory.DirectoryDateTime.Hour != 0 || ticksDirectory.DirectoryDateTime.Minute != 0 || ticksDirectory.DirectoryDateTime.Second != 0))
|
||||
if (isDefault.Value && (ticksDirectory.DirectoryDateTime.Hour != 0 || ticksDirectory.DirectoryDateTime.Minute != 0 || ticksDirectory.DirectoryDateTime.Second != 0))
|
||||
{
|
||||
checkDirectory = Path.GetDirectoryName(ticksDirectory.Directory);
|
||||
if (checkDirectory is null)
|
||||
@ -986,7 +1029,7 @@ internal abstract class MapLogic
|
||||
throw new Exception($"Move personKey directories up one from {manualCopyHumanized} and delete {manualCopyHumanized} directory!");
|
||||
if (personKeyFormatted == forceSingleImageHumanized && files.Length > 0)
|
||||
throw new Exception($"Move personKey directories up one from {forceSingleImageHumanized} and delete {forceSingleImageHumanized} directory!");
|
||||
if (!isDefault)
|
||||
if (!isDefault.Value)
|
||||
{
|
||||
if (personKeyFormattedToNewestPersonKeyFormatted.Count > 0 && newestPersonKeyFormatted is null)
|
||||
RenameUnknown(files);
|
||||
@ -1000,7 +1043,7 @@ internal abstract class MapLogic
|
||||
}
|
||||
if (personKeyFormatted.Length != configuration.PersonBirthdayFormat.Length)
|
||||
continue;
|
||||
if (personDisplayDirectoryName.Length == 1 || isDefault || !personKeyFormattedCollection.Contains(personKeyFormatted))
|
||||
if (personDisplayDirectoryName.Length == 1 || isDefault.Value || !personKeyFormattedCollection.Contains(personKeyFormatted))
|
||||
personFirstInitialDirectory = personNameDirectory;
|
||||
else
|
||||
{
|
||||
@ -1021,25 +1064,7 @@ internal abstract class MapLogic
|
||||
Directory.Move(personNameDirectory, personFirstInitialDirectory);
|
||||
files = Directory.GetFiles(personFirstInitialDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
}
|
||||
foreach (string mappedFaceFile in files)
|
||||
{
|
||||
if (mappedFaceFile.EndsWith(".lnk"))
|
||||
continue;
|
||||
(id, wholePercentages) = IMapping.GetConverted(configuration.FacesFileNameExtension, mappedFaceFile);
|
||||
if (id is null || wholePercentages is null)
|
||||
continue;
|
||||
fileName = Path.GetFileName(mappedFaceFile);
|
||||
if (distinct.Contains(fileName))
|
||||
{
|
||||
checkFile = $"{mappedFaceFile}.dup";
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(mappedFaceFile, checkFile);
|
||||
continue;
|
||||
}
|
||||
distinct.Add(fileName);
|
||||
results.Add(new(personKeyFormatted, directoryNumber, personDisplayDirectoryName, isDefault, mappedFaceFile));
|
||||
}
|
||||
results.AddRange(GetRecords(configuration, isDefault, files, directoryNumber, personKeyFormatted, distinct, personDisplayDirectoryName));
|
||||
personNameLinkDirectories = Directory.GetDirectories(personFirstInitialDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string personNameLinkDirectory in personNameLinkDirectories)
|
||||
{
|
||||
@ -1083,6 +1108,7 @@ internal abstract class MapLogic
|
||||
char status, sex, first;
|
||||
PersonDirectory personDirectory;
|
||||
PersonContainer? personContainer;
|
||||
string personDisplayDirectoryName;
|
||||
foreach (PersonKeyFormattedIdThenWholePercentages personKeyFormattedIdThenWholePercentages in personKeyFormattedIdThenWholePercentagesCollection)
|
||||
{
|
||||
personBirthday = IPersonBirthday.GetPersonBirthday(configuration.PersonBirthdayFormat, personKeyFormattedIdThenWholePercentages.PersonKeyFormatted);
|
||||
@ -1090,13 +1116,14 @@ internal abstract class MapLogic
|
||||
throw new Exception();
|
||||
if (!personKeyFormattedToPersonContainer.TryGetValue(personKeyFormattedIdThenWholePercentages.PersonKeyFormatted, out personContainer))
|
||||
{
|
||||
matches = configuration.PersonCharacters.Where(l => personKeyFormattedIdThenWholePercentages.PersonDisplayDirectoryName.Contains(l)).ToArray();
|
||||
personDisplayDirectoryName = personKeyFormattedIdThenWholePercentages.PersonDisplayDirectoryName is null ? configuration.MappingDefaultName : personKeyFormattedIdThenWholePercentages.PersonDisplayDirectoryName;
|
||||
matches = configuration.PersonCharacters.Where(l => personDisplayDirectoryName.Contains(l)).ToArray();
|
||||
if (matches.Length == 0)
|
||||
throw new NotSupportedException();
|
||||
group = IPerson.GetHourGroup(personKeyFormattedIdThenWholePercentages.PersonDisplayDirectoryName, personBirthday.Value.Hour);
|
||||
(status, sex, first) = IPerson.GetPersonHour(personKeyFormattedIdThenWholePercentages.PersonDisplayDirectoryName, personBirthday.Value.Hour);
|
||||
personDirectory = new(matches.First(), group, status, sex, first);
|
||||
personContainer = new(configuration.PersonCharacters.ToArray(), personBirthday, personKeyFormattedIdThenWholePercentages.PersonDisplayDirectoryName, personDirectory);
|
||||
personContainer = new(configuration.PersonCharacters.ToArray(), personBirthday, personDisplayDirectoryName, personDirectory);
|
||||
personKeyFormattedToPersonContainer.Add(personKeyFormattedIdThenWholePercentages.PersonKeyFormatted, personContainer);
|
||||
}
|
||||
if (personContainer.Key is null)
|
||||
@ -1280,8 +1307,11 @@ internal abstract class MapLogic
|
||||
ParallelFor(configuration, skipCollection, results, mappedFiles[i]);
|
||||
});
|
||||
}
|
||||
if (string.IsNullOrEmpty(configuration.LocationContainerDebugDirectory))
|
||||
{
|
||||
ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers = new(results.OrderBy(l => l.DirectoryNumber).ToArray());
|
||||
LookForPossibleDuplicates(configuration, locationContainers);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
@ -1785,6 +1815,39 @@ internal abstract class MapLogic
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void AddDisplayDirectoryNames(Configuration configuration, string eDistanceContentDirectory, ReadOnlyDictionary<string, PersonContainer> readOnlyPersonKeyFormattedToPersonContainer, ReadOnlyDictionary<long, List<PersonContainer>> readOnlyPersonKeyToPersonContainerCollection, ReadOnlyCollection<ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>>> collections)
|
||||
{
|
||||
bool isCounterPersonYear;
|
||||
string personKeyFormatted;
|
||||
string? displayDirectoryName;
|
||||
string? checkDirectory = Path.Combine(eDistanceContentDirectory, configuration.LocationContainerDebugDirectory);
|
||||
_ = IPath.DeleteEmptyDirectories(checkDirectory);
|
||||
foreach (ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> collection in collections)
|
||||
{
|
||||
if (configuration.LocationContainerDistanceTolerance is null)
|
||||
break;
|
||||
isCounterPersonYear = IPersonBirthday.IsCounterPersonYear(new DateTime(collection[0].PersonKey).Year);
|
||||
if (isCounterPersonYear)
|
||||
continue;
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, collection[0].PersonKey);
|
||||
checkDirectory = Path.Combine(eDistanceContentDirectory, configuration.LocationContainerDebugDirectory, personKeyFormatted);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
continue;
|
||||
displayDirectoryName = GetDisplayDirectoryName(readOnlyPersonKeyToPersonContainerCollection, readOnlyPersonKeyFormattedToPersonContainer, collection[0].PersonKey, personKeyFormatted);
|
||||
if (string.IsNullOrEmpty(displayDirectoryName))
|
||||
continue;
|
||||
foreach (string yearDirectory in Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly))
|
||||
{
|
||||
checkDirectory = Path.Combine(yearDirectory, displayDirectoryName);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
checkDirectory = Path.Combine(eDistanceContentDirectory, configuration.LocationContainerDebugDirectory, personKeyFormatted, displayDirectoryName);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
}
|
||||
|
||||
internal static void SaveMappedRelations(Configuration configuration, Shared.Models.Methods.IDistance<MetadataExtractor.Directory> distance, string a2PeopleContentDirectory, string eDistanceContentDirectory, long ticks, List<LocationContainer<MetadataExtractor.Directory>> locationContainers, ReadOnlyDictionary<string, PersonContainer> readOnlyPersonKeyFormattedToPersonContainer, ReadOnlyDictionary<long, List<PersonContainer>> readOnlyPersonKeyToPersonContainerCollection)
|
||||
{
|
||||
bool isCounterPersonYear;
|
||||
@ -1802,11 +1865,13 @@ internal abstract class MapLogic
|
||||
progressBar.Tick();
|
||||
if (collection.Count == 0)
|
||||
continue;
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, collection[0].PersonKey);
|
||||
isCounterPersonYear = IPersonBirthday.IsCounterPersonYear(new DateTime(collection[0].PersonKey).Year);
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(configuration.PersonBirthdayFormat, collection[0].PersonKey);
|
||||
displayDirectoryName = GetDisplayDirectoryName(readOnlyPersonKeyToPersonContainerCollection, readOnlyPersonKeyFormattedToPersonContainer, collection[0].PersonKey, personKeyFormatted);
|
||||
distance.SaveMappedForOutputResolutions(a2PeopleContentDirectory, eDistanceContentDirectory, configuration.LocationContainerDistanceTolerance.Value, collection, collection[0].PersonKey, isCounterPersonYear, personKeyFormatted, displayDirectoryName);
|
||||
distance.SaveMappedForOutputResolutions(configuration.LocationContainerDebugDirectory, a2PeopleContentDirectory, eDistanceContentDirectory, configuration.LocationContainerDistanceTolerance.Value, collection, collection[0].PersonKey, isCounterPersonYear, personKeyFormatted, displayDirectoryName);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(configuration.LocationContainerDebugDirectory))
|
||||
AddDisplayDirectoryNames(configuration, eDistanceContentDirectory, readOnlyPersonKeyFormattedToPersonContainer, readOnlyPersonKeyToPersonContainerCollection, collections);
|
||||
}
|
||||
|
||||
internal static bool? CanReMap(long[] jLinkResolvedPersonKeys, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers, MappingFromLocation mappingFromLocation)
|
||||
|
@ -5,6 +5,6 @@ namespace View_by_Distance.Shared.Models.Methods;
|
||||
public interface IDistance<T>
|
||||
{
|
||||
|
||||
void SaveMappedForOutputResolutions(string a2PeopleContentDirectory, string eDistanceContentDirectory, float locationContainerDistanceTolerance, ReadOnlyCollection<LocationContainer<T>> locationContainers, long personKey, bool isCounterPersonYear, string personKeyFormatted, string? displayDirectoryName);
|
||||
void SaveMappedForOutputResolutions(string locationContainerDebugDirectory, string a2PeopleContentDirectory, string eDistanceContentDirectory, float locationContainerDistanceTolerance, ReadOnlyCollection<LocationContainer<T>> locationContainers, long personKey, bool isCounterPersonYear, string personKeyFormatted, string? displayDirectoryName);
|
||||
|
||||
}
|
@ -5,7 +5,7 @@ public interface IPerson
|
||||
|
||||
// ...
|
||||
|
||||
static (char, char, char) GetPersonHour(string personDisplayDirectoryName, int hour) =>
|
||||
static (char, char, char) GetPersonHour(string? personDisplayDirectoryName, int hour) =>
|
||||
hour == 0 ? new('U', 'U', 'U') :
|
||||
hour == 1 ? new('U', 'U', 'U') :
|
||||
hour == 2 ? new('U', 'U', 'U') :
|
||||
@ -21,7 +21,7 @@ public interface IPerson
|
||||
hour == 17 ? new('D', 'M', 'N') :
|
||||
throw new NotImplementedException(personDisplayDirectoryName);
|
||||
|
||||
static string GetHourGroup(string personDisplayDirectoryName, int hour) =>
|
||||
static string GetHourGroup(string? personDisplayDirectoryName, int hour) =>
|
||||
hour == 0 ? "Unknown-Unknown-Unknown" :
|
||||
hour == 1 ? "Unknown-Unknown-Unknown" :
|
||||
hour == 2 ? "Unknown-Unknown-Unknown" :
|
||||
|
@ -83,7 +83,7 @@ public partial class UnitTestHardCoded
|
||||
[TestMethod]
|
||||
public void TestMethodDel()
|
||||
{
|
||||
string directory = "F:/Tmp/Phares/Compare/Images 2022-09-15 - 7390c13 - III - Results/E) Distance/2022-09-15/7680 x 4320/7680x4320 - Hog - Large/()/(637992984751968513)";
|
||||
string directory = "F:/Tmp/Phares/Compare/Images 2022-09-15 - 7390c13 - III - Results/E)Distance/2022-09-15/7680 x 4320/7680x4320 - Hog - Large/()/(637992984751968513)";
|
||||
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
|
||||
{
|
||||
for (int i = 1; i < 11; i++)
|
||||
@ -96,7 +96,7 @@ public partial class UnitTestHardCoded
|
||||
[TestMethod]
|
||||
public void TestMethodGetApproximateYears()
|
||||
{
|
||||
string personDisplayDirectory = "D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/{}/^/Sydney Dupray^9";
|
||||
string personDisplayDirectory = "D:/1-Images-A/Images-dd514b88-Results/A2)People/dd514b88/{}/^/Sydney Dupray^9";
|
||||
if (Directory.Exists(Directory.GetDirectoryRoot(personDisplayDirectory)) && Directory.Exists(personDisplayDirectory))
|
||||
{
|
||||
char numberSign = '#';
|
||||
@ -120,7 +120,7 @@ public partial class UnitTestHardCoded
|
||||
[TestMethod]
|
||||
public void TestMethodDel2()
|
||||
{
|
||||
string directory = "F:/Tmp/Phares/Compare/Images 2022-09-15 - 7390c13 - III - Results/E) Distance/2022-09-15/7680 x 4320/7680x4320 - Hog - Large/()/(637992984751968513)";
|
||||
string directory = "F:/Tmp/Phares/Compare/Images 2022-09-15 - 7390c13 - III - Results/E)Distance/2022-09-15/7680 x 4320/7680x4320 - Hog - Large/()/(637992984751968513)";
|
||||
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
|
||||
{
|
||||
for (int i = 1; i < 11; i++)
|
||||
@ -199,7 +199,7 @@ public partial class UnitTestHardCoded
|
||||
[TestMethod]
|
||||
public void TestMethodRenameAbandoned()
|
||||
{
|
||||
string directory = "D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/{}/!/Abandoned";
|
||||
string directory = "D:/1-Images-A/Images-dd514b88-Results/A2)People/dd514b88/{}/!/Abandoned";
|
||||
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
|
||||
{
|
||||
string checkFile;
|
||||
@ -219,7 +219,7 @@ public partial class UnitTestHardCoded
|
||||
[TestMethod]
|
||||
public void TestMethodRenameDelete()
|
||||
{
|
||||
string directory = "D:/1-Images-A/Images-dd514b88-Results/A) Property/dd514b88/{}";
|
||||
string directory = "D:/1-Images-A/Images-dd514b88-Results/A)Property/dd514b88/{}";
|
||||
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
|
||||
{
|
||||
string checkFile;
|
||||
@ -239,7 +239,7 @@ public partial class UnitTestHardCoded
|
||||
[TestMethod]
|
||||
public void TestMethodRenameOld()
|
||||
{
|
||||
string directory = "D:/2-Images-B/Not-Copy-Copy-dd514b88-Results/E) Distance/dd514b88/()";
|
||||
string directory = "D:/1-Images-A/Images-dd514b88-Results/E)Distance/dd514b88/()";
|
||||
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
|
||||
{
|
||||
string checkFile;
|
||||
@ -256,6 +256,41 @@ public partial class UnitTestHardCoded
|
||||
NonThrowTryCatch();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestMethodRenameDup()
|
||||
{
|
||||
string directory;
|
||||
directory = "D:/1-Images-A/Images-dd514b88-Results/E)Distance/dd514b88/()";
|
||||
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
|
||||
{
|
||||
string checkFile;
|
||||
string[] files = Directory.GetFiles(directory, "*.dup", SearchOption.AllDirectories);
|
||||
foreach (string file in files)
|
||||
{
|
||||
checkFile = file[..^4];
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(file, checkFile);
|
||||
}
|
||||
Assert.IsTrue(true);
|
||||
}
|
||||
directory = "D:/1-Images-A/Images-dd514b88-Results/A2)People/dd514b88/{}/!";
|
||||
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
|
||||
{
|
||||
string checkFile;
|
||||
string[] files = Directory.GetFiles(directory, "*.dup", SearchOption.AllDirectories);
|
||||
foreach (string file in files)
|
||||
{
|
||||
checkFile = file[..^4];
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Move(file, checkFile);
|
||||
}
|
||||
Assert.IsTrue(true);
|
||||
}
|
||||
NonThrowTryCatch();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestMethodRename()
|
||||
{
|
||||
@ -278,7 +313,7 @@ public partial class UnitTestHardCoded
|
||||
[TestMethod]
|
||||
public void TestMethodRenameForUnkown()
|
||||
{
|
||||
string directory = "D:/1-Images-A/Images-dd514b88-Results/E) Distance/dd514b88/(RectInt-2023-06-19-less-0.99)";
|
||||
string directory = "D:/1-Images-A/Images-dd514b88-Results/E)Distance/dd514b88/(RectInt-2023-06-19-less-0.99)";
|
||||
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
|
||||
{
|
||||
string[] files = Directory.GetFiles(directory, "*.unk", SearchOption.AllDirectories);
|
||||
@ -291,7 +326,7 @@ public partial class UnitTestHardCoded
|
||||
[TestMethod]
|
||||
public void TestMethodRenameForTicks()
|
||||
{
|
||||
string directory = "D:/1-Images-A/Images-dd514b88-Results/A2) People/dd514b88/([])/ged";
|
||||
string directory = "D:/1-Images-A/Images-dd514b88-Results/A2)People/dd514b88/([])/ged";
|
||||
if (Directory.Exists(Path.GetPathRoot(directory)) && Directory.Exists(directory))
|
||||
{
|
||||
string checkName;
|
||||
|
Loading…
x
Reference in New Issue
Block a user