Fixed AOT warnings

This commit is contained in:
Mike Phares 2023-08-21 09:20:09 -07:00
parent df729431d8
commit 096262b2eb
2 changed files with 48 additions and 1205 deletions

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,7 @@ using Microsoft.Extensions.Logging;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Globalization; using System.Globalization;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
namespace File_Folder_Helper.Helpers; namespace File_Folder_Helper.Helpers;
@ -44,6 +45,18 @@ internal static partial class HelperGenealogicalDataCommunication
long PersonKey, long PersonKey,
string? LineTwo); string? LineTwo);
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(ReadOnlyCollection<ReadOnlyCollection<string>>))]
internal partial class CollectionSourceGenerationContext : JsonSerializerContext
{
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(ReadOnlyDictionary<string, ReadOnlyCollection<ReadOnlyCollection<string>>>))]
internal partial class DictionarySourceGenerationContext : JsonSerializerContext
{
}
private static string? GetFaceBook(Person person) => private static string? GetFaceBook(Person person) =>
person.Birth?.Continue.Where(l => !l.Contains("profile.php?id=") && l.StartsWith("https://www.facebook.com/")).Select(l => l[25..].Split('/')[0]).FirstOrDefault(); person.Birth?.Continue.Where(l => !l.Contains("profile.php?id=") && l.StartsWith("https://www.facebook.com/")).Select(l => l[25..].Split('/')[0]).FirstOrDefault();
@ -58,24 +71,41 @@ internal static partial class HelperGenealogicalDataCommunication
return new(results); return new(results);
} }
private static Dictionary<string, ReadOnlyCollection<ReadOnlyCollection<object?>>> Convert(Dictionary<string, List<ReadOnlyCollection<object?>>> keyValuePairs) private static Dictionary<string, ReadOnlyCollection<ReadOnlyCollection<string>>> Convert(Dictionary<string, List<ReadOnlyCollection<string>>> keyValuePairs)
{ {
Dictionary<string, ReadOnlyCollection<ReadOnlyCollection<object?>>> results = new(); Dictionary<string, ReadOnlyCollection<ReadOnlyCollection<string>>> results = new();
foreach (KeyValuePair<string, List<ReadOnlyCollection<object?>>> keyValuePair in keyValuePairs) foreach (KeyValuePair<string, List<ReadOnlyCollection<string>>> keyValuePair in keyValuePairs)
results.Add(keyValuePair.Key, new(keyValuePair.Value)); results.Add(keyValuePair.Key, new(keyValuePair.Value));
return new(results); return new(results);
} }
private static ReadOnlyCollection<object?> GetObjectCollection(Person? person) private static ReadOnlyCollection<string> GetObjectCollection(Person? person)
{ {
List<object?> results; List<string> results;
if (person is null) if (person is null)
results = new() { "Id", "First-Name", "Last-Name", "Birth-Date", "Sex", "Address", "City", "State", "Zip", "Phone", "E-mail", "Facebook", "Facebook-Id", "Comment", "U-Id" }; results = new() { "Id", "First-Name", "Last-Name", "Birth-Date", "Sex", "Address", "City", "State", "Zip", "Phone", "E-mail", "Facebook", "Facebook-Id", "Comment", "U-Id" };
else else
{ {
string? facebook = GetFaceBook(person); string? facebook = GetFaceBook(person);
string? facebookId = GetFaceBookId(person); string? facebookId = GetFaceBookId(person);
results = new() { person.Id, person.Name?.Given, person.Name?.Sur, person.Birth?.Date.ToString(), person.Sex, null, null, "NM", null, null, null, facebook, facebookId, null, person.UId }; results = new()
{
person.Id.ToString(),
string.Concat(person.Name?.Given),
string.Concat(person.Name?.Sur),
string.Concat(person.Birth?.Date.ToString()),
string.Concat(person.Sex),
string.Empty,
string.Empty,
"NM",
string.Empty,
string.Empty,
string.Empty,
string.Concat(facebook),
string.Concat(facebookId),
string.Empty,
string.Concat(person.UId)
};
} }
return new(results); return new(results);
} }
@ -103,11 +133,11 @@ internal static partial class HelperGenealogicalDataCommunication
return result; return result;
} }
private static Dictionary<string, List<ReadOnlyCollection<object?>>> Convert(ReadOnlyCollection<string> distinctSortedKKeys) private static Dictionary<string, List<ReadOnlyCollection<string>>> Convert(ReadOnlyCollection<string> distinctSortedKKeys)
{ {
Dictionary<string, List<ReadOnlyCollection<object?>>> results = new(); Dictionary<string, List<ReadOnlyCollection<string>>> results = new();
ReadOnlyCollection<object?> collection; ReadOnlyCollection<string> collection;
List<ReadOnlyCollection<object?>>? objectCollection; List<ReadOnlyCollection<string>>? objectCollection;
foreach (string key in distinctSortedKKeys) foreach (string key in distinctSortedKKeys)
{ {
if (results.ContainsKey(key)) if (results.ContainsKey(key))
@ -769,14 +799,14 @@ internal static partial class HelperGenealogicalDataCommunication
return results; return results;
} }
private static ReadOnlyDictionary<string, ReadOnlyCollection<ReadOnlyCollection<object?>>> GetKeyValuePairs(List<Family> familyCollection, char personTitleFilter) private static ReadOnlyDictionary<string, ReadOnlyCollection<ReadOnlyCollection<string>>> GetKeyValuePairs(List<Family> familyCollection, char personTitleFilter)
{ {
Dictionary<string, ReadOnlyCollection<ReadOnlyCollection<object?>>> results; Dictionary<string, ReadOnlyCollection<ReadOnlyCollection<string>>> results;
Dictionary<string, List<ReadOnlyCollection<object?>>> keyValuePairs; Dictionary<string, List<ReadOnlyCollection<string>>> keyValuePairs;
string id; string id;
string key; string key;
ReadOnlyCollection<object?> collection; ReadOnlyCollection<string> collection;
List<ReadOnlyCollection<object?>>? objectCollection; List<ReadOnlyCollection<string>>? objectCollection;
ReadOnlyCollection<string> distinctSortedKeys = GetDistinctSortedKeys(familyCollection, personTitleFilter); ReadOnlyCollection<string> distinctSortedKeys = GetDistinctSortedKeys(familyCollection, personTitleFilter);
keyValuePairs = Convert(distinctSortedKeys); keyValuePairs = Convert(distinctSortedKeys);
foreach (Family family in familyCollection) foreach (Family family in familyCollection)
@ -801,19 +831,18 @@ internal static partial class HelperGenealogicalDataCommunication
string json; string json;
if (people.Count != genealogicalDataCommunicationCollections.IndividualsToLines.Count) if (people.Count != genealogicalDataCommunicationCollections.IndividualsToLines.Count)
throw new NotSupportedException(); throw new NotSupportedException();
JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true }; ReadOnlyDictionary<string, ReadOnlyCollection<ReadOnlyCollection<string>>> keyValuePairs;
ReadOnlyDictionary<string, ReadOnlyCollection<ReadOnlyCollection<object?>>> keyValuePairs;
json = JsonSerializer.Serialize(new(people), PeopleSourceGenerationContext.Default.DictionaryInt64Person); json = JsonSerializer.Serialize(new(people), PeopleSourceGenerationContext.Default.DictionaryInt64Person);
File.WriteAllText(Path.Combine(input.GenealogicalDataCommunicationDirectory, "people.json"), json); File.WriteAllText(Path.Combine(input.GenealogicalDataCommunicationDirectory, "people.json"), json);
Dictionary<long, Person>? result = JsonSerializer.Deserialize(json, PeopleSourceGenerationContext.Default.DictionaryInt64Person); Dictionary<long, Person>? result = JsonSerializer.Deserialize(json, PeopleSourceGenerationContext.Default.DictionaryInt64Person);
if (result is null) if (result is null)
throw new NullReferenceException(nameof(result)); throw new NullReferenceException(nameof(result));
json = JsonSerializer.Serialize(genealogicalDataCommunicationCollections.FamilyGroupLines, jsonSerializerOptions); json = JsonSerializer.Serialize(genealogicalDataCommunicationCollections.FamilyGroupLines, CollectionSourceGenerationContext.Default.ReadOnlyCollectionReadOnlyCollectionString);
File.WriteAllText(Path.Combine(input.GenealogicalDataCommunicationDirectory, "family.json"), json); File.WriteAllText(Path.Combine(input.GenealogicalDataCommunicationDirectory, "family.json"), json);
foreach (char personTitleFilter in appSettings.PersonTitleFilters) foreach (char personTitleFilter in appSettings.PersonTitleFilters)
{ {
keyValuePairs = GetKeyValuePairs(familyCollection, personTitleFilter); keyValuePairs = GetKeyValuePairs(familyCollection, personTitleFilter);
json = JsonSerializer.Serialize(keyValuePairs, jsonSerializerOptions); json = JsonSerializer.Serialize(keyValuePairs, DictionarySourceGenerationContext.Default.ReadOnlyDictionaryStringReadOnlyCollectionReadOnlyCollectionString);
File.WriteAllText(Path.Combine(input.GenealogicalDataCommunicationDirectory, $"{personTitleFilter}.json"), json); File.WriteAllText(Path.Combine(input.GenealogicalDataCommunicationDirectory, $"{personTitleFilter}.json"), json);
} }
} }