Browse Source

prioritize local connections for insecure plex sources

pull/72/head
Jason Dove 5 years ago
parent
commit
7c6a7818f9
  1. 4
      ErsatzTV.Infrastructure/Plex/IPlexTvApi.cs
  2. 1
      ErsatzTV.Infrastructure/Plex/Models/PlexResource.cs
  3. 25
      ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs
  4. 10
      ErsatzTV/Pages/PlexMediaSources.razor

4
ErsatzTV.Infrastructure/Plex/IPlexTvApi.cs

@ -34,8 +34,10 @@ namespace ErsatzTV.Infrastructure.Plex @@ -34,8 +34,10 @@ namespace ErsatzTV.Infrastructure.Plex
[Query] [AliasAs("X-Plex-Token")]
string token);
[Get("/resources?includeHttps=1")]
[Get("/resources")]
Task<List<PlexResource>> GetResources(
[Query] [AliasAs("includeHttps")]
int includeHttps,
[Header("X-Plex-Client-Identifier")]
string clientIdentifier,
[Header("X-Plex-Token")]

1
ErsatzTV.Infrastructure/Plex/Models/PlexResource.cs

@ -12,6 +12,7 @@ namespace ErsatzTV.Infrastructure.Plex.Models @@ -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<PlexResourceConnection> Connections { get; set; }
}
}

25
ErsatzTV.Infrastructure/Plex/PlexTvApiClient.cs

@ -34,8 +34,22 @@ namespace ErsatzTV.Infrastructure.Plex @@ -34,8 +34,22 @@ namespace ErsatzTV.Infrastructure.Plex
string clientIdentifier = await _plexSecretStore.GetClientIdentifier();
foreach (PlexUserAuthToken token in await _plexSecretStore.GetUserAuthTokens())
{
List<PlexResource> resources = await _plexTvApi.GetResources(clientIdentifier, token.AuthToken);
IEnumerable<PlexMediaSource> sources = resources
List<PlexResource> httpResources = await _plexTvApi.GetResources(
0,
clientIdentifier,
token.AuthToken);
List<PlexResource> httpsResources = await _plexTvApi.GetResources(
1,
clientIdentifier,
token.AuthToken);
List<PlexResource> allResources = httpResources.Filter(resource => resource.HttpsRequired == false)
.Append(httpsResources.Filter(resource => resource.HttpsRequired))
.ToList();
IEnumerable<PlexMediaSource> 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 @@ -46,13 +60,16 @@ namespace ErsatzTV.Infrastructure.Plex
resource.AccessToken);
_plexSecretStore.UpsertServerAuthToken(serverAuthToken);
List<PlexResourceConnection> 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()
};

10
ErsatzTV/Pages/PlexMediaSources.razor

@ -42,9 +42,9 @@ @@ -42,9 +42,9 @@
</MudTd>
</RowTemplate>
</MudTable>
@* <MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="@(_ => AddPlexMediaSource())" Class="mt-4"> *@
@* Add Plex Media Source *@
@* </MudButton> *@
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="@(_ => AddPlexMediaSource())" Class="mt-4">
Add Plex Media Source
</MudButton>
</MudContainer>
@code {
@ -77,10 +77,6 @@ @@ -77,10 +77,6 @@
// }
// }
// edit media source
// - manage libraries to include in smart collections
// - manage list of path replacements
private async Task AddPlexMediaSource()
{
Either<BaseError, string> maybeUrl = await Mediator.Send(new StartPlexPinFlow());

Loading…
Cancel
Save