mirror of
https://github.com/Radarr/Radarr.git
synced 2024-11-05 02:22:31 +01:00
Fixed: Ping plex.tv to keep auth token active
(cherry picked from commit 93bd8543b158c952b50e56d4339e4a3c699770b0)
This commit is contained in:
parent
43a2a2d335
commit
8fe81b428a
@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Net;
|
||||
using NLog;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
@ -10,6 +11,7 @@ namespace NzbDrone.Core.Notifications.Plex.PlexTv
|
||||
public interface IPlexTvProxy
|
||||
{
|
||||
string GetAuthToken(string clientIdentifier, int pinId);
|
||||
bool Ping(string clientIdentifier, string authToken);
|
||||
}
|
||||
|
||||
public class PlexTvProxy : IPlexTvProxy
|
||||
@ -38,6 +40,29 @@ public string GetAuthToken(string clientIdentifier, int pinId)
|
||||
return response.AuthToken;
|
||||
}
|
||||
|
||||
public bool Ping(string clientIdentifier, string authToken)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Allows us to tell plex.tv that we're still active and tokens should not be expired.
|
||||
var request = BuildRequest(clientIdentifier);
|
||||
|
||||
request.ResourceUrl = "/api/v2/ping";
|
||||
request.AddQueryParam("X-Plex-Token", authToken);
|
||||
|
||||
ProcessRequest(request);
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Catch all exceptions and log at trace, this information could be interesting in debugging, but expired tokens will be handled elsewhere.
|
||||
_logger.Trace(e, "Unable to ping plex.tv");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private HttpRequestBuilder BuildRequest(string clientIdentifier)
|
||||
{
|
||||
var requestBuilder = new HttpRequestBuilder("https://plex.tv")
|
||||
|
@ -1,5 +1,8 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using NzbDrone.Common.Cache;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Http;
|
||||
using NzbDrone.Core.Configuration;
|
||||
@ -11,7 +14,7 @@ public interface IPlexTvService
|
||||
PlexTvPinUrlResponse GetPinUrl();
|
||||
PlexTvSignInUrlResponse GetSignInUrl(string callbackUrl, int pinId, string pinCode);
|
||||
string GetAuthToken(int pinId);
|
||||
|
||||
void Ping(string authToken);
|
||||
HttpRequest GetWatchlist(string authToken);
|
||||
}
|
||||
|
||||
@ -19,11 +22,13 @@ public class PlexTvService : IPlexTvService
|
||||
{
|
||||
private readonly IPlexTvProxy _proxy;
|
||||
private readonly IConfigService _configService;
|
||||
private readonly ICached<bool> _cache;
|
||||
|
||||
public PlexTvService(IPlexTvProxy proxy, IConfigService configService)
|
||||
public PlexTvService(IPlexTvProxy proxy, IConfigService configService, ICacheManager cacheManager)
|
||||
{
|
||||
_proxy = proxy;
|
||||
_configService = configService;
|
||||
_cache = cacheManager.GetCache<bool>(GetType());
|
||||
}
|
||||
|
||||
public PlexTvPinUrlResponse GetPinUrl()
|
||||
@ -83,8 +88,16 @@ public string GetAuthToken(int pinId)
|
||||
return authToken;
|
||||
}
|
||||
|
||||
public void Ping(string authToken)
|
||||
{
|
||||
// Ping plex.tv if we haven't done so in the last 24 hours for this auth token.
|
||||
_cache.Get(authToken, () => _proxy.Ping(_configService.PlexClientIdentifier, authToken), TimeSpan.FromHours(24));
|
||||
}
|
||||
|
||||
public HttpRequest GetWatchlist(string authToken)
|
||||
{
|
||||
Ping(authToken);
|
||||
|
||||
var clientIdentifier = _configService.PlexClientIdentifier;
|
||||
|
||||
var requestBuilder = new HttpRequestBuilder("https://metadata.provider.plex.tv/library/sections/watchlist/all")
|
||||
|
@ -64,6 +64,8 @@ public override void OnMovieDelete(MovieDeleteMessage deleteMessage)
|
||||
|
||||
private void UpdateIfEnabled(Movie movie)
|
||||
{
|
||||
_plexTvService.Ping(Settings.AuthToken);
|
||||
|
||||
if (Settings.UpdateLibrary)
|
||||
{
|
||||
_logger.Debug("Scheduling library update for movie {0} {1}", movie.Id, movie.Title);
|
||||
@ -77,7 +79,8 @@ private void UpdateIfEnabled(Movie movie)
|
||||
|
||||
public override void ProcessQueue()
|
||||
{
|
||||
PlexUpdateQueue queue = _pendingMoviesCache.Find(Settings.Host);
|
||||
var queue = _pendingMoviesCache.Find(Settings.Host);
|
||||
|
||||
if (queue == null)
|
||||
{
|
||||
return;
|
||||
@ -130,6 +133,8 @@ public override void ProcessQueue()
|
||||
|
||||
public override ValidationResult Test()
|
||||
{
|
||||
_plexTvService.Ping(Settings.AuthToken);
|
||||
|
||||
var failures = new List<ValidationFailure>();
|
||||
|
||||
failures.AddIfNotNull(_plexServerService.Test(Settings));
|
||||
|
Loading…
Reference in New Issue
Block a user