fish-station/Content.Client/_Sunrise/UserProfile/UserProfile.xaml.cs

195 lines
6.2 KiB
C#

using Content.Client._Sunrise.SponsorTiers;
using Content.Shared._Sunrise.SunriseCCVars;
using Content.Sunrise.Interfaces.Client;
using Content.Sunrise.Interfaces.Shared;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Configuration;
using Robust.Shared.Player;
namespace Content.Client._Sunrise.UserProfile;
[GenerateTypedNameReferences]
public sealed partial class UserProfile : Control
{
[Dependency] private readonly ISharedPlayerManager _playerManager = default!;
[Dependency] private readonly IUriOpener _uri = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
private readonly SponsorTiersUIController _sponsorTiersUIController;
private readonly IClientServiceAuthManager? _serviceAuthManager;
private readonly ISharedSponsorsManager? _sponsorsManager;
private string _donateUrl = string.Empty;
public UserProfile()
{
IoCManager.InjectDependencies(this);
RobustXamlLoader.Load(this);
IoCManager.Instance!.TryResolveType(out _sponsorsManager);
IoCManager.Instance!.TryResolveType(out _serviceAuthManager);
_sponsorTiersUIController = UserInterfaceManager.GetUIController<SponsorTiersUIController>();
_cfg.OnValueChanged(SunriseCCVars.InfoLinksDonate, OnInfoLinksDonateChanged, true);
if (_serviceAuthManager == null)
{
LinkDiscordButton.Disabled = true;
LinkTelegramButton.Disabled = true;
LinkGitHubButton.Disabled = true;
}
else
{
LinkTelegramButton.OnPressed += LinkTelegramPressed;
LinkDiscordButton.OnPressed += LinkDiscordPressed;
LinkGitHubButton.OnPressed += LinkGitHubPressed;
ResetTelegramButton.OnPressed += ResetTelegramPressed;
ResetDiscordButton.OnPressed += ResetDiscordPressed;
ResetGitHubButton.OnPressed += ResetGitHubPressed;
_serviceAuthManager.LoadedServiceLinkedServices += RefreshServiceLinkedServices;
}
if (_sponsorsManager == null)
{
BuySponsorButton.Disabled = true;
InfoSponsorButton.Disabled = true;
}
else
{
BuySponsorButton.OnPressed += BuySponsorPressed;
_sponsorsManager.LoadedSponsorInfo += RefreshSponsorInfo;
InfoSponsorButton.OnPressed += InfoSponsorPressed;
}
}
private void OnInfoLinksDonateChanged(string url)
{
BuySponsorButton.Disabled = url == "";
_donateUrl = url;
}
private void RefreshSponsorInfo()
{
if (_sponsorsManager == null)
return;
if (_playerManager.LocalSession != null)
{
if (_sponsorsManager.ClientIsSponsor())
{
_sponsorsManager.TryGetOocTitle(_playerManager.LocalSession.UserId, out var sponsorTitle);
SponsorTierName.Text = sponsorTitle;
}
else
{
SponsorTierName.Text = Loc.GetString("user-profile-no-sponsor");
}
}
}
private void RefreshServiceLinkedServices(List<LinkedServiceData> linkedServices)
{
if (_serviceAuthManager == null)
return;
// Reset visibility and text for all services
LinkDiscordButton.Visible = true;
LinkedDiscordName.Text = string.Empty;
ResetDiscordButton.Visible = false;
LinkTelegramButton.Visible = true;
LinkedTelegramName.Text = string.Empty;
ResetTelegramButton.Visible = false;
LinkGitHubButton.Visible = true;
LinkedGitHubName.Text = string.Empty;
ResetGitHubButton.Visible = false;
// Update visibility and text based on linked services
foreach (var serviceAuthData in linkedServices)
{
switch (serviceAuthData.ServiceType)
{
case ServiceType.Discord:
LinkDiscordButton.Visible = false;
LinkedDiscordName.Text = serviceAuthData.Username;
ResetDiscordButton.Visible = true;
break;
case ServiceType.Telegram:
LinkTelegramButton.Visible = false;
LinkedTelegramName.Text = serviceAuthData.Username;
ResetTelegramButton.Visible = true;
break;
case ServiceType.Github:
LinkGitHubButton.Visible = false;
LinkedGitHubName.Text = serviceAuthData.Username;
ResetGitHubButton.Visible = true;
break;
}
}
}
private void ResetTelegramPressed(BaseButton.ButtonEventArgs obj)
{
if (_serviceAuthManager == null)
return;
_serviceAuthManager.ResetServiceLink(ServiceType.Telegram);
}
private void ResetDiscordPressed(BaseButton.ButtonEventArgs obj)
{
if (_serviceAuthManager == null)
return;
_serviceAuthManager.ResetServiceLink(ServiceType.Discord);
}
private void ResetGitHubPressed(BaseButton.ButtonEventArgs obj)
{
if (_serviceAuthManager == null)
return;
_serviceAuthManager.ResetServiceLink(ServiceType.Github);
}
private void BuySponsorPressed(BaseButton.ButtonEventArgs obj)
{
_uri.OpenUri(_donateUrl);
}
private void LinkTelegramPressed(BaseButton.ButtonEventArgs obj)
{
if (_serviceAuthManager == null)
return;
_serviceAuthManager.ToggleWindow(ServiceType.Telegram);
}
private void LinkDiscordPressed(BaseButton.ButtonEventArgs obj)
{
if (_serviceAuthManager == null)
return;
_serviceAuthManager.ToggleWindow(ServiceType.Discord);
}
private void LinkGitHubPressed(BaseButton.ButtonEventArgs obj)
{
if (_serviceAuthManager == null)
return;
_serviceAuthManager.ToggleWindow(ServiceType.Github);
}
private void InfoSponsorPressed(BaseButton.ButtonEventArgs obj)
{
_sponsorTiersUIController.ToggleWindow();
}
}