New: Validate PMS version before performing a library update

This commit is contained in:
Mark McDowall 2016-12-08 10:23:53 -08:00
parent 3f64c01d5b
commit c99e92e6af
3 changed files with 41 additions and 8 deletions

View File

@ -19,12 +19,14 @@ namespace NzbDrone.Core.Notifications.Plex
public class PlexServerService : IPlexServerService public class PlexServerService : IPlexServerService
{ {
private readonly ICached<Version> _versionCache;
private readonly ICached<bool> _partialUpdateCache; private readonly ICached<bool> _partialUpdateCache;
private readonly IPlexServerProxy _plexServerProxy; private readonly IPlexServerProxy _plexServerProxy;
private readonly Logger _logger; private readonly Logger _logger;
public PlexServerService(ICacheManager cacheManager, IPlexServerProxy plexServerProxy, Logger logger) public PlexServerService(ICacheManager cacheManager, IPlexServerProxy plexServerProxy, Logger logger)
{ {
_versionCache = cacheManager.GetCache<Version>(GetType(), "versionCache");
_partialUpdateCache = cacheManager.GetCache<bool>(GetType(), "partialUpdateCache"); _partialUpdateCache = cacheManager.GetCache<bool>(GetType(), "partialUpdateCache");
_plexServerProxy = plexServerProxy; _plexServerProxy = plexServerProxy;
_logger = logger; _logger = logger;
@ -36,8 +38,11 @@ namespace NzbDrone.Core.Notifications.Plex
{ {
_logger.Debug("Sending Update Request to Plex Server"); _logger.Debug("Sending Update Request to Plex Server");
var version = _versionCache.Get(settings.Host, () => GetVersion(settings), TimeSpan.FromHours(2));
ValidateVersion(version);
var sections = GetSections(settings); var sections = GetSections(settings);
var partialUpdates = _partialUpdateCache.Get(settings.Host, () => PartialUpdatesAllowed(settings), TimeSpan.FromHours(2)); var partialUpdates = _partialUpdateCache.Get(settings.Host, () => PartialUpdatesAllowed(settings, version), TimeSpan.FromHours(2));
if (partialUpdates) if (partialUpdates)
{ {
@ -64,13 +69,10 @@ namespace NzbDrone.Core.Notifications.Plex
return _plexServerProxy.GetTvSections(settings).ToList(); return _plexServerProxy.GetTvSections(settings).ToList();
} }
private bool PartialUpdatesAllowed(PlexServerSettings settings) private bool PartialUpdatesAllowed(PlexServerSettings settings, Version version)
{ {
try try
{ {
var rawVersion = GetVersion(settings);
var version = new Version(Regex.Match(rawVersion, @"^(\d+[.-]){4}").Value.Trim('.', '-'));
if (version >= new Version(0, 9, 12, 0)) if (version >= new Version(0, 9, 12, 0))
{ {
var preferences = GetPreferences(settings); var preferences = GetPreferences(settings);
@ -92,13 +94,28 @@ namespace NzbDrone.Core.Notifications.Plex
return false; return false;
} }
private string GetVersion(PlexServerSettings settings) private void ValidateVersion(Version version)
{
if (version >= new Version(1, 3, 0) && version < new Version(1, 3, 1))
{
throw new PlexVersionException("Found version {0}, upgrade to PMS 1.3.1 to fix library updating and then restart Sonarr", version);
}
}
private Version GetVersion(PlexServerSettings settings)
{ {
_logger.Debug("Getting version from Plex host: {0}", settings.Host); _logger.Debug("Getting version from Plex host: {0}", settings.Host);
return _plexServerProxy.Version(settings); var rawVersion = _plexServerProxy.Version(settings);
var version = new Version(Regex.Match(rawVersion, @"^(\d+[.-]){4}").Value.Trim('.', '-'));
return version;
} }
private List<PlexPreference> GetPreferences(PlexServerSettings settings) private List<PlexPreference> GetPreferences(PlexServerSettings settings)
{ {
_logger.Debug("Getting preferences from Plex host: {0}", settings.Host); _logger.Debug("Getting preferences from Plex host: {0}", settings.Host);

View File

@ -0,0 +1,15 @@
using NzbDrone.Common.Exceptions;
namespace NzbDrone.Core.Notifications.Plex
{
public class PlexVersionException : NzbDroneException
{
public PlexVersionException(string message) : base(message)
{
}
public PlexVersionException(string message, params object[] args) : base(message, args)
{
}
}
}

View File

@ -829,6 +829,7 @@
<Compile Include="Notifications\Plex\PlexAuthenticationException.cs" /> <Compile Include="Notifications\Plex\PlexAuthenticationException.cs" />
<Compile Include="Notifications\CustomScript\CustomScript.cs" /> <Compile Include="Notifications\CustomScript\CustomScript.cs" />
<Compile Include="Notifications\CustomScript\CustomScriptSettings.cs" /> <Compile Include="Notifications\CustomScript\CustomScriptSettings.cs" />
<Compile Include="Notifications\Plex\PlexVersionException.cs" />
<Compile Include="Notifications\Plex\PlexHomeTheater.cs" /> <Compile Include="Notifications\Plex\PlexHomeTheater.cs" />
<Compile Include="Notifications\Plex\PlexHomeTheaterSettings.cs" /> <Compile Include="Notifications\Plex\PlexHomeTheaterSettings.cs" />
<Compile Include="Notifications\Plex\PlexClientService.cs" /> <Compile Include="Notifications\Plex\PlexClientService.cs" />