diff --git a/ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs b/ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs index e889a1fe9..c68cad1fc 100644 --- a/ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs +++ b/ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs @@ -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(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); diff --git a/ErsatzTV/Pages/PlexMediaSources.razor b/ErsatzTV/Pages/PlexMediaSources.razor index d5de8cf3d..662dce35e 100644 --- a/ErsatzTV/Pages/PlexMediaSources.razor +++ b/ErsatzTV/Pages/PlexMediaSources.razor @@ -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 Logger @inject IJSRuntime JsRuntime +@inject IPlexSecretStore PlexSecretStore @@ -64,18 +66,35 @@ Sign in to plex } + + @if (_mediaSources.Any() && !_isAuthorized) + { + + Fix Plex Credentials + + } + @code { - private List _mediaSources; + private List _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() {