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