mirror of
https://github.com/Radarr/Radarr.git
synced 2025-04-24 06:27:08 -04:00
Check if import list items are valid before importing
Co-authored-by: Qstick <qstick@gmail.com>
This commit is contained in:
parent
9a0ca650a3
commit
e73d05c0fe
5 changed files with 31 additions and 28 deletions
|
@ -39,35 +39,41 @@ namespace NzbDrone.Core.ImportLists
|
|||
|
||||
public override ImportListFetchResult Fetch()
|
||||
{
|
||||
var generator = GetRequestGenerator();
|
||||
return FetchMovies(generator.GetMovies());
|
||||
return FetchMovies(g => g.GetMovies());
|
||||
}
|
||||
|
||||
protected virtual ImportListFetchResult FetchMovies(ImportListPageableRequestChain pageableRequestChain, bool isRecent = false)
|
||||
protected virtual ImportListFetchResult FetchMovies(Func<IImportListRequestGenerator, ImportListPageableRequestChain> pageableRequestChainSelector, bool isRecent = false)
|
||||
{
|
||||
var movies = new List<ImportListMovie>();
|
||||
var url = string.Empty;
|
||||
|
||||
var parser = GetParser();
|
||||
|
||||
var anyFailure = true;
|
||||
|
||||
try
|
||||
{
|
||||
var generator = GetRequestGenerator();
|
||||
var parser = GetParser();
|
||||
|
||||
var pageableRequestChain = pageableRequestChainSelector(generator);
|
||||
|
||||
for (var i = 0; i < pageableRequestChain.Tiers; i++)
|
||||
{
|
||||
var pageableRequests = pageableRequestChain.GetTier(i);
|
||||
|
||||
foreach (var pageableRequest in pageableRequests)
|
||||
{
|
||||
var pagedReleases = new List<ImportListMovie>();
|
||||
var pagedMovies = new List<ImportListMovie>();
|
||||
|
||||
foreach (var request in pageableRequest)
|
||||
{
|
||||
url = request.Url.FullUri;
|
||||
|
||||
var page = FetchPage(request, parser);
|
||||
pagedReleases.AddRange(page);
|
||||
|
||||
pagedMovies.AddRange(page);
|
||||
}
|
||||
|
||||
movies.AddRange(pagedReleases);
|
||||
movies.AddRange(pagedMovies.Where(IsValidItem));
|
||||
}
|
||||
|
||||
if (movies.Any())
|
||||
|
@ -81,8 +87,7 @@ namespace NzbDrone.Core.ImportLists
|
|||
}
|
||||
catch (WebException webException)
|
||||
{
|
||||
if (webException.Status == WebExceptionStatus.NameResolutionFailure ||
|
||||
webException.Status == WebExceptionStatus.ConnectFailure)
|
||||
if (webException.Status is WebExceptionStatus.NameResolutionFailure or WebExceptionStatus.ConnectFailure)
|
||||
{
|
||||
_importListStatusService.RecordConnectionFailure(Definition.Id);
|
||||
}
|
||||
|
@ -103,14 +108,8 @@ namespace NzbDrone.Core.ImportLists
|
|||
}
|
||||
catch (TooManyRequestsException ex)
|
||||
{
|
||||
if (ex.RetryAfter != TimeSpan.Zero)
|
||||
{
|
||||
_importListStatusService.RecordFailure(Definition.Id, ex.RetryAfter);
|
||||
}
|
||||
else
|
||||
{
|
||||
_importListStatusService.RecordFailure(Definition.Id, TimeSpan.FromHours(1));
|
||||
}
|
||||
var retryTime = ex.RetryAfter != TimeSpan.Zero ? ex.RetryAfter : TimeSpan.FromHours(1);
|
||||
_importListStatusService.RecordFailure(Definition.Id, retryTime);
|
||||
|
||||
_logger.Warn("API Request Limit reached for {0}", this);
|
||||
}
|
||||
|
@ -152,6 +151,16 @@ namespace NzbDrone.Core.ImportLists
|
|||
return new ImportListFetchResult { Movies = CleanupListItems(movies), AnyFailure = anyFailure };
|
||||
}
|
||||
|
||||
protected virtual bool IsValidItem(ImportListMovie listItem)
|
||||
{
|
||||
if (listItem.Title.IsNullOrWhiteSpace() && listItem.ImdbId.IsNullOrWhiteSpace() && listItem.TmdbId == 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected virtual IList<ImportListMovie> FetchPage(ImportListRequest request, IParseImportListResponse parser)
|
||||
{
|
||||
var response = FetchImportListResponse(request);
|
||||
|
|
|
@ -37,8 +37,7 @@ namespace NzbDrone.Core.ImportLists.Plex
|
|||
{
|
||||
Settings.Validate().Filter("AccessToken").ThrowOnError();
|
||||
|
||||
var generator = GetRequestGenerator();
|
||||
return FetchMovies(generator.GetMovies());
|
||||
return FetchMovies(g => g.GetMovies());
|
||||
}
|
||||
|
||||
public override IParseImportListResponse GetParser()
|
||||
|
|
|
@ -22,9 +22,7 @@ namespace NzbDrone.Core.ImportLists.Rss
|
|||
|
||||
public override ImportListFetchResult Fetch()
|
||||
{
|
||||
var generator = GetRequestGenerator();
|
||||
|
||||
return FetchMovies(generator.GetMovies());
|
||||
return FetchMovies(g => g.GetMovies());
|
||||
}
|
||||
|
||||
public override IParseImportListResponse GetParser()
|
||||
|
|
|
@ -53,9 +53,7 @@ namespace NzbDrone.Core.ImportLists.Simkl
|
|||
return new ImportListFetchResult();
|
||||
}
|
||||
|
||||
var generator = GetRequestGenerator();
|
||||
|
||||
return FetchMovies(generator.GetMovies());
|
||||
return FetchMovies(g => g.GetMovies());
|
||||
}
|
||||
|
||||
public override IParseImportListResponse GetParser()
|
||||
|
|
|
@ -40,8 +40,7 @@ namespace NzbDrone.Core.ImportLists.Trakt
|
|||
RefreshToken();
|
||||
}
|
||||
|
||||
var generator = GetRequestGenerator();
|
||||
return FetchMovies(generator.GetMovies());
|
||||
return FetchMovies(g => g.GetMovies());
|
||||
}
|
||||
|
||||
public override IParseImportListResponse GetParser()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue