Check if import list items are valid before importing

Co-authored-by: Qstick <qstick@gmail.com>
pull/9124/head v5.0.1.7993
Bogdan 2 years ago
parent 9a0ca650a3
commit e73d05c0fe

@ -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…
Cancel
Save