Radarr/src/NzbDrone.Core/ImportLists/TMDb/Popular/TMDbPopularRequestGenerator.cs

112 lines
4.2 KiB
C#
Raw Normal View History

using System;
2019-12-15 07:34:27 +00:00
using System.Collections.Generic;
using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http;
namespace NzbDrone.Core.ImportLists.TMDb.Popular
2019-12-15 07:34:27 +00:00
{
public class TMDbPopularRequestGenerator : IImportListRequestGenerator
2019-12-15 07:34:27 +00:00
{
public TMDbPopularSettings Settings { get; set; }
public IHttpClient HttpClient { get; set; }
public IHttpRequestBuilderFactory RequestBuilder { get; set; }
public Logger Logger { get; set; }
public int MaxPages { get; set; }
public TMDbPopularRequestGenerator()
{
MaxPages = 3;
}
public virtual ImportListPageableRequestChain GetMovies()
2019-12-15 07:34:27 +00:00
{
var pageableRequests = new ImportListPageableRequestChain();
2019-12-15 07:34:27 +00:00
pageableRequests.Add(GetMoviesRequests());
return pageableRequests;
}
private IEnumerable<ImportListRequest> GetMoviesRequests()
2019-12-15 07:34:27 +00:00
{
var minVoteCount = Settings.FilterCriteria.MinVotes;
var minVoteAverage = Settings.FilterCriteria.MinVoteAverage;
var certification = Settings.FilterCriteria.Certification;
2019-12-15 07:34:27 +00:00
var includeGenreIds = Settings.FilterCriteria.IncludeGenreIds;
var excludeGenreIds = Settings.FilterCriteria.ExcludeGenreIds;
var languageCode = Settings.FilterCriteria.LanguageCode;
2019-12-15 07:34:27 +00:00
var todaysDate = DateTime.Now.ToString("yyyy-MM-dd");
var threeMonthsAgo = DateTime.Parse(todaysDate).AddMonths(-3).ToString("yyyy-MM-dd");
var threeMonthsFromNow = DateTime.Parse(todaysDate).AddMonths(3).ToString("yyyy-MM-dd");
var requestBuilder = RequestBuilder.Create()
.SetSegment("api", "3")
.SetSegment("route", "discover")
.SetSegment("id", "")
.SetSegment("secondaryRoute", "movie")
.Accept(HttpAccept.Json);
2019-12-15 07:34:27 +00:00
switch (Settings.TMDbListType)
2019-12-15 07:34:27 +00:00
{
case (int)TMDbPopularListType.Theaters:
requestBuilder.AddQueryParam("primary_release_date.gte", threeMonthsAgo)
2019-12-15 07:34:27 +00:00
.AddQueryParam("primary_release_date.lte", todaysDate);
break;
case (int)TMDbPopularListType.Popular:
requestBuilder.AddQueryParam("sort_by", "popularity.desc");
break;
case (int)TMDbPopularListType.Top:
requestBuilder.AddQueryParam("sort_by", "vote_average.desc");
break;
case (int)TMDbPopularListType.Upcoming:
requestBuilder.AddQueryParam("primary_release_date.gte", todaysDate)
2019-12-15 07:34:27 +00:00
.AddQueryParam("primary_release_date.lte", threeMonthsFromNow);
break;
}
if (certification.IsNotNullOrWhiteSpace())
2019-12-15 07:34:27 +00:00
{
requestBuilder.AddQueryParam("certification", certification)
2019-12-15 07:34:27 +00:00
.AddQueryParam("certification_country", "US");
}
if (minVoteCount.IsNotNullOrWhiteSpace())
{
requestBuilder.AddQueryParam("vote_count.gte", minVoteCount);
}
if (minVoteAverage.IsNotNullOrWhiteSpace())
{
requestBuilder.AddQueryParam("vote_average.gte", minVoteAverage);
}
if (includeGenreIds.IsNotNullOrWhiteSpace())
{
requestBuilder.AddQueryParam("with_genres", includeGenreIds);
}
if (excludeGenreIds.IsNotNullOrWhiteSpace())
{
requestBuilder.AddQueryParam("without_genres", excludeGenreIds);
}
if (languageCode.HasValue)
{
requestBuilder.AddQueryParam("with_original_language", (TMDbLanguageCodes)languageCode);
}
2019-12-15 07:34:27 +00:00
for (var pageNumber = 1; pageNumber <= MaxPages; pageNumber++)
{
Logger.Info($"Importing TMDb movies from: {requestBuilder.BaseUrl}&page={pageNumber}");
requestBuilder.AddQueryParam("page", pageNumber, true);
yield return new ImportListRequest(requestBuilder.Build());
2019-12-15 07:34:27 +00:00
}
}
}
}