More Individually and bug fix
This commit is contained in:
parent
dd2c51a093
commit
4d0739dee6
@ -767,7 +767,7 @@ public partial class DlibDotNet
|
|||||||
{
|
{
|
||||||
int updated = mapLogic.UpdateFromSortingContainers(_Configuration.SaveIndividually, distanceLimits, sortingContainers);
|
int updated = mapLogic.UpdateFromSortingContainers(_Configuration.SaveIndividually, distanceLimits, sortingContainers);
|
||||||
List<SaveContainer> saveContainers = mapLogic.GetSaveContainers(_Configuration.SaveIndividually, dFacesContentDirectory, d2FacePartsContentDirectory, d2FacePartsContentCollectionDirectory, mappingCollection, idToNormalizedRectangleToMapping, useFiltersCounter, sortingContainers.Any());
|
List<SaveContainer> saveContainers = mapLogic.GetSaveContainers(_Configuration.SaveIndividually, dFacesContentDirectory, d2FacePartsContentDirectory, d2FacePartsContentCollectionDirectory, mappingCollection, idToNormalizedRectangleToMapping, useFiltersCounter, sortingContainers.Any());
|
||||||
mapLogic.SaveContainers(filteredFaceDistanceContainers.Length, updated, saveContainers);
|
mapLogic.SaveContainers(_Configuration.SaveIndividually, filteredFaceDistanceContainers.Length, updated, saveContainers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -788,9 +788,12 @@ public partial class DlibDotNet
|
|||||||
string dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()");
|
string dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()");
|
||||||
string d2FacePartsContentDirectory = Path.Combine(d2ResultsFullGroupDirectory, "()");
|
string d2FacePartsContentDirectory = Path.Combine(d2ResultsFullGroupDirectory, "()");
|
||||||
string d2FacePartsContentCollectionDirectory = Path.Combine(d2ResultsFullGroupDirectory, "[()]");
|
string d2FacePartsContentCollectionDirectory = Path.Combine(d2ResultsFullGroupDirectory, "[()]");
|
||||||
|
string dFacesCollectionDirectory = Path.Combine(dResultsFullGroupDirectory, "[]", _Configuration.PropertyConfiguration.ResultAllInOne);
|
||||||
|
if (mappingCollection.Any())
|
||||||
|
{
|
||||||
Shared.Models.Stateless.Methods.IPath.ChangeDateForEmptyDirectories(d2FacePartsContentDirectory, ticks);
|
Shared.Models.Stateless.Methods.IPath.ChangeDateForEmptyDirectories(d2FacePartsContentDirectory, ticks);
|
||||||
Shared.Models.Stateless.Methods.IPath.MakeHiddenIfAllItemsAreHidden(d2FacePartsContentCollectionDirectory);
|
Shared.Models.Stateless.Methods.IPath.MakeHiddenIfAllItemsAreHidden(d2FacePartsContentCollectionDirectory);
|
||||||
string dFacesCollectionDirectory = Path.Combine(dResultsFullGroupDirectory, "[]", _Configuration.PropertyConfiguration.ResultAllInOne);
|
}
|
||||||
Dictionary<int, Dictionary<int, Mapping>> idToNormalizedRectangleToMapping = Map.Models.Stateless.Methods.IMapLogic.GetIdToNormalizedRectangleToFace(mappingCollection);
|
Dictionary<int, Dictionary<int, Mapping>> idToNormalizedRectangleToMapping = Map.Models.Stateless.Methods.IMapLogic.GetIdToNormalizedRectangleToFace(mappingCollection);
|
||||||
if (Directory.Exists(fPhotoPrismContentDirectory))
|
if (Directory.Exists(fPhotoPrismContentDirectory))
|
||||||
F_PhotoPrism.WriteMatches(fPhotoPrismContentDirectory, _Configuration.PersonBirthdayFormat, ticks, distinctFilteredFaces, mapLogic);
|
F_PhotoPrism.WriteMatches(fPhotoPrismContentDirectory, _Configuration.PersonBirthdayFormat, ticks, distinctFilteredFaces, mapLogic);
|
||||||
@ -1057,7 +1060,7 @@ public partial class DlibDotNet
|
|||||||
fPhotoPrismContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(F_PhotoPrism), "()");
|
fPhotoPrismContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(F_PhotoPrism), "()");
|
||||||
fPhotoPrismSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(F_PhotoPrism), "{}");
|
fPhotoPrismSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(F_PhotoPrism), "{}");
|
||||||
propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FileNameExtension, _Configuration.Reverse, aResultsFullGroupDirectory);
|
propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FileNameExtension, _Configuration.Reverse, aResultsFullGroupDirectory);
|
||||||
MapLogic mapLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Configuration.SaveIndividually, _MapConfiguration, _PersonContainers, ticks, a2PeopleSingletonDirectory, eDistanceContentDirectory);
|
MapLogic mapLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, _PersonContainers, ticks, a2PeopleSingletonDirectory, eDistanceContentDirectory);
|
||||||
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
||||||
string message = $") Building Container(s) - {totalSeconds} total second(s)";
|
string message = $") Building Container(s) - {totalSeconds} total second(s)";
|
||||||
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
|
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
|
||||||
@ -1105,6 +1108,9 @@ public partial class DlibDotNet
|
|||||||
int totalNotMapped = mapLogic.UpdateMappingFromPerson(mappingCollection);
|
int totalNotMapped = mapLogic.UpdateMappingFromPerson(mappingCollection);
|
||||||
string json = System.Text.Json.JsonSerializer.Serialize(mappingCollection);
|
string json = System.Text.Json.JsonSerializer.Serialize(mappingCollection);
|
||||||
File.WriteAllText(Path.Combine(eDistanceContentDirectory, $"{ticks}.json"), json);
|
File.WriteAllText(Path.Combine(eDistanceContentDirectory, $"{ticks}.json"), json);
|
||||||
|
for (int i = 1; i < 5; i++)
|
||||||
|
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(eDistanceContentDirectory);
|
||||||
|
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(eDistanceContentDirectory);
|
||||||
foreach (string outputResolution in _Configuration.OutputResolutions)
|
foreach (string outputResolution in _Configuration.OutputResolutions)
|
||||||
{
|
{
|
||||||
if (_PropertyRootExistedBefore)
|
if (_PropertyRootExistedBefore)
|
||||||
|
@ -29,7 +29,8 @@
|
|||||||
"xxxRootDirectory": "D:/2) Images B/Not-Copy-Copy-9b89679",
|
"xxxRootDirectory": "D:/2) Images B/Not-Copy-Copy-9b89679",
|
||||||
"RootDirectory": "D:/1) Images A/Images-9b89679",
|
"RootDirectory": "D:/1) Images A/Images-9b89679",
|
||||||
"xxxxxRootDirectory": "D:/1) Images A/Images-9b89679/Facebook/2023.2 Facebook",
|
"xxxxxRootDirectory": "D:/1) Images A/Images-9b89679/Facebook/2023.2 Facebook",
|
||||||
"SaveIndividually": true,
|
"SaveIndividually": false,
|
||||||
|
"xSaveIndividually": true,
|
||||||
"SaveSortingWithoutPerson": true,
|
"SaveSortingWithoutPerson": true,
|
||||||
"SkipOlderThanDays": null,
|
"SkipOlderThanDays": null,
|
||||||
"xSkipOlderThanDays": 2200,
|
"xSkipOlderThanDays": 2200,
|
||||||
|
@ -28,7 +28,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
private readonly string _EDistanceContentTicksDirectory;
|
private readonly string _EDistanceContentTicksDirectory;
|
||||||
private readonly Shared.Models.Properties.IPropertyConfiguration _PropertyConfiguration;
|
private readonly Shared.Models.Properties.IPropertyConfiguration _PropertyConfiguration;
|
||||||
|
|
||||||
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, bool saveIndividually, Configuration? configuration, PersonContainer[] personContainers, long ticks, string a2PeopleSingletonDirectory, string eDistanceContentDirectory)
|
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, PersonContainer[] personContainers, long ticks, string a2PeopleSingletonDirectory, string eDistanceContentDirectory)
|
||||||
{
|
{
|
||||||
_Ticks = ticks;
|
_Ticks = ticks;
|
||||||
_Configuration = configuration;
|
_Configuration = configuration;
|
||||||
@ -51,12 +51,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory);
|
string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory);
|
||||||
string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, $"({ticks})");
|
string eDistanceContentTicksDirectory = Path.Combine(eDistanceContentDirectory, $"({ticks})");
|
||||||
Dictionary<int, Dictionary<int, PersonContainer[]>> idThenNormalizedRectangleToPersonContainers = new();
|
Dictionary<int, Dictionary<int, PersonContainer[]>> idThenNormalizedRectangleToPersonContainers = new();
|
||||||
if (!saveIndividually)
|
|
||||||
{
|
|
||||||
for (int i = 1; i < 5; i++)
|
|
||||||
_ = IPath.DeleteEmptyDirectories(eDistanceContentDirectory);
|
|
||||||
_ = IPath.DeleteEmptyDirectories(eDistanceContentDirectory);
|
|
||||||
}
|
|
||||||
if (string.IsNullOrEmpty(rootDirectoryParent))
|
if (string.IsNullOrEmpty(rootDirectoryParent))
|
||||||
throw new NullReferenceException(nameof(rootDirectoryParent));
|
throw new NullReferenceException(nameof(rootDirectoryParent));
|
||||||
if (!Directory.Exists(eDistanceContentDirectory))
|
if (!Directory.Exists(eDistanceContentDirectory))
|
||||||
@ -200,12 +194,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveContainers(int totalNotMapped, int? updated, List<SaveContainer> saveContainers)
|
public void SaveContainers(bool saveIndividually, int totalNotMapped, int? updated, List<SaveContainer> saveContainers)
|
||||||
{
|
{
|
||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
string checkFile;
|
string checkFile;
|
||||||
string sourceFile;
|
string sourceFile;
|
||||||
|
List<string> distinct = new();
|
||||||
WindowsShortcut windowsShortcut;
|
WindowsShortcut windowsShortcut;
|
||||||
string[] directories = (from l in saveContainers select l.Directory).Distinct().ToArray();
|
string[] directories = (from l in saveContainers select l.Directory).Distinct().ToArray();
|
||||||
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - _Ticks).TotalSeconds);
|
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - _Ticks).TotalSeconds);
|
||||||
@ -245,6 +240,12 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
if (saveIndividually)
|
||||||
|
{
|
||||||
|
if (distinct.Contains(checkFile))
|
||||||
|
continue;
|
||||||
|
distinct.Add(checkFile);
|
||||||
|
}
|
||||||
if (File.Exists(checkFile))
|
if (File.Exists(checkFile))
|
||||||
continue;
|
continue;
|
||||||
File.Copy(sourceFile, checkFile);
|
File.Copy(sourceFile, checkFile);
|
||||||
@ -414,7 +415,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
{
|
{
|
||||||
if (sortingContainersAny)
|
if (sortingContainersAny)
|
||||||
continue;
|
continue;
|
||||||
mapping.UpdateMappingFromUnknownPerson(new(mapping, new(mapping, mapping.MappingFromLocation)));
|
mapping.UpdateMappingFromUnknownPerson(saveIndividually, new(mapping, new(mapping, mapping.MappingFromLocation)));
|
||||||
if (mapping.SortingContainer is null)
|
if (mapping.SortingContainer is null)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -519,7 +520,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
results.Add(saveContainer);
|
results.Add(saveContainer);
|
||||||
}
|
}
|
||||||
if (!saveIndividually)
|
if (!saveIndividually)
|
||||||
saveContainer = Stateless.MapLogic.GetDebugSaveContainer(directory, mapping.SortingContainer, keyMapping);
|
saveContainer = Stateless.MapLogic.GetDebugSaveContainer(directory, mapping.MappingFromPerson, mapping.SortingContainer, keyMapping);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
(saveContainer, SaveContainer? extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, dFacesContentDirectory, d2FacePartsContentCollectionDirectory, directory, mapping.SortingContainer, keyMapping);
|
(saveContainer, SaveContainer? extraSaveContainer) = Stateless.MapLogic.GetContainers(_Configuration.FacesFileNameExtension, _Configuration.FacePartsFileNameExtension, dFacesContentDirectory, d2FacePartsContentCollectionDirectory, directory, mapping.SortingContainer, keyMapping);
|
||||||
@ -550,9 +551,10 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
int? updated = null;
|
int? updated = null;
|
||||||
bool saveMapped = true;
|
bool saveMapped = true;
|
||||||
int? useFiltersCounter = null;
|
int? useFiltersCounter = null;
|
||||||
|
bool saveIndividually = false;
|
||||||
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, idToNormalizedRectangleToMapping, personKeyToIds, useFiltersCounter, saveMapped, sortingContainersAny: true, saveIndividually: false);
|
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, d2FacePartsContentCollectionDirectory, mappingCollection, idToNormalizedRectangleToMapping, personKeyToIds, useFiltersCounter, saveMapped, sortingContainersAny: true, saveIndividually: false);
|
||||||
SaveContainers(totalNotMapped, updated, saveContainers);
|
SaveContainers(saveIndividually, totalNotMapped, updated, saveContainers);
|
||||||
if (!string.IsNullOrEmpty(_EDistanceContentTicksDirectory) && Directory.Exists(mappingDirectory))
|
if (!string.IsNullOrEmpty(_EDistanceContentTicksDirectory) && Directory.Exists(mappingDirectory))
|
||||||
Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory);
|
Stateless.MapLogic.SaveMappingShortcuts(mappingDirectory);
|
||||||
}
|
}
|
||||||
@ -662,7 +664,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
continue;
|
continue;
|
||||||
if (normalizedRectangleCollectionForA.Contains(sortingContainer.Mapping.MappingFromLocation.NormalizedRectangle))
|
if (normalizedRectangleCollectionForA.Contains(sortingContainer.Mapping.MappingFromLocation.NormalizedRectangle))
|
||||||
continue;
|
continue;
|
||||||
sortingContainer.Mapping.UpdateMappingFromUnknownPerson(sortingContainer);
|
sortingContainer.Mapping.UpdateMappingFromUnknownPerson(saveIndividually, sortingContainer);
|
||||||
normalizedRectangleCollectionForA.Add(sortingContainer.Mapping.MappingFromLocation.NormalizedRectangle);
|
normalizedRectangleCollectionForA.Add(sortingContainer.Mapping.MappingFromLocation.NormalizedRectangle);
|
||||||
result += 1;
|
result += 1;
|
||||||
}
|
}
|
||||||
@ -1017,6 +1019,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
if (_Configuration is null)
|
if (_Configuration is null)
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
throw new NullReferenceException(nameof(_Configuration));
|
||||||
SaveContainer? saveContainer;
|
SaveContainer? saveContainer;
|
||||||
|
bool saveIndividually = false;
|
||||||
List<SaveContainer> saveContainers = new();
|
List<SaveContainer> saveContainers = new();
|
||||||
Stateless.MapLogic.BeforeSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory);
|
Stateless.MapLogic.BeforeSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory);
|
||||||
(int, FileHolder, int, string, string, string, string)[] collection = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory, personContainers, mappingCollection, personKeyToIds);
|
(int, FileHolder, int, string, string, string, string)[] collection = GetCollectionForSaveFilteredOriginalImagesFromJLinks(jLinks, a2PeopleContentDirectory, personContainers, mappingCollection, personKeyToIds);
|
||||||
@ -1027,7 +1030,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
saveContainer = new(imageFileHolder, checkFile, directory);
|
saveContainer = new(imageFileHolder, checkFile, directory);
|
||||||
saveContainers.Add(saveContainer);
|
saveContainers.Add(saveContainer);
|
||||||
}
|
}
|
||||||
SaveContainers(totalNotMapped, null, saveContainers);
|
SaveContainers(saveIndividually, totalNotMapped, null, saveContainers);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<SaveShortcutsForOutputResolutions> GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, Dictionary<long, List<int>> personKeyToIds, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers, Mapping[] mappingCollection)
|
private List<SaveShortcutsForOutputResolutions> GetCollectionForSaveShortcutsForOutputResolutionsPreMapLogic(string eDistanceContentDirectory, Dictionary<long, List<int>> personKeyToIds, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers, Mapping[] mappingCollection)
|
||||||
|
@ -87,7 +87,7 @@ internal abstract class MapLogic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void MoveTo(string actionDirectory, string ticksDirectory, string directory, string personKeyFormatted, string yearDirectoryName, string alphaDirectoryName, string[] files, string[] matchFaceFile)
|
private static void MoveTo(string actionDirectory, string ticksDirectory, string directory, string personKeyFormatted, string yearDirectoryName, string alphaDirectoryName, string[] files, string[] facesFileNames)
|
||||||
{
|
{
|
||||||
string checkFile;
|
string checkFile;
|
||||||
string actionDirectoryName = Path.GetFileName(actionDirectory);
|
string actionDirectoryName = Path.GetFileName(actionDirectory);
|
||||||
@ -96,7 +96,7 @@ internal abstract class MapLogic
|
|||||||
_ = Directory.CreateDirectory(checkDirectory);
|
_ = Directory.CreateDirectory(checkDirectory);
|
||||||
foreach (string file in files)
|
foreach (string file in files)
|
||||||
{
|
{
|
||||||
if (matchFaceFile.Contains(file))
|
if (facesFileNames.Contains(file))
|
||||||
{
|
{
|
||||||
checkFile = Path.Combine(checkDirectory, Path.GetFileName(file));
|
checkFile = Path.Combine(checkDirectory, Path.GetFileName(file));
|
||||||
if (File.Exists(checkFile))
|
if (File.Exists(checkFile))
|
||||||
@ -112,7 +112,7 @@ internal abstract class MapLogic
|
|||||||
{
|
{
|
||||||
string[] files;
|
string[] files;
|
||||||
FileInfo[] collection;
|
FileInfo[] collection;
|
||||||
string[] matchFaceFile;
|
string[] facesFileNames;
|
||||||
string yearDirectoryName;
|
string yearDirectoryName;
|
||||||
string[] yearDirectories;
|
string[] yearDirectories;
|
||||||
string alphaDirectoryName;
|
string alphaDirectoryName;
|
||||||
@ -132,12 +132,20 @@ internal abstract class MapLogic
|
|||||||
personKeyFormatted = Path.GetFileName(personKeyDirectory);
|
personKeyFormatted = Path.GetFileName(personKeyDirectory);
|
||||||
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
foreach (string yearDirectory in yearDirectories)
|
foreach (string yearDirectory in yearDirectories)
|
||||||
|
{
|
||||||
|
yearDirectoryName = Path.GetFileName(yearDirectory);
|
||||||
|
if (yearDirectoryName.StartsWith('='))
|
||||||
|
Directory.Move(yearDirectory, yearDirectory.Replace('=', '~'));
|
||||||
|
}
|
||||||
|
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
|
foreach (string yearDirectory in yearDirectories)
|
||||||
{
|
{
|
||||||
yearDirectoryName = Path.GetFileName(yearDirectory);
|
yearDirectoryName = Path.GetFileName(yearDirectory);
|
||||||
matchDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
matchDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
alphaDirectories = matchDirectories.Where(l => !long.TryParse(Path.GetFileName(l), out long a)).ToArray();
|
alphaDirectories = matchDirectories.Where(l => !long.TryParse(Path.GetFileName(l), out long a)).ToArray();
|
||||||
if (!alphaDirectories.Any())
|
if (!alphaDirectories.Any())
|
||||||
continue;
|
continue;
|
||||||
|
alphaDirectoryName = Path.GetFileName(alphaDirectories[0]);
|
||||||
foreach (string matchDirectory in matchDirectories)
|
foreach (string matchDirectory in matchDirectories)
|
||||||
{
|
{
|
||||||
matchDirectoryName = Path.GetFileName(matchDirectory);
|
matchDirectoryName = Path.GetFileName(matchDirectory);
|
||||||
@ -145,15 +153,15 @@ internal abstract class MapLogic
|
|||||||
if (files.Length != 4)
|
if (files.Length != 4)
|
||||||
continue;
|
continue;
|
||||||
collection = files.Select(l => new FileInfo(l)).ToArray();
|
collection = files.Select(l => new FileInfo(l)).ToArray();
|
||||||
matchFaceFile = (from l in collection where l.Extension == configuration.FacesFileNameExtension && l.Name.Contains(matchDirectoryName) select l.FullName).ToArray();
|
if (IPerson.IsDefaultName(configuration.MappingDefaultName, alphaDirectoryName))
|
||||||
if (!matchFaceFile.Any())
|
facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension select l.FullName).ToArray();
|
||||||
|
else
|
||||||
|
facesFileNames = (from l in collection where l.Extension == configuration.FacesFileNameExtension && l.Name.Contains(matchDirectoryName) select l.FullName).ToArray();
|
||||||
|
if (!facesFileNames.Any())
|
||||||
continue;
|
continue;
|
||||||
alphaDirectoryName = Path.GetFileName(alphaDirectories[0]);
|
|
||||||
personDisplayDirectory = Path.Combine(matchDirectory, alphaDirectoryName);
|
personDisplayDirectory = Path.Combine(matchDirectory, alphaDirectoryName);
|
||||||
if (!Directory.Exists(personDisplayDirectory) || !Directory.Exists(matchDirectory))
|
if (!Directory.Exists(personDisplayDirectory) || !Directory.Exists(matchDirectory))
|
||||||
continue;
|
continue;
|
||||||
if (matchDirectory.Contains('='))
|
|
||||||
continue;
|
|
||||||
_ = System.Diagnostics.Process.Start("explorer", matchDirectory);
|
_ = System.Diagnostics.Process.Start("explorer", matchDirectory);
|
||||||
for (int i = 0; i < int.MaxValue; i++)
|
for (int i = 0; i < int.MaxValue; i++)
|
||||||
{
|
{
|
||||||
@ -161,7 +169,7 @@ internal abstract class MapLogic
|
|||||||
actionDirectories = Directory.GetDirectories(matchDirectory, "*", SearchOption.TopDirectoryOnly).Where(l => l != personDisplayDirectory && !l.EndsWith("Maybe")).ToArray();
|
actionDirectories = Directory.GetDirectories(matchDirectory, "*", SearchOption.TopDirectoryOnly).Where(l => l != personDisplayDirectory && !l.EndsWith("Maybe")).ToArray();
|
||||||
if (actionDirectories.Any())
|
if (actionDirectories.Any())
|
||||||
{
|
{
|
||||||
MoveTo(actionDirectories[0], ticksDirectory, directory, personKeyFormatted, yearDirectoryName, alphaDirectoryName, files, matchFaceFile);
|
MoveTo(actionDirectories[0], ticksDirectory, directory, personKeyFormatted, yearDirectoryName, alphaDirectoryName, files, facesFileNames);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -202,12 +210,12 @@ internal abstract class MapLogic
|
|||||||
foreach (string personKeyDirectory in personKeyDirectories)
|
foreach (string personKeyDirectory in personKeyDirectories)
|
||||||
{
|
{
|
||||||
personKeyFormatted = Path.GetFileName(personKeyDirectory);
|
personKeyFormatted = Path.GetFileName(personKeyDirectory);
|
||||||
if (personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Individually)))
|
isReservedDirectoryName = personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Sorting)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Mapping)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.ManualCopy));
|
||||||
|
if (!isReservedDirectoryName && personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Individually)))
|
||||||
{
|
{
|
||||||
Individually(configuration, ticksDirectory, personKeyDirectory);
|
Individually(configuration, ticksDirectory, personKeyDirectory);
|
||||||
break;
|
throw new Exception($"B) Move personKey directories up one from {nameof(Shared.Models.Stateless.IMapLogic.Sorting)} and delete {nameof(Shared.Models.Stateless.IMapLogic.Sorting)} directory!");
|
||||||
}
|
}
|
||||||
isReservedDirectoryName = personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Sorting)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.Mapping)) || personKeyFormatted.StartsWith(nameof(Shared.Models.Stateless.IMapLogic.ManualCopy));
|
|
||||||
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
foreach (string yearDirectory in yearDirectories)
|
foreach (string yearDirectory in yearDirectories)
|
||||||
{
|
{
|
||||||
@ -454,6 +462,10 @@ internal abstract class MapLogic
|
|||||||
{
|
{
|
||||||
progressBar.Tick();
|
progressBar.Tick();
|
||||||
if (!personKeyFormattedToNewestPersonKeyFormatted.TryGetValue(personKeyFormatted, out newestPersonKeyFormatted))
|
if (!personKeyFormattedToNewestPersonKeyFormatted.TryGetValue(personKeyFormatted, out newestPersonKeyFormatted))
|
||||||
|
{
|
||||||
|
if (!personDisplayDirectoryNames.Any() || IPerson.IsDefaultName(configuration.MappingDefaultName, personDisplayDirectoryNames[^1]))
|
||||||
|
newestPersonKeyFormatted = personKeyFormatted;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
checkFile = $"{mappedFaceFile}.abd";
|
checkFile = $"{mappedFaceFile}.abd";
|
||||||
if (File.Exists(checkFile))
|
if (File.Exists(checkFile))
|
||||||
@ -461,6 +473,7 @@ internal abstract class MapLogic
|
|||||||
File.Move(mappedFaceFile, checkFile);
|
File.Move(mappedFaceFile, checkFile);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
(id, normalizedRectangle) = IMapping.GetConverted(configuration.FacesFileNameExtension, mappedFaceFile);
|
(id, normalizedRectangle) = IMapping.GetConverted(configuration.FacesFileNameExtension, mappedFaceFile);
|
||||||
if (id is null || normalizedRectangle is null)
|
if (id is null || normalizedRectangle is null)
|
||||||
{
|
{
|
||||||
@ -749,13 +762,17 @@ internal abstract class MapLogic
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static SaveContainer GetDebugSaveContainer(string directory, SortingContainer sortingContainer, Mapping mapping)
|
internal static SaveContainer GetDebugSaveContainer(string directory, MappingFromPerson? mappingFromPerson, SortingContainer sortingContainer, Mapping mapping)
|
||||||
{
|
{
|
||||||
SaveContainer result;
|
SaveContainer result;
|
||||||
if (sortingContainer.Mapping.MappingFromLocation is null)
|
if (sortingContainer.Mapping.MappingFromLocation is null)
|
||||||
throw new NullReferenceException(nameof(sortingContainer.Mapping.MappingFromLocation));
|
throw new NullReferenceException(nameof(sortingContainer.Mapping.MappingFromLocation));
|
||||||
FileHolder faceFileHolder = new($"C:/{sortingContainer.Sorting.Id}.{sortingContainer.Sorting.NormalizedRectangle}");
|
FileHolder faceFileHolder = new($"C:/{sortingContainer.Sorting.Id}.{sortingContainer.Sorting.NormalizedRectangle}");
|
||||||
string shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.debug.lnk");
|
string shortcutFile;
|
||||||
|
if (mappingFromPerson is null)
|
||||||
|
shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.{sortingContainer.Sorting.DistancePermyriad}.lnk");
|
||||||
|
else
|
||||||
|
shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.{sortingContainer.Sorting.DistancePermyriad}.lnk");
|
||||||
result = new(directory, faceFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
|
result = new(directory, faceFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -178,11 +178,11 @@ public class Mapping : Properties.IMapping
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateMappingFromUnknownPerson(SortingContainer sortingContainer)
|
public void UpdateMappingFromUnknownPerson(bool saveIndividually, SortingContainer sortingContainer)
|
||||||
{
|
{
|
||||||
_By = Stateless.IMapLogic.Sorting;
|
_By = Stateless.IMapLogic.Sorting;
|
||||||
_SortingContainer = sortingContainer;
|
_SortingContainer = sortingContainer;
|
||||||
_SegmentC = sortingContainer.Sorting.DistancePermyriad.ToString();
|
_SegmentC = !saveIndividually ? null : sortingContainer.Sorting.DistancePermyriad.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateMappingFromPerson(int? approximateYears, string displayDirectoryName, PersonBirthday personBirthday, string segmentB)
|
public void UpdateMappingFromPerson(int? approximateYears, string displayDirectoryName, PersonBirthday personBirthday, string segmentB)
|
||||||
|
@ -3,7 +3,7 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
|||||||
internal abstract class PersonContainer
|
internal abstract class PersonContainer
|
||||||
{
|
{
|
||||||
|
|
||||||
private static string[] GetFiles(string personDisplayDirectory, bool includeRoot)
|
private static string[] GetFiles(string personDisplayDirectory, bool isDefaultName)
|
||||||
{
|
{
|
||||||
List<string> results = new();
|
List<string> results = new();
|
||||||
string[] files;
|
string[] files;
|
||||||
@ -14,8 +14,6 @@ internal abstract class PersonContainer
|
|||||||
string fileNameWithoutExtension;
|
string fileNameWithoutExtension;
|
||||||
string personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory);
|
string personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory);
|
||||||
string[] directories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly);
|
string[] directories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
if (includeRoot)
|
|
||||||
results.AddRange(Directory.GetFiles(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly));
|
|
||||||
foreach (string directory in directories)
|
foreach (string directory in directories)
|
||||||
{
|
{
|
||||||
directoryName = Path.GetFileName(directory);
|
directoryName = Path.GetFileName(directory);
|
||||||
@ -37,7 +35,7 @@ internal abstract class PersonContainer
|
|||||||
throw new NotSupportedException($"Move / Delete <{file}>");
|
throw new NotSupportedException($"Move / Delete <{file}>");
|
||||||
distinct.Add(file);
|
distinct.Add(file);
|
||||||
}
|
}
|
||||||
else if (fileNameWithoutExtension != directoryName)
|
else if (fileNameWithoutExtension != directoryName && !isDefaultName)
|
||||||
{
|
{
|
||||||
checkFile = Path.Combine(directory, $"{fileNameWithoutExtension}{extension}");
|
checkFile = Path.Combine(directory, $"{fileNameWithoutExtension}{extension}");
|
||||||
if (!File.Exists(checkFile))
|
if (!File.Exists(checkFile))
|
||||||
@ -60,7 +58,7 @@ internal abstract class PersonContainer
|
|||||||
return results.ToArray();
|
return results.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string[] GetFiles(string facesFileNameExtension, string personDisplayDirectory, bool includeRoot)
|
private static string[] GetFiles(string facesFileNameExtension, string personDisplayDirectory, bool isDefaultName)
|
||||||
{
|
{
|
||||||
string[] results;
|
string[] results;
|
||||||
int? id;
|
int? id;
|
||||||
@ -87,18 +85,17 @@ internal abstract class PersonContainer
|
|||||||
else
|
else
|
||||||
File.Move(file, checkFile);
|
File.Move(file, checkFile);
|
||||||
}
|
}
|
||||||
results = GetFiles(personDisplayDirectory, includeRoot);
|
results = GetFiles(personDisplayDirectory, isDefaultName);
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<Models.PersonContainer> GetPersonContainersCollections(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary<string, List<string>> individuals, char @char, char numberSign, string personDisplayDirectory, string personDisplayDirectoryName, int? approximateYears, List<(string PersonKeyFormatted, Models.PersonBirthday PersonBirthday)> collection)
|
private static List<Models.PersonContainer> GetPersonContainersCollections(string mappingDefaultName, string personBirthdayFormat, string facesFileNameExtension, char[] personCharacters, Dictionary<string, List<string>> individuals, char @char, char numberSign, string personDisplayDirectory, string personDisplayDirectoryName, bool isDefaultName, int? approximateYears, List<(string PersonKeyFormatted, Models.PersonBirthday PersonBirthday)> collection)
|
||||||
{
|
{
|
||||||
List<Models.PersonContainer> results = new();
|
List<Models.PersonContainer> results = new();
|
||||||
long personKey;
|
long personKey;
|
||||||
string[] matches;
|
string[] matches;
|
||||||
string? directory;
|
string? directory;
|
||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
bool isDefaultName;
|
|
||||||
bool verify = true;
|
bool verify = true;
|
||||||
Models.Person person;
|
Models.Person person;
|
||||||
List<string>? individualsLines = null;
|
List<string>? individualsLines = null;
|
||||||
@ -106,7 +103,7 @@ internal abstract class PersonContainer
|
|||||||
Models.PersonBirthday[] orderedPersonBirthdays;
|
Models.PersonBirthday[] orderedPersonBirthdays;
|
||||||
Models.GenealogicalDataCommunication? genealogicalDataCommunication;
|
Models.GenealogicalDataCommunication? genealogicalDataCommunication;
|
||||||
GenealogicalDataCommunicationLines? genealogicalDataCommunicationLines;
|
GenealogicalDataCommunicationLines? genealogicalDataCommunicationLines;
|
||||||
string[] personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, includeRoot: false);
|
string[] personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, isDefaultName);
|
||||||
foreach ((string personKeyFormatted, Models.PersonBirthday personBirthday) in collection)
|
foreach ((string personKeyFormatted, Models.PersonBirthday personBirthday) in collection)
|
||||||
{
|
{
|
||||||
orderedPersonBirthdays = (from l in collection where !l.PersonKeyFormatted.Contains(numberSign) orderby l.PersonBirthday.Value.Ticks descending select l.PersonBirthday).ToArray();
|
orderedPersonBirthdays = (from l in collection where !l.PersonKeyFormatted.Contains(numberSign) orderby l.PersonBirthday.Value.Ticks descending select l.PersonBirthday).ToArray();
|
||||||
@ -173,6 +170,7 @@ internal abstract class PersonContainer
|
|||||||
{
|
{
|
||||||
List<Models.PersonContainer> results = new();
|
List<Models.PersonContainer> results = new();
|
||||||
string? minusOne;
|
string? minusOne;
|
||||||
|
bool isDefaultName;
|
||||||
int? approximateYears;
|
int? approximateYears;
|
||||||
char numberSign = '#';
|
char numberSign = '#';
|
||||||
List<string?> changes = new();
|
List<string?> changes = new();
|
||||||
@ -186,6 +184,7 @@ internal abstract class PersonContainer
|
|||||||
personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory);
|
personDisplayDirectoryName = Path.GetFileName(personDisplayDirectory);
|
||||||
if (string.IsNullOrEmpty(personDisplayDirectoryName))
|
if (string.IsNullOrEmpty(personDisplayDirectoryName))
|
||||||
continue;
|
continue;
|
||||||
|
isDefaultName = IPerson.IsDefaultName(mappingDefaultName, personDisplayDirectoryName);
|
||||||
approximateYears = Age.GetApproximateYears(personCharacters, personDisplayDirectoryName);
|
approximateYears = Age.GetApproximateYears(personCharacters, personDisplayDirectoryName);
|
||||||
personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly);
|
personKeyDirectories = Directory.GetDirectories(personDisplayDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
collection = PersonBirthday.GetPersonBirthdays(personBirthdayFormat, personKeyDirectories, personDisplayDirectory, personDisplayDirectoryName);
|
collection = PersonBirthday.GetPersonBirthdays(personBirthdayFormat, personKeyDirectories, personDisplayDirectory, personDisplayDirectoryName);
|
||||||
@ -199,10 +198,10 @@ internal abstract class PersonContainer
|
|||||||
if (changes.Any(l => l is not null))
|
if (changes.Any(l => l is not null))
|
||||||
continue;
|
continue;
|
||||||
if (collection.Any())
|
if (collection.Any())
|
||||||
results.AddRange(GetPersonContainersCollections(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, @char, numberSign, personDisplayDirectory, personDisplayDirectoryName, approximateYears, collection));
|
results.AddRange(GetPersonContainersCollections(mappingDefaultName, personBirthdayFormat, facesFileNameExtension, personCharacters, individuals, @char, numberSign, personDisplayDirectory, personDisplayDirectoryName, isDefaultName, approximateYears, collection));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, includeRoot: true);
|
personDisplayDirectoryAllFiles = GetFiles(facesFileNameExtension, personDisplayDirectory, isDefaultName);
|
||||||
personContainer = new(approximateYears, @char, personDisplayDirectoryAllFiles, personDisplayDirectoryName);
|
personContainer = new(approximateYears, @char, personDisplayDirectoryAllFiles, personDisplayDirectoryName);
|
||||||
results.Add(personContainer);
|
results.Add(personContainer);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user