From edcc0ba7ceca19fe7b0902719c8eb41b8a8826e8 Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 14 Dec 2019 22:30:44 -0500 Subject: [PATCH] New: Only Refresh on TMDB Refersh --- .../MetadataSource/IProvideMovieInfo.cs | 3 ++- .../MetadataSource/SkyHook/SkyHookProxy.cs | 16 ++++++++++++++++ src/NzbDrone.Core/Movies/RefreshMovieService.cs | 11 +++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/MetadataSource/IProvideMovieInfo.cs b/src/NzbDrone.Core/MetadataSource/IProvideMovieInfo.cs index 51727c6bf..ad12c0c8c 100644 --- a/src/NzbDrone.Core/MetadataSource/IProvideMovieInfo.cs +++ b/src/NzbDrone.Core/MetadataSource/IProvideMovieInfo.cs @@ -9,5 +9,6 @@ namespace NzbDrone.Core.MetadataSource { Movie GetMovieInfo(string ImdbId); Movie GetMovieInfo(int TmdbId, Profile profile, bool hasPreDBEntry); + HashSet GetChangedMovies(DateTime startTime); } -} \ No newline at end of file +} diff --git a/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs b/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs index 60fb948e8..b44d674fc 100644 --- a/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs +++ b/src/NzbDrone.Core/MetadataSource/SkyHook/SkyHookProxy.cs @@ -50,6 +50,22 @@ namespace NzbDrone.Core.MetadataSource.SkyHook _logger = logger; } + public HashSet GetChangedMovies (DateTime startTime) + { + var request = _movieBuilder.Create() + .SetSegment("route", "movie") + .SetSegment("id", "") + .SetSegment("secondaryRoute", "changes") + .Build(); + + request.AllowAutoRedirect = true; + request.SuppressHttpError = true; + + var response = _httpClient.Get(request); + + return new HashSet(response.Resource.results.Select(c => c.id)); + } + public Movie GetMovieInfo(int TmdbId, Profile profile = null, bool hasPreDBEntry = false) { var langCode = profile != null ? IsoLanguages.Get(profile.Language)?.TwoLetterCode ?? "en" : "en"; diff --git a/src/NzbDrone.Core/Movies/RefreshMovieService.cs b/src/NzbDrone.Core/Movies/RefreshMovieService.cs index 48fcf3242..36050024b 100644 --- a/src/NzbDrone.Core/Movies/RefreshMovieService.cs +++ b/src/NzbDrone.Core/Movies/RefreshMovieService.cs @@ -12,7 +12,6 @@ using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.MetadataSource; -using NzbDrone.Core.MediaFiles.Commands; using NzbDrone.Core.MetadataSource.RadarrAPI; using NzbDrone.Core.Movies.AlternativeTitles; using NzbDrone.Core.Movies.Commands; @@ -219,9 +218,17 @@ namespace NzbDrone.Core.Movies { var allMovie = _movieService.GetAllMovies().OrderBy(c => c.SortTitle).ToList(); + var updatedTMDBMovies = new HashSet(); + + if (message.LastExecutionTime.HasValue && message.LastExecutionTime.Value.AddDays(14) > DateTime.UtcNow) + { + // TODO: Should we add some overlap to ensure we get everything? + updatedTMDBMovies = _movieInfo.GetChangedMovies(message.LastExecutionTime.Value); + } + foreach (var movie in allMovie) { - if (message.Trigger == CommandTrigger.Manual || _checkIfMovieShouldBeRefreshed.ShouldRefresh(movie)) + if ((updatedTMDBMovies.Count == 0 && _checkIfMovieShouldBeRefreshed.ShouldRefresh(movie)) || updatedTMDBMovies.Contains(movie.TmdbId) || message.Trigger == CommandTrigger.Manual) { try {