Change login button state when attempting to authenticate

This commit is contained in:
Pat Hartl 2023-03-13 17:37:36 -05:00
parent 8fbc72e343
commit 4277b50198
3 changed files with 20 additions and 5 deletions

View file

@ -62,9 +62,9 @@ namespace LANCommander.PlaynitePlugin
return tempFile;
}
public AuthResponse Authenticate(string username, string password)
public async Task<AuthResponse> AuthenticateAsync(string username, string password)
{
var response = Client.Post<AuthResponse>(new RestRequest("/api/Auth").AddJsonBody(new AuthRequest()
var response = await Client.ExecuteAsync<AuthResponse>(new RestRequest("/api/Auth", Method.POST).AddJsonBody(new AuthRequest()
{
UserName = username,
Password = password

View file

@ -214,6 +214,6 @@
<TextBox Grid.Row="1" Grid.Column="1" Name="Username" Text="{Binding UserName}" KeyDown="TextBox_KeyDown" />
<TextBlock Grid.Row="2" Grid.Column="0" Text="Password" />
<PasswordBox Grid.Row="2" Grid.Column="1" Name="Password" PasswordChanged="Password_PasswordChanged" KeyDown="TextBox_KeyDown" />
<Button Grid.Row="3" Grid.ColumnSpan="2" Click="LoginButton_Click" x:Name="LoginButton">Login</Button>
<Button Grid.Row="3" Grid.ColumnSpan="2" Command="{Binding LoginCommand}" x:Name="LoginButton">Login</Button>
</Grid>
</UserControl>

View file

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
@ -67,16 +68,30 @@ namespace LANCommander.PlaynitePlugin.Views
}
}
private void Authenticate()
public RelayCommand<object> LoginCommand
{
get => new RelayCommand<object>(async (a) =>
{
await Authenticate();
});
}
private async Task Authenticate()
{
try
{
LoginButton.Dispatcher.Invoke(new System.Action(() =>
{
LoginButton.IsEnabled = false;
LoginButton.Content = "Logging in...";
}));
if (Plugin.LANCommander == null || Plugin.LANCommander.Client == null)
Plugin.LANCommander = new LANCommanderClient(Context.ServerAddress);
else
Plugin.LANCommander.Client.BaseUrl = new Uri(Context.ServerAddress);
var response = Plugin.LANCommander.Authenticate(Context.UserName, Context.Password);
var response = await Plugin.LANCommander.AuthenticateAsync(Context.UserName, Context.Password);
Plugin.Settings.ServerAddress = Context.ServerAddress;
Plugin.Settings.AccessToken = response.AccessToken;