Check IGDB credentials are valid before allowing metadata lookup

Ref #26
This commit is contained in:
Pat Hartl 2023-08-09 15:28:05 -05:00
parent 6ebf79de8b
commit a291462bde
4 changed files with 51 additions and 6 deletions

View file

@ -6,6 +6,7 @@
@inject CompanyService CompanyService @inject CompanyService CompanyService
@inject GenreService GenreService @inject GenreService GenreService
@inject TagService TagService @inject TagService TagService
@inject NavigationManager NavigationManager
@{ @{
RenderFragment Footer = RenderFragment Footer =
@ -35,8 +36,21 @@
</Table> </Table>
</Modal> </Modal>
@if (IGDBService.Authenticated)
{
<Button OnClick="() => SearchForGame(GameTitle)" Type="@ButtonType.Primary" Disabled="@(String.IsNullOrWhiteSpace(GameTitle))">@ButtonText</Button>
}
else
{
<Popconfirm OnConfirm="() => NavigateToSettings()" Title="Invalid IGDB credentials. Setup now?">
<Button Type="@ButtonType.Primary">@ButtonText</Button>
</Popconfirm>
}
@code { @code {
[Parameter] public EventCallback<GameLookupResult> OnResultSelected { get; set; } [Parameter] public EventCallback<GameLookupResult> OnResultSelected { get; set; }
[Parameter] public string ButtonText { get; set; }
[Parameter] public string GameTitle { get; set; }
ITable? ResultsTable; ITable? ResultsTable;
@ -56,7 +70,7 @@
ResultsTable.SetSelection(new string[] { row.Data.IGDBId.ToString() }); ResultsTable.SetSelection(new string[] { row.Data.IGDBId.ToString() });
} }
public async Task SearchForGame(string title) private async Task SearchForGame(string title)
{ {
Loading = true; Loading = true;
ModalVisible = true; ModalVisible = true;
@ -148,4 +162,9 @@
return multiplayerModes; return multiplayerModes;
} }
private void NavigateToSettings()
{
NavigationManager.NavigateTo("/Settings/General", true);
}
} }

View file

@ -44,14 +44,12 @@
<div data-panel="General"> <div data-panel="General">
<Form Model="@Game" Layout="@FormLayout.Vertical"> <Form Model="@Game" Layout="@FormLayout.Vertical">
<FormItem Label="Title"> <FormItem Label="Title">
<GameMetadataLookup @ref="GameMetadataLookup" OnResultSelected="OnGameLookupResultSelected" />
<Space Style="display: flex"> <Space Style="display: flex">
<SpaceItem Style="flex-grow: 1"> <SpaceItem Style="flex-grow: 1">
<Input @bind-Value="@context.Title" BindOnInput="true" /> <Input @bind-Value="@context.Title" BindOnInput="true" />
</SpaceItem> </SpaceItem>
<SpaceItem> <SpaceItem>
<Button OnClick="() => GameMetadataLookup.SearchForGame(context.Title)" Type="@ButtonType.Primary" Disabled="@(String.IsNullOrWhiteSpace(context.Title))">Lookup</Button> <GameMetadataLookup ButtonText="Lookup" GameTitle="@context.Title" OnResultSelected="OnGameLookupResultSelected" />
</SpaceItem> </SpaceItem>
</Space> </Space>
</FormItem> </FormItem>

View file

@ -3,6 +3,7 @@
@using LANCommander.Models; @using LANCommander.Models;
@layout SettingsLayout @layout SettingsLayout
@inject SettingService SettingService @inject SettingService SettingService
@inject IGDBService IGDBService
@inject IMessageService MessageService @inject IMessageService MessageService
@attribute [Authorize(Roles = "Administrator")] @attribute [Authorize(Roles = "Administrator")]
@ -47,6 +48,9 @@
try try
{ {
SettingService.SaveSettings(Settings); SettingService.SaveSettings(Settings);
IGDBService.Authenticate();
MessageService.Success("Settings saved!"); MessageService.Success("Settings saved!");
} }
catch catch

View file

@ -5,17 +5,41 @@ namespace LANCommander.Services
{ {
public class IGDBService public class IGDBService
{ {
private readonly IGDBClient Client;
private readonly SettingService SettingService; private readonly SettingService SettingService;
private const string DefaultFields = "*"; private const string DefaultFields = "*";
private IGDBClient Client;
public bool Authenticated = false;
private string ClientId { get; set; }
private string ClientSecret { get; set; }
public IGDBService(SettingService settingService) public IGDBService(SettingService settingService)
{ {
SettingService = settingService; SettingService = settingService;
Authenticate();
}
public void Authenticate()
{
var settings = SettingService.GetSettings(); var settings = SettingService.GetSettings();
Client = new IGDBClient(settings.IGDBClientId, settings.IGDBClientSecret); ClientId = settings.IGDBClientId;
ClientSecret = settings.IGDBClientSecret;
try
{
if (String.IsNullOrWhiteSpace(ClientId) || String.IsNullOrWhiteSpace(ClientSecret))
throw new Exception("Invalid IGDB credentials");
Client = new IGDBClient(ClientId, ClientSecret);
Authenticated = true;
}
catch (Exception ex)
{
Authenticated = false;
}
} }
public async Task<Game> Get(long id, params string[] additionalFields) public async Task<Game> Get(long id, params string[] additionalFields)