r2mods/ilspy_dump/ror2_csproj/RoR2.UI.MainMenu/SignupMainMenuScreen.cs

170 lines
4.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Net;
using Facepunch.Steamworks;
using HGsignup.Service;
using TMPro;
using UnityEngine;
namespace RoR2.UI.MainMenu;
public class SignupMainMenuScreen : BaseMainMenuScreen
{
private const string environment = "prod";
private const string title = "Canary";
private static string viewableName = "Signup";
[SerializeField]
private TMP_InputField emailInput;
[SerializeField]
private HGButton submitButton;
[SerializeField]
private HGButton backButton;
[SerializeField]
private HGTextMeshProUGUI successText;
[SerializeField]
private HGTextMeshProUGUI failureText;
[SerializeField]
private HGTextMeshProUGUI waitingText;
[SerializeField]
private HGGamepadInputEvent backGamepadInputEvent;
private SignupClient signupClient;
private string email;
private bool awaitingResponse;
private HashSet<string> successfulEmailSubmissions;
[SystemInitializer(new Type[] { })]
private static void Init()
{
ViewablesCatalog.AddNodeToRoot(new ViewablesCatalog.Node(viewableName, isFolder: false)
{
shouldShowUnviewed = CheckViewable
});
}
private static bool CheckViewable(UserProfile userProfile)
{
return !userProfile.HasViewedViewable("/" + viewableName);
}
private new void Awake()
{
signupClient = new SignupClient("prod");
successfulEmailSubmissions = new HashSet<string>();
}
private new void OnEnable()
{
waitingText?.gameObject?.SetActive(value: false);
successText?.gameObject?.SetActive(value: false);
failureText?.gameObject?.SetActive(value: false);
if ((bool)backGamepadInputEvent)
{
backGamepadInputEvent.enabled = true;
}
}
private new void Update()
{
base.Update();
if ((bool)submitButton)
{
if ((bool)emailInput && SignupClient.IsEmailValid(emailInput.text) && !awaitingResponse && !successfulEmailSubmissions.Contains(emailInput.text))
{
submitButton.interactable = true;
}
else
{
submitButton.interactable = false;
}
}
if ((bool)backButton)
{
backButton.interactable = !awaitingResponse;
}
if ((bool)backGamepadInputEvent)
{
backGamepadInputEvent.enabled = !awaitingResponse;
}
}
public void TrySubmit()
{
if (!awaitingResponse && (bool)emailInput && !successfulEmailSubmissions.Contains(emailInput.text) && SignupClient.IsEmailValid(emailInput.text))
{
email = emailInput.text;
User user = Client.Instance.User;
user.OnEncryptedAppTicketRequestComplete = (Action<bool, byte[]>)Delegate.Combine(user.OnEncryptedAppTicketRequestComplete, new Action<bool, byte[]>(ProcessAppTicketRefresh));
Client.Instance.User.RequestEncryptedAppTicketAsync(new byte[0]);
awaitingResponse = true;
waitingText?.gameObject?.SetActive(value: true);
successText?.gameObject?.SetActive(value: false);
failureText?.gameObject?.SetActive(value: false);
}
}
private void ProcessAppTicketRefresh(bool success, byte[] ticket)
{
bool flag = success;
User user = Client.Instance.User;
user.OnEncryptedAppTicketRequestComplete = (Action<bool, byte[]>)Delegate.Remove(user.OnEncryptedAppTicketRequestComplete, new Action<bool, byte[]>(ProcessAppTicketRefresh));
if (success)
{
if (SignupClient.IsTicketValid(ticket))
{
if (signupClient != null)
{
signupClient.SignupCompleted += SignupCompleted;
signupClient.SignupSteamAsync(email, "Canary", ticket);
}
}
else
{
Debug.LogError("Can't signup with an invalid ticket!");
flag = false;
}
}
else
{
Debug.LogError("Failure refreshing Encrypted App Ticket from Steam for mailing list!");
flag = false;
}
if (!flag)
{
awaitingResponse = false;
waitingText?.gameObject?.SetActive(value: false);
successText?.gameObject?.SetActive(value: false);
failureText?.gameObject?.SetActive(value: true);
}
}
private void SignupCompleted(string email, HttpStatusCode statusCode)
{
awaitingResponse = false;
waitingText?.gameObject?.SetActive(value: false);
if (statusCode == HttpStatusCode.OK)
{
successfulEmailSubmissions.Add(email);
successText?.gameObject?.SetActive(value: true);
failureText?.gameObject?.SetActive(value: false);
}
else
{
successText?.gameObject?.SetActive(value: false);
failureText?.gameObject?.SetActive(value: true);
}
}
}