1
0
mirror of https://github.com/Radarr/Radarr.git synced 2024-10-03 22:57:18 +02:00

Check if import list items are valid before importing

Co-authored-by: Qstick <qstick@gmail.com>
This commit is contained in:
Bogdan 2023-09-03 02:25:32 +03:00
parent 9a0ca650a3
commit e73d05c0fe
5 changed files with 31 additions and 28 deletions

View File

@ -39,35 +39,41 @@ protected HttpImportListBase(IHttpClient httpClient, IImportListStatusService im
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 @@ protected virtual ImportListFetchResult FetchMovies(ImportListPageableRequestCha
}
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 @@ protected virtual ImportListFetchResult FetchMovies(ImportListPageableRequestCha
}
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 @@ protected virtual ImportListFetchResult FetchMovies(ImportListPageableRequestCha
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);

View File

@ -37,8 +37,7 @@ public override ImportListFetchResult Fetch()
{
Settings.Validate().Filter("AccessToken").ThrowOnError();
var generator = GetRequestGenerator();
return FetchMovies(generator.GetMovies());
return FetchMovies(g => g.GetMovies());
}
public override IParseImportListResponse GetParser()

View File

@ -22,9 +22,7 @@ public RssImportBase(IHttpClient httpClient,
public override ImportListFetchResult Fetch()
{
var generator = GetRequestGenerator();
return FetchMovies(generator.GetMovies());
return FetchMovies(g => g.GetMovies());
}
public override IParseImportListResponse GetParser()

View File

@ -53,9 +53,7 @@ public override ImportListFetchResult Fetch()
return new ImportListFetchResult();
}
var generator = GetRequestGenerator();
return FetchMovies(generator.GetMovies());
return FetchMovies(g => g.GetMovies());
}
public override IParseImportListResponse GetParser()

View File

@ -40,8 +40,7 @@ public override ImportListFetchResult Fetch()
RefreshToken();
}
var generator = GetRequestGenerator();
return FetchMovies(generator.GetMovies());
return FetchMovies(g => g.GetMovies());
}
public override IParseImportListResponse GetParser()