allow plex re-authentication

This commit is contained in:
Jason Dove
2021-03-14 21:05:14 -05:00
parent e5a9ef6196
commit c6d90ad750
2 changed files with 32 additions and 5 deletions
@@ -8,6 +8,7 @@ using ErsatzTV.Core.Interfaces.Plex;
using ErsatzTV.Core.Plex;
using ErsatzTV.Infrastructure.Plex.Models;
using LanguageExt;
using Refit;
namespace ErsatzTV.Infrastructure.Plex
{
@@ -20,9 +21,7 @@ namespace ErsatzTV.Infrastructure.Plex
public PlexTvApiClient(IPlexTvApi plexTvApi, IPlexSecretStore plexSecretStore)
{
// var client = new HttpClient(new HttpLoggingHandler()) { BaseAddress = new Uri("https://plex.tv/api/v2") };
_plexTvApi = plexTvApi; // RestService.For<IPlexTvApi>(client);
_plexTvApi = plexTvApi;
_plexSecretStore = plexSecretStore;
}
@@ -80,6 +79,15 @@ namespace ErsatzTV.Infrastructure.Plex
return result;
}
catch (ApiException apiException)
{
if (apiException.ReasonPhrase == "Unauthorized")
{
await _plexSecretStore.DeleteAll();
}
return BaseError.New(apiException.Message);
}
catch (Exception ex)
{
return BaseError.New(ex.Message);
+21 -2
View File
@@ -1,4 +1,5 @@
@page "/media/plex"
@using ErsatzTV.Core.Interfaces.Plex
@using ErsatzTV.Application.Plex
@using ErsatzTV.Application.Plex.Commands
@using ErsatzTV.Application.Plex.Queries
@@ -9,6 +10,7 @@
@inject ISnackbar Snackbar
@inject ILogger<PlexMediaSources> Logger
@inject IJSRuntime JsRuntime
@inject IPlexSecretStore PlexSecretStore
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8">
<MudTable Hover="true" Dense="true" Items="_mediaSources">
@@ -64,18 +66,35 @@
Sign in to plex
</MudButton>
}
@if (_mediaSources.Any() && !_isAuthorized)
{
<MudButton Variant="Variant.Filled"
Color="Color.Secondary"
OnClick="@(_ => AddPlexMediaSource())"
Disabled="@Locker.IsPlexLocked()"
Class="ml-4 mt-4">
Fix Plex Credentials
</MudButton>
}
</MudContainer>
@code {
private List<PlexMediaSourceViewModel> _mediaSources;
private List<PlexMediaSourceViewModel> _mediaSources = new();
private bool _isAuthorized;
protected override async Task OnParametersSetAsync() => await LoadMediaSources();
protected override void OnInitialized() =>
Locker.OnPlexChanged += PlexChanged;
private async Task LoadMediaSources() =>
private async Task LoadMediaSources()
{
_isAuthorized = await PlexSecretStore.GetUserAuthTokens().Map(list => Prelude.Optional(list).Flatten().Any());
_mediaSources = await Mediator.Send(new GetAllPlexMediaSources());
}
private async Task SignOutOfPlex()
{