Browse Source

allow plex re-authentication

pull/80/head
Jason Dove 5 years ago
parent
commit
c6d90ad750
  1. 14
      ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs
  2. 23
      ErsatzTV/Pages/PlexMediaSources.razor

14
ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs

@ -8,6 +8,7 @@ using ErsatzTV.Core.Interfaces.Plex;
using ErsatzTV.Core.Plex; using ErsatzTV.Core.Plex;
using ErsatzTV.Infrastructure.Plex.Models; using ErsatzTV.Infrastructure.Plex.Models;
using LanguageExt; using LanguageExt;
using Refit;
namespace ErsatzTV.Infrastructure.Plex namespace ErsatzTV.Infrastructure.Plex
{ {
@ -20,9 +21,7 @@ namespace ErsatzTV.Infrastructure.Plex
public PlexTvApiClient(IPlexTvApi plexTvApi, IPlexSecretStore plexSecretStore) public PlexTvApiClient(IPlexTvApi plexTvApi, IPlexSecretStore plexSecretStore)
{ {
// var client = new HttpClient(new HttpLoggingHandler()) { BaseAddress = new Uri("https://plex.tv/api/v2") }; _plexTvApi = plexTvApi;
_plexTvApi = plexTvApi; // RestService.For<IPlexTvApi>(client);
_plexSecretStore = plexSecretStore; _plexSecretStore = plexSecretStore;
} }
@ -80,6 +79,15 @@ namespace ErsatzTV.Infrastructure.Plex
return result; return result;
} }
catch (ApiException apiException)
{
if (apiException.ReasonPhrase == "Unauthorized")
{
await _plexSecretStore.DeleteAll();
}
return BaseError.New(apiException.Message);
}
catch (Exception ex) catch (Exception ex)
{ {
return BaseError.New(ex.Message); return BaseError.New(ex.Message);

23
ErsatzTV/Pages/PlexMediaSources.razor

@ -1,4 +1,5 @@
@page "/media/plex" @page "/media/plex"
@using ErsatzTV.Core.Interfaces.Plex
@using ErsatzTV.Application.Plex @using ErsatzTV.Application.Plex
@using ErsatzTV.Application.Plex.Commands @using ErsatzTV.Application.Plex.Commands
@using ErsatzTV.Application.Plex.Queries @using ErsatzTV.Application.Plex.Queries
@ -9,6 +10,7 @@
@inject ISnackbar Snackbar @inject ISnackbar Snackbar
@inject ILogger<PlexMediaSources> Logger @inject ILogger<PlexMediaSources> Logger
@inject IJSRuntime JsRuntime @inject IJSRuntime JsRuntime
@inject IPlexSecretStore PlexSecretStore
<MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8"> <MudContainer MaxWidth="MaxWidth.ExtraLarge" Class="pt-8">
<MudTable Hover="true" Dense="true" Items="_mediaSources"> <MudTable Hover="true" Dense="true" Items="_mediaSources">
@ -64,18 +66,35 @@
Sign in to plex Sign in to plex
</MudButton> </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> </MudContainer>
@code { @code {
private List<PlexMediaSourceViewModel> _mediaSources; private List<PlexMediaSourceViewModel> _mediaSources = new();
private bool _isAuthorized;
protected override async Task OnParametersSetAsync() => await LoadMediaSources(); protected override async Task OnParametersSetAsync() => await LoadMediaSources();
protected override void OnInitialized() => protected override void OnInitialized() =>
Locker.OnPlexChanged += PlexChanged; 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()); _mediaSources = await Mediator.Send(new GetAllPlexMediaSources());
}
private async Task SignOutOfPlex() private async Task SignOutOfPlex()
{ {

Loading…
Cancel
Save