CreateTree
This commit is contained in:
parent
cdd3542d72
commit
4bde1ba645
@ -971,7 +971,7 @@ public partial class DlibDotNet
|
|||||||
string file;
|
string file;
|
||||||
List<(long PersonKey, string File)> collection = new();
|
List<(long PersonKey, string File)> collection = new();
|
||||||
List<LocationContainer<MetadataExtractor.Directory>> results = new();
|
List<LocationContainer<MetadataExtractor.Directory>> results = new();
|
||||||
collection.AddRange(Map.Models.Stateless.Methods.IMapLogic.GetDisplayDirectoryAllFiles(_PersonContainers));
|
collection.AddRange(Map.Models.Stateless.Methods.IMapLogic.GetDisplayDirectoryAllFiles(_Faces.FileNameExtension, _PersonContainers));
|
||||||
collection.AddRange(Map.Models.Stateless.Methods.IMapLogic.DeleteEmptyDirectoriesAndGetMappedFaceFiles(_MapConfiguration, _PersonContainers, ticks, a2PeopleContentDirectory, eDistanceContentDirectory));
|
collection.AddRange(Map.Models.Stateless.Methods.IMapLogic.DeleteEmptyDirectoriesAndGetMappedFaceFiles(_MapConfiguration, _PersonContainers, ticks, a2PeopleContentDirectory, eDistanceContentDirectory));
|
||||||
for (int i = 0; i < collection.Count; i++)
|
for (int i = 0; i < collection.Count; i++)
|
||||||
{
|
{
|
||||||
@ -1043,6 +1043,66 @@ public partial class DlibDotNet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void CreateTree(PersonContainer[] personContainers, long ticks, string a2PeopleContentDirectory, Dictionary<long, List<int>> personKeyToIds)
|
||||||
|
{
|
||||||
|
string by;
|
||||||
|
string directory;
|
||||||
|
string[] matches;
|
||||||
|
string[] segments;
|
||||||
|
const int zero = 0;
|
||||||
|
string[] pGedFiles;
|
||||||
|
string personKeyFormatted;
|
||||||
|
List<long> distinct = new();
|
||||||
|
PersonBirthday personBirthday;
|
||||||
|
string rootDirectory = Path.Combine(a2PeopleContentDirectory, $"{ticks}-Tree");
|
||||||
|
List<string> lines = new()
|
||||||
|
{
|
||||||
|
"0 HEAD",
|
||||||
|
"1 SOUR DlibDotNet",
|
||||||
|
$"1 FILE {ticks}",
|
||||||
|
$"1 DATE {new DateTime(ticks):dd MMM yyyy}",
|
||||||
|
"1 DEST ANSTFILE",
|
||||||
|
"1 GEDC",
|
||||||
|
"2 VERS 5.5.1",
|
||||||
|
"2 FORM LINEAGE-LINKED",
|
||||||
|
"1 SUBM @1980-01-17_00@",
|
||||||
|
"2 NAME Mike Phares Jr",
|
||||||
|
"1 SUBN",
|
||||||
|
};
|
||||||
|
foreach (PersonContainer personContainer in personContainers)
|
||||||
|
{
|
||||||
|
if (personContainer.Key is null || personContainer.Birthdays is null || personContainer.Person is null || !personContainer.Birthdays.Any())
|
||||||
|
continue;
|
||||||
|
if (personContainer.DisplayDirectoryName == _Configuration.MappingDefaultName || personContainer.Person.Name.Alias.Value == "Z")
|
||||||
|
continue;
|
||||||
|
if (distinct.Contains(personContainer.Key.Value))
|
||||||
|
continue;
|
||||||
|
distinct.Add(personContainer.Key.Value);
|
||||||
|
if (!personKeyToIds.ContainsKey(personContainer.Key.Value))
|
||||||
|
continue;
|
||||||
|
personBirthday = personContainer.Birthdays[zero];
|
||||||
|
personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
|
||||||
|
by = Shared.Models.Stateless.Methods.IPersonBirthday.IsCounterPersonBirthday(personBirthday) ? _Configuration.PropertyConfiguration.ResultAllInOne : "People";
|
||||||
|
matches = (from l in personContainer.DisplayDirectoryAllFiles where !string.IsNullOrEmpty(personKeyFormatted) && l.Contains(personKeyFormatted) select l).ToArray();
|
||||||
|
if (!matches.Any())
|
||||||
|
continue;
|
||||||
|
pGedFiles = (from l in matches where l.EndsWith(".pged") select l).ToArray();
|
||||||
|
if (!pGedFiles.Any())
|
||||||
|
continue;
|
||||||
|
lines.AddRange(File.ReadAllLines(pGedFiles[0]));
|
||||||
|
segments = personContainer.DisplayDirectoryName.Split(_Configuration.PersonCharacters.ToArray());
|
||||||
|
if (segments.Length < 2)
|
||||||
|
directory = Path.Combine(rootDirectory, $"000 {personKeyFormatted} {personContainer.DisplayDirectoryName}");
|
||||||
|
else
|
||||||
|
directory = Path.Combine(rootDirectory, $"{segments[1].PadLeft(3, '0')} {personKeyFormatted} {personContainer.DisplayDirectoryName}");
|
||||||
|
if (Directory.Exists(directory))
|
||||||
|
continue;
|
||||||
|
_ = Directory.CreateDirectory(directory);
|
||||||
|
}
|
||||||
|
lines.Add("0 TRLR");
|
||||||
|
File.WriteAllLines(Path.Combine(a2PeopleContentDirectory, $"{ticks}.ged"), lines);
|
||||||
|
}
|
||||||
|
|
||||||
private void Search(long ticks, string argZero, string propertyRoot)
|
private void Search(long ticks, string argZero, string propertyRoot)
|
||||||
{
|
{
|
||||||
int t;
|
int t;
|
||||||
@ -1099,8 +1159,10 @@ public partial class DlibDotNet
|
|||||||
propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FileNameExtension, _Configuration.Reverse, aResultsFullGroupDirectory);
|
propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FileNameExtension, _Configuration.Reverse, aResultsFullGroupDirectory);
|
||||||
}
|
}
|
||||||
containers = Shared.Models.Stateless.Methods.IContainer.SortContainers(_Configuration.PropertyConfiguration, _Configuration.IgnoreRelativePaths, _ArgZeroIsConfigurationRootDirectory, argZero, containers);
|
containers = Shared.Models.Stateless.Methods.IContainer.SortContainers(_Configuration.PropertyConfiguration, _Configuration.IgnoreRelativePaths, _ArgZeroIsConfigurationRootDirectory, argZero, containers);
|
||||||
MapLogic mapLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory);
|
MapLogic mapLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, _PersonContainers, ticks, a2PeopleSingletonDirectory, eDistanceContentDirectory);
|
||||||
personKeyToIds = mapLogic.GetPersonKeyToIds();
|
personKeyToIds = mapLogic.GetPersonKeyToIds();
|
||||||
|
if (a2PeopleContentDirectory is not null)
|
||||||
|
CreateTree(_PersonContainers, ticks, a2PeopleContentDirectory, personKeyToIds);
|
||||||
fileNameToCollection = !Directory.Exists(fPhotoPrismSingletonDirectory) ? fileNameToCollection = new() : F_PhotoPrism.GetFileNameToCollection(fPhotoPrismSingletonDirectory);
|
fileNameToCollection = !Directory.Exists(fPhotoPrismSingletonDirectory) ? fileNameToCollection = new() : F_PhotoPrism.GetFileNameToCollection(fPhotoPrismSingletonDirectory);
|
||||||
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers = GetDictionary(ticks, a2PeopleContentDirectory, eDistanceContentDirectory);
|
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers = GetDictionary(ticks, a2PeopleContentDirectory, eDistanceContentDirectory);
|
||||||
FullDoWork(argZero, propertyRoot, ticks, aResultsFullGroupDirectory, bResultsFullGroupDirectory, t, containers, propertyLogic, metadata, eDistanceContentDirectory, fileNameToCollection, idToLocationContainers, mapLogic);
|
FullDoWork(argZero, propertyRoot, ticks, aResultsFullGroupDirectory, bResultsFullGroupDirectory, t, containers, propertyLogic, metadata, eDistanceContentDirectory, fileNameToCollection, idToLocationContainers, mapLogic);
|
||||||
@ -1113,8 +1175,6 @@ 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);
|
||||||
if (a2PeopleContentDirectory is not null && false)
|
|
||||||
mapLogic.CreateTree(ticks, a2PeopleContentDirectory);
|
|
||||||
foreach (string outputResolution in _Configuration.OutputResolutions)
|
foreach (string outputResolution in _Configuration.OutputResolutions)
|
||||||
{
|
{
|
||||||
if (_PropertyRootExistedBefore || container is not null)
|
if (_PropertyRootExistedBefore || container is not null)
|
||||||
|
@ -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, Configuration? configuration, long ticks, PersonContainer[] personContainers, 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;
|
||||||
@ -102,37 +102,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CreateTree(long ticks, string a2PeopleContentDirectory)
|
|
||||||
{
|
|
||||||
if (_Configuration is null)
|
|
||||||
throw new NullReferenceException(nameof(_Configuration));
|
|
||||||
string by;
|
|
||||||
string directory;
|
|
||||||
string[] segments;
|
|
||||||
const int zero = 0;
|
|
||||||
string personKeyFormatted;
|
|
||||||
PersonBirthday personBirthday;
|
|
||||||
string rootDirectory = Path.Combine(a2PeopleContentDirectory, $"{ticks}-Tree");
|
|
||||||
foreach (KeyValuePair<long, PersonContainer> personKeyToPersonContainer in _PersonKeyToPersonContainer)
|
|
||||||
{
|
|
||||||
if (personKeyToPersonContainer.Value.Key is null || personKeyToPersonContainer.Value.Birthdays is null || !personKeyToPersonContainer.Value.Birthdays.Any())
|
|
||||||
continue;
|
|
||||||
if (personKeyToPersonContainer.Value.DisplayDirectoryName == _Configuration.MappingDefaultName)
|
|
||||||
continue;
|
|
||||||
personBirthday = personKeyToPersonContainer.Value.Birthdays[zero];
|
|
||||||
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
|
|
||||||
by = IPersonBirthday.IsCounterPersonBirthday(personBirthday) ? _PropertyConfiguration.ResultAllInOne : "People";
|
|
||||||
segments = personKeyToPersonContainer.Value.DisplayDirectoryName.Split(_Configuration.PersonCharacters.ToArray());
|
|
||||||
if (segments.Length < 2)
|
|
||||||
directory = Path.Combine(rootDirectory, $"000 {personKeyFormatted} {personKeyToPersonContainer.Value.DisplayDirectoryName}");
|
|
||||||
else
|
|
||||||
directory = Path.Combine(rootDirectory, $"{segments[1].PadLeft(3, '0')} {personKeyFormatted} {personKeyToPersonContainer.Value.DisplayDirectoryName}");
|
|
||||||
if (Directory.Exists(directory))
|
|
||||||
continue;
|
|
||||||
_ = Directory.CreateDirectory(directory);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Dictionary<long, List<int>> GetPersonKeyToIds()
|
public Dictionary<long, List<int>> GetPersonKeyToIds()
|
||||||
{
|
{
|
||||||
Dictionary<long, List<int>> results = new();
|
Dictionary<long, List<int>> results = new();
|
||||||
|
@ -172,7 +172,7 @@ internal abstract class MapLogic
|
|||||||
}
|
}
|
||||||
foreach (string file in files)
|
foreach (string file in files)
|
||||||
{
|
{
|
||||||
if (file.EndsWith(".lnk") || file.EndsWith(".json"))
|
if (file.EndsWith(".lnk"))
|
||||||
continue;
|
continue;
|
||||||
(id, normalizedRectangle) = IMapping.GetConverted(configuration.FacesFileNameExtension, file);
|
(id, normalizedRectangle) = IMapping.GetConverted(configuration.FacesFileNameExtension, file);
|
||||||
if (id is null || normalizedRectangle is null)
|
if (id is null || normalizedRectangle is null)
|
||||||
@ -281,7 +281,7 @@ internal abstract class MapLogic
|
|||||||
{
|
{
|
||||||
PersonBirthday? personBirthday;
|
PersonBirthday? personBirthday;
|
||||||
PersonContainer[] distinctPersonContainers;
|
PersonContainer[] distinctPersonContainers;
|
||||||
List<(long, PersonContainer)> collection = GetDistinctCollection(configuration, personContainers, personKeyToPersonContainerCollection, personKeyFormattedToPersonContainer);
|
(long, PersonContainer)[] collection = GetDistinctCollection(configuration, personContainers, personKeyToPersonContainerCollection, personKeyFormattedToPersonContainer);
|
||||||
foreach ((long personKey, PersonContainer personContainer) in collection)
|
foreach ((long personKey, PersonContainer personContainer) in collection)
|
||||||
personKeyToPersonContainer.Add(personKey, personContainer);
|
personKeyToPersonContainer.Add(personKey, personContainer);
|
||||||
Dictionary<int, Dictionary<int, List<PersonContainer>>> idThenNormalizedRectangleToPersonContainerCollection = new();
|
Dictionary<int, Dictionary<int, List<PersonContainer>>> idThenNormalizedRectangleToPersonContainerCollection = new();
|
||||||
@ -325,11 +325,12 @@ internal abstract class MapLogic
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<(long, PersonContainer)> GetDistinctCollection(Configuration configuration, IEnumerable<PersonContainer> personContainers, Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection, Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer)
|
private static (long, PersonContainer)[] GetDistinctCollection(Configuration configuration, IEnumerable<PersonContainer> personContainers, Dictionary<long, List<PersonContainer>> personKeyToPersonContainerCollection, Dictionary<string, PersonContainer> personKeyFormattedToPersonContainer)
|
||||||
{
|
{
|
||||||
List<(long, PersonContainer)> results = new();
|
(long, PersonContainer)[] results;
|
||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
string newestPersonKeyFormatted;
|
string newestPersonKeyFormatted;
|
||||||
|
List<(long PersonKey, PersonContainer PersonContainer)> collection = new();
|
||||||
foreach (PersonContainer personContainer in personContainers)
|
foreach (PersonContainer personContainer in personContainers)
|
||||||
{
|
{
|
||||||
if (personContainer.Key is null)
|
if (personContainer.Key is null)
|
||||||
@ -345,8 +346,9 @@ internal abstract class MapLogic
|
|||||||
{
|
{
|
||||||
if (keyValuePair.Value.Count != 1 && (from l in keyValuePair.Value select l.DisplayDirectoryName).Distinct().Count() != 1)
|
if (keyValuePair.Value.Count != 1 && (from l in keyValuePair.Value select l.DisplayDirectoryName).Distinct().Count() != 1)
|
||||||
throw new NotSupportedException(keyValuePair.Value[zero].DisplayDirectoryName);
|
throw new NotSupportedException(keyValuePair.Value[zero].DisplayDirectoryName);
|
||||||
results.Add(new(keyValuePair.Key, keyValuePair.Value[zero]));
|
collection.Add(new(keyValuePair.Key, keyValuePair.Value[zero]));
|
||||||
}
|
}
|
||||||
|
results = (from l in collection orderby l.PersonKey descending select (l.PersonKey, l.PersonContainer)).ToArray();
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -694,7 +696,7 @@ internal abstract class MapLogic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static List<(long, string)> GetDisplayDirectoryAllFiles(PersonContainer[] personContainers)
|
internal static List<(long, string)> GetDisplayDirectoryAllFiles(string fileNameExtension, PersonContainer[] personContainers)
|
||||||
{
|
{
|
||||||
List<(long, string)> results = new();
|
List<(long, string)> results = new();
|
||||||
List<string> distinct = new();
|
List<string> distinct = new();
|
||||||
@ -704,7 +706,7 @@ internal abstract class MapLogic
|
|||||||
continue;
|
continue;
|
||||||
foreach (string displayDirectoryAllFile in personContainer.DisplayDirectoryAllFiles)
|
foreach (string displayDirectoryAllFile in personContainer.DisplayDirectoryAllFiles)
|
||||||
{
|
{
|
||||||
if (displayDirectoryAllFile.EndsWith(".json"))
|
if (!displayDirectoryAllFile.EndsWith(fileNameExtension))
|
||||||
continue;
|
continue;
|
||||||
if (distinct.Contains(displayDirectoryAllFile))
|
if (distinct.Contains(displayDirectoryAllFile))
|
||||||
continue;
|
continue;
|
||||||
|
@ -8,10 +8,10 @@ public interface IMapLogic
|
|||||||
static Dictionary<int, List<long>> GetIdToPersonKeys(Dictionary<long, List<int>> personKeyToIds) =>
|
static Dictionary<int, List<long>> GetIdToPersonKeys(Dictionary<long, List<int>> personKeyToIds) =>
|
||||||
MapLogic.GetIdToPersonKeys(personKeyToIds);
|
MapLogic.GetIdToPersonKeys(personKeyToIds);
|
||||||
|
|
||||||
List<(long, string)> TestStatic_GetDisplayDirectoryAllFiles(Shared.Models.PersonContainer[] personContainers) =>
|
List<(long, string)> TestStatic_GetDisplayDirectoryAllFiles(string fileNameExtension, Shared.Models.PersonContainer[] personContainers) =>
|
||||||
GetDisplayDirectoryAllFiles(personContainers);
|
GetDisplayDirectoryAllFiles(fileNameExtension, personContainers);
|
||||||
static List<(long, string)> GetDisplayDirectoryAllFiles(Shared.Models.PersonContainer[] personContainers) =>
|
static List<(long, string)> GetDisplayDirectoryAllFiles(string fileNameExtension, Shared.Models.PersonContainer[] personContainers) =>
|
||||||
MapLogic.GetDisplayDirectoryAllFiles(personContainers);
|
MapLogic.GetDisplayDirectoryAllFiles(fileNameExtension, personContainers);
|
||||||
|
|
||||||
Shared.Models.Mapping[] TestStatic_GetSelectedMappingCollection(List<Shared.Models.Face> distinctFilteredFaces) =>
|
Shared.Models.Mapping[] TestStatic_GetSelectedMappingCollection(List<Shared.Models.Face> distinctFilteredFaces) =>
|
||||||
GetSelectedMappingCollection(distinctFilteredFaces);
|
GetSelectedMappingCollection(distinctFilteredFaces);
|
||||||
|
@ -13,11 +13,11 @@ public interface IPerson
|
|||||||
Models.Person TestStatic_GetPerson(char[] personCharacters, string personDisplayDirectoryName, long personKey, Models.PersonBirthday personBirthday) =>
|
Models.Person TestStatic_GetPerson(char[] personCharacters, string personDisplayDirectoryName, long personKey, Models.PersonBirthday personBirthday) =>
|
||||||
GetPerson(personCharacters, personDisplayDirectoryName, personKey, personBirthday);
|
GetPerson(personCharacters, personDisplayDirectoryName, personKey, personBirthday);
|
||||||
static Models.Person GetPerson(char[] personCharacters, string personDisplayDirectoryName, long personKey, Models.PersonBirthday personBirthday) =>
|
static Models.Person GetPerson(char[] personCharacters, string personDisplayDirectoryName, long personKey, Models.PersonBirthday personBirthday) =>
|
||||||
Person.GetPerson(personKey, personBirthday, personDisplayDirectoryName.Split(personCharacters));
|
Person.GetPerson(Array.Empty<string>(), null, personKey, personBirthday, personDisplayDirectoryName.Split(personCharacters));
|
||||||
|
|
||||||
Models.Person TestStatic_GetPerson(long personKey, string[] segments) =>
|
Models.Person TestStatic_GetPerson(string[] personDisplayDirectoryAllFiles, string personKeyFormatted, long personKey, string[] segments) =>
|
||||||
GetPerson(personKey, segments);
|
GetPerson(personDisplayDirectoryAllFiles, personKeyFormatted, personKey, segments);
|
||||||
static Models.Person GetPerson(long personKey, string[] segments) =>
|
static Models.Person GetPerson(string[] personDisplayDirectoryAllFiles, string personKeyFormatted, long personKey, string[] segments) =>
|
||||||
Person.GetPerson(personKey, IPersonBirthday.GetPersonBirthday(personKey), segments);
|
Person.GetPerson(personDisplayDirectoryAllFiles, personKeyFormatted, personKey, IPersonBirthday.GetPersonBirthday(personKey), segments);
|
||||||
|
|
||||||
}
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||||
|
|
||||||
internal abstract class Person
|
internal abstract class Person
|
||||||
@ -15,7 +17,42 @@ internal abstract class Person
|
|||||||
return new(personBirthday, personKeyFormatted);
|
return new(personBirthday, personKeyFormatted);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static Models.Person GetPerson(long personKey, Models.PersonBirthday personBirthday, string[] segments)
|
private static void WriteGedFile(string? personKeyFormatted, Models.PersonBirthday personBirthday, Models.PersonName name, string[] matches)
|
||||||
|
{
|
||||||
|
string[] pGedFiles = (from l in matches where l.EndsWith(".pged") select l).ToArray();
|
||||||
|
if (!pGedFiles.Any())
|
||||||
|
{
|
||||||
|
StringBuilder stringBuilder = new();
|
||||||
|
_ = stringBuilder.Append("0 @I").Append(personKeyFormatted).AppendLine("@ INDI");
|
||||||
|
_ = stringBuilder.Append("1 NAME ").Append(name.First.Value).Append(" /").Append(name.Last.Value).AppendLine("/");
|
||||||
|
if (!string.IsNullOrEmpty(name.First.Value))
|
||||||
|
_ = stringBuilder.Append("2 GIVN ").AppendLine(name.First.Value);
|
||||||
|
if (!string.IsNullOrEmpty(name.Last.Value))
|
||||||
|
_ = stringBuilder.Append("2 SURN ").AppendLine(name.Last.Value);
|
||||||
|
if (!string.IsNullOrEmpty(name.Alias.Value))
|
||||||
|
{
|
||||||
|
_ = stringBuilder.Append("2 NICK ").AppendLine(name.Alias.Value);
|
||||||
|
if (name.Alias.Value.Contains(" Jr"))
|
||||||
|
_ = stringBuilder.Append("2 NSFX ").AppendLine("Jr");
|
||||||
|
else if (name.Alias.Value.Contains(" Sr"))
|
||||||
|
_ = stringBuilder.Append("2 NSFX ").AppendLine("Sr");
|
||||||
|
}
|
||||||
|
_ = stringBuilder.AppendLine("1 SEX U");
|
||||||
|
if (!IPersonBirthday.IsCounterPersonBirthday(personBirthday))
|
||||||
|
{
|
||||||
|
_ = stringBuilder.AppendLine("1 BIRT");
|
||||||
|
_ = stringBuilder.Append("2 DATE ").AppendLine(personBirthday.Value.ToString("dd MMM yyyy"));
|
||||||
|
}
|
||||||
|
string? directory = Path.GetDirectoryName(matches[0]);
|
||||||
|
if (directory is null)
|
||||||
|
throw new Exception();
|
||||||
|
if (!Directory.Exists(directory))
|
||||||
|
_ = Directory.CreateDirectory(directory);
|
||||||
|
File.WriteAllText(Path.Combine(directory, $"{personKeyFormatted}.pged"), stringBuilder.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static Models.Person GetPerson(string[] personDisplayDirectoryAllFiles, string? personKeyFormatted, long personKey, Models.PersonBirthday personBirthday, string[] segments)
|
||||||
{
|
{
|
||||||
Models.Person result;
|
Models.Person result;
|
||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
@ -26,6 +63,9 @@ internal abstract class Person
|
|||||||
List<Models.PersonComment> comments = new();
|
List<Models.PersonComment> comments = new();
|
||||||
List<Models.PersonAddress> addresses = new();
|
List<Models.PersonAddress> addresses = new();
|
||||||
Models.PersonName name = PersonName.Create(segments[zero]);
|
Models.PersonName name = PersonName.Create(segments[zero]);
|
||||||
|
string[] matches = (from l in personDisplayDirectoryAllFiles where !string.IsNullOrEmpty(personKeyFormatted) && l.Contains(personKeyFormatted) select l).ToArray();
|
||||||
|
if (matches.Any())
|
||||||
|
WriteGedFile(personKeyFormatted, personBirthday, name, matches);
|
||||||
result = new(id, personBirthday, name, comments, urls, numbers, emails, addresses);
|
result = new(id, personBirthday, name, comments, urls, numbers, emails, addresses);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ internal abstract class PersonBirthday
|
|||||||
internal static bool IsCounterPersonBirthday(Models.PersonBirthday personBirthday)
|
internal static bool IsCounterPersonBirthday(Models.PersonBirthday personBirthday)
|
||||||
{
|
{
|
||||||
bool result;
|
bool result;
|
||||||
if (personBirthday.Value.Year < 1826)
|
if (personBirthday.Value.Year < 1809)
|
||||||
result = true;
|
result = true;
|
||||||
else
|
else
|
||||||
result = false;
|
result = false;
|
||||||
|
@ -15,7 +15,7 @@ internal abstract class PersonContainer
|
|||||||
if (personDisplayDirectoryAllFile.EndsWith(".lnk"))
|
if (personDisplayDirectoryAllFile.EndsWith(".lnk"))
|
||||||
continue;
|
continue;
|
||||||
(id, normalizedRectangle) = IMapping.GetConverted(facesFileNameExtension, personDisplayDirectoryAllFile);
|
(id, normalizedRectangle) = IMapping.GetConverted(facesFileNameExtension, personDisplayDirectoryAllFile);
|
||||||
if (id is not null && normalizedRectangle is not null && !personDisplayDirectoryAllFile.EndsWith(".json"))
|
if (id is not null && normalizedRectangle is not null)
|
||||||
continue;
|
continue;
|
||||||
checkDirectory = Path.GetDirectoryName(personDisplayDirectoryAllFile);
|
checkDirectory = Path.GetDirectoryName(personDisplayDirectoryAllFile);
|
||||||
if (string.IsNullOrEmpty(checkDirectory))
|
if (string.IsNullOrEmpty(checkDirectory))
|
||||||
@ -55,7 +55,7 @@ internal abstract class PersonContainer
|
|||||||
continue;
|
continue;
|
||||||
personKey = orderedPersonBirthdays[zero].Value.Ticks;
|
personKey = orderedPersonBirthdays[zero].Value.Ticks;
|
||||||
}
|
}
|
||||||
person = IPerson.GetPerson(personKey, segments);
|
person = IPerson.GetPerson(personDisplayDirectoryAllFiles, personKeyFormatted, personKey, segments);
|
||||||
personContainer = new(approximateYears, @char, person, orderedPersonBirthdays, personDisplayDirectoryAllFiles, personDisplayDirectoryName, personKey);
|
personContainer = new(approximateYears, @char, person, orderedPersonBirthdays, personDisplayDirectoryAllFiles, personDisplayDirectoryName, personKey);
|
||||||
results.Add(new(personKey, personContainer));
|
results.Add(new(personKey, personContainer));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user