diff --git a/ErsatzTV.Infrastructure/Plex/IPlexTvApi.cs b/ErsatzTV.Infrastructure/Plex/IPlexTvApi.cs index f940ae254..84503e450 100644 --- a/ErsatzTV.Infrastructure/Plex/IPlexTvApi.cs +++ b/ErsatzTV.Infrastructure/Plex/IPlexTvApi.cs @@ -34,8 +34,10 @@ namespace ErsatzTV.Infrastructure.Plex [Query] [AliasAs("X-Plex-Token")] string token); - [Get("/resources?includeHttps=1")] + [Get("/resources")] Task> GetResources( + [Query] [AliasAs("includeHttps")] + int includeHttps, [Header("X-Plex-Client-Identifier")] string clientIdentifier, [Header("X-Plex-Token")] diff --git a/ErsatzTV.Infrastructure/Plex/Models/PlexResource.cs b/ErsatzTV.Infrastructure/Plex/Models/PlexResource.cs index afe65750f..e02c061ca 100644 --- a/ErsatzTV.Infrastructure/Plex/Models/PlexResource.cs +++ b/ErsatzTV.Infrastructure/Plex/Models/PlexResource.cs @@ -12,6 +12,7 @@ namespace ErsatzTV.Infrastructure.Plex.Models public bool Owned { get; set; } public string Provides { get; set; } + public bool HttpsRequired { get; set; } public List Connections { get; set; } } } diff --git a/ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs b/ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs index 7f5f8ec1e..b7fa4672c 100644 --- a/ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs +++ b/ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs @@ -34,8 +34,22 @@ namespace ErsatzTV.Infrastructure.Plex string clientIdentifier = await _plexSecretStore.GetClientIdentifier(); foreach (PlexUserAuthToken token in await _plexSecretStore.GetUserAuthTokens()) { - List resources = await _plexTvApi.GetResources(clientIdentifier, token.AuthToken); - IEnumerable sources = resources + List httpResources = await _plexTvApi.GetResources( + 0, + clientIdentifier, + token.AuthToken); + + List httpsResources = await _plexTvApi.GetResources( + 1, + clientIdentifier, + token.AuthToken); + + + List allResources = httpResources.Filter(resource => resource.HttpsRequired == false) + .Append(httpsResources.Filter(resource => resource.HttpsRequired)) + .ToList(); + + IEnumerable sources = allResources .Filter(r => r.Provides.Split(",").Any(p => p == "server")) .Filter(r => r.Owned) // TODO: maybe support non-owned servers in the future .Map( @@ -46,13 +60,16 @@ namespace ErsatzTV.Infrastructure.Plex resource.AccessToken); _plexSecretStore.UpsertServerAuthToken(serverAuthToken); - + List sortedConnections = resource.HttpsRequired + ? resource.Connections + : resource.Connections.OrderBy(c => c.Local ? 0 : 1).ToList(); + var source = new PlexMediaSource { ServerName = resource.Name, ProductVersion = resource.ProductVersion, ClientIdentifier = resource.ClientIdentifier, - Connections = resource.Connections + Connections = sortedConnections .Map(c => new PlexConnection { Uri = c.Uri }).ToList() }; diff --git a/ErsatzTV/Pages/PlexMediaSources.razor b/ErsatzTV/Pages/PlexMediaSources.razor index e448c1a77..2c4ae0935 100644 --- a/ErsatzTV/Pages/PlexMediaSources.razor +++ b/ErsatzTV/Pages/PlexMediaSources.razor @@ -42,9 +42,9 @@ - @* *@ - @* Add Plex Media Source *@ - @* *@ + + Add Plex Media Source + @code { @@ -77,10 +77,6 @@ // } // } - // edit media source - // - manage libraries to include in smart collections - // - manage list of path replacements - private async Task AddPlexMediaSource() { Either maybeUrl = await Mediator.Send(new StartPlexPinFlow());