UPF/Assets/AppleAuth/Extensions/PersonNameExtensions.cs
2023-02-24 22:14:55 +05:30

92 lines
3.8 KiB
C#
Executable File

#if ((UNITY_IOS || UNITY_TVOS || UNITY_STANDALONE_OSX) && !UNITY_EDITOR)
#define NATIVE_PERSON_NAME_COMPONENTS_AVAILABLE
#endif
using AppleAuth.Enums;
using AppleAuth.Interfaces;
namespace AppleAuth.Extensions
{
public static class PersonNameExtensions
{
public static string ToLocalizedString(
this IPersonName personName,
PersonNameFormatterStyle style = PersonNameFormatterStyle.Default,
bool usePhoneticRepresentation = false)
{
#if NATIVE_PERSON_NAME_COMPONENTS_AVAILABLE
var jsonString = JsonStringForPersonName(personName);
var localizedString = PInvoke.AppleAuth_GetPersonNameUsingFormatter(jsonString, (int) style, usePhoneticRepresentation);
if (localizedString != null)
{
return localizedString;
}
#endif
var orderedParts = new System.Collections.Generic.List<string>();
if (string.IsNullOrEmpty(personName.NamePrefix))
orderedParts.Add(personName.NamePrefix);
if (string.IsNullOrEmpty(personName.GivenName))
orderedParts.Add(personName.GivenName);
if (string.IsNullOrEmpty(personName.MiddleName))
orderedParts.Add(personName.MiddleName);
if (string.IsNullOrEmpty(personName.FamilyName))
orderedParts.Add(personName.FamilyName);
if (string.IsNullOrEmpty(personName.NameSuffix))
orderedParts.Add(personName.NameSuffix);
return string.Join(" ", orderedParts.ToArray());
}
#if NATIVE_PERSON_NAME_COMPONENTS_AVAILABLE
private const string StringDictionaryFormat = "\"{0}\": \"{1}\",";
private const string StringObjectFormat = "\"{0}\": {1},";
private static string JsonStringForPersonName(IPersonName personName)
{
if (personName == null)
return null;
var stringBuilder = new System.Text.StringBuilder();
stringBuilder.Append("{");
TryAddKeyValue(StringDictionaryFormat, "_namePrefix", personName.NamePrefix, stringBuilder);
TryAddKeyValue(StringDictionaryFormat, "_givenName", personName.GivenName, stringBuilder);
TryAddKeyValue(StringDictionaryFormat, "_middleName", personName.MiddleName, stringBuilder);
TryAddKeyValue(StringDictionaryFormat, "_familyName", personName.FamilyName, stringBuilder);
TryAddKeyValue(StringDictionaryFormat, "_nameSuffix", personName.NameSuffix, stringBuilder);
TryAddKeyValue(StringDictionaryFormat, "_nickname", personName.Nickname, stringBuilder);
var phoneticRepresentationJson = JsonStringForPersonName(personName.PhoneticRepresentation);
TryAddKeyValue(StringObjectFormat, "_phoneticRepresentation", phoneticRepresentationJson, stringBuilder);
stringBuilder.Append("}");
return stringBuilder.ToString();
}
private static void TryAddKeyValue(string format, string key, string value, System.Text.StringBuilder stringBuilder)
{
if (string.IsNullOrEmpty(value))
return;
stringBuilder.AppendFormat(format, key, value);
}
private static class PInvoke
{
#if UNITY_IOS || UNITY_TVOS
private const string DllName = "__Internal";
#elif UNITY_STANDALONE_OSX
private const string DllName = "MacOSAppleAuthManager";
#endif
[System.Runtime.InteropServices.DllImport(DllName)]
public static extern string AppleAuth_GetPersonNameUsingFormatter(string payload, int style, bool usePhoneticRepresentation);
}
#endif
}
}