From e54eda905b1c140c8e1ff19a645645feee613c33 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 17 Sep 2024 00:21:29 +0300 Subject: [PATCH] New: Filters for TMDb Person lists --- .../TMDb/Company/TMDbCompanyImport.cs | 16 ++-- .../TMDb/Keyword/TMDbKeywordImport.cs | 16 ++-- .../ImportLists/TMDb/List/TMDbListImport.cs | 6 +- .../TMDb/Person/TMDbPersonImport.cs | 16 ++-- .../TMDb/Person/TMDbPersonParser.cs | 40 ++++++++- .../TMDb/Person/TMDbPersonRequestGenerator.cs | 8 +- .../TMDb/Person/TMDbPersonSettings.cs | 30 ++++++- .../TMDb/Popular/TMDbPopularImport.cs | 16 ++-- .../ImportLists/TMDb/TMDBResources.cs | 27 +++++- .../ImportLists/TMDb/TMDbImportBase.cs | 90 +++++++++++++++++-- .../ImportLists/TMDb/User/TMDbUserImport.cs | 16 ++-- 11 files changed, 218 insertions(+), 63 deletions(-) diff --git a/src/NzbDrone.Core/ImportLists/TMDb/Company/TMDbCompanyImport.cs b/src/NzbDrone.Core/ImportLists/TMDb/Company/TMDbCompanyImport.cs index bd52d5ec9..a7cbda63f 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/Company/TMDbCompanyImport.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/Company/TMDbCompanyImport.cs @@ -1,29 +1,29 @@ using NLog; +using NzbDrone.Common.Cache; using NzbDrone.Common.Cloud; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; -using NzbDrone.Core.MetadataSource; using NzbDrone.Core.Parser; namespace NzbDrone.Core.ImportLists.TMDb.Company { public class TMDbCompanyImport : TMDbImportListBase { + public override string Name => "TMDb Company"; + public override bool Enabled => true; + public override bool EnableAuto => false; + public TMDbCompanyImport(IRadarrCloudRequestBuilder requestBuilder, IHttpClient httpClient, IImportListStatusService importListStatusService, IConfigService configService, IParsingService parsingService, - ISearchForNewMovie searchForNewMovie, + ICacheManager cacheManager, Logger logger) - : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, searchForNewMovie, logger) + : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, cacheManager, logger) { } - public override string Name => "TMDb Company"; - public override bool Enabled => true; - public override bool EnableAuto => false; - public override IParseImportListResponse GetParser() { return new TMDbCompanyParser(); @@ -31,7 +31,7 @@ namespace NzbDrone.Core.ImportLists.TMDb.Company public override IImportListRequestGenerator GetRequestGenerator() { - return new TMDbCompanyRequestGenerator() + return new TMDbCompanyRequestGenerator { RequestBuilder = _requestBuilder, Settings = Settings, diff --git a/src/NzbDrone.Core/ImportLists/TMDb/Keyword/TMDbKeywordImport.cs b/src/NzbDrone.Core/ImportLists/TMDb/Keyword/TMDbKeywordImport.cs index 39b113561..062da9713 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/Keyword/TMDbKeywordImport.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/Keyword/TMDbKeywordImport.cs @@ -1,29 +1,29 @@ using NLog; +using NzbDrone.Common.Cache; using NzbDrone.Common.Cloud; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; -using NzbDrone.Core.MetadataSource; using NzbDrone.Core.Parser; namespace NzbDrone.Core.ImportLists.TMDb.Keyword { public class TMDbKeywordImport : TMDbImportListBase { + public override string Name => "TMDb Keyword"; + public override bool Enabled => true; + public override bool EnableAuto => false; + public TMDbKeywordImport(IRadarrCloudRequestBuilder requestBuilder, IHttpClient httpClient, IImportListStatusService importListStatusService, IConfigService configService, IParsingService parsingService, - ISearchForNewMovie searchForNewMovie, + ICacheManager cacheManager, Logger logger) - : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, searchForNewMovie, logger) + : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, cacheManager, logger) { } - public override string Name => "TMDb Keyword"; - public override bool Enabled => true; - public override bool EnableAuto => false; - public override IParseImportListResponse GetParser() { return new TMDbKeywordParser(); @@ -31,7 +31,7 @@ namespace NzbDrone.Core.ImportLists.TMDb.Keyword public override IImportListRequestGenerator GetRequestGenerator() { - return new TMDbKeywordRequestGenerator() + return new TMDbKeywordRequestGenerator { RequestBuilder = _requestBuilder, Settings = Settings, diff --git a/src/NzbDrone.Core/ImportLists/TMDb/List/TMDbListImport.cs b/src/NzbDrone.Core/ImportLists/TMDb/List/TMDbListImport.cs index 169d5fc52..866b99474 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/List/TMDbListImport.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/List/TMDbListImport.cs @@ -1,8 +1,8 @@ using NLog; +using NzbDrone.Common.Cache; using NzbDrone.Common.Cloud; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; -using NzbDrone.Core.MetadataSource; using NzbDrone.Core.Parser; namespace NzbDrone.Core.ImportLists.TMDb.List @@ -19,9 +19,9 @@ namespace NzbDrone.Core.ImportLists.TMDb.List IImportListStatusService importListStatusService, IConfigService configService, IParsingService parsingService, - ISearchForNewMovie searchForNewMovie, + ICacheManager cacheManager, Logger logger) - : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, searchForNewMovie, logger) + : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, cacheManager, logger) { } diff --git a/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonImport.cs b/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonImport.cs index aa09d299c..7025fb748 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonImport.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonImport.cs @@ -1,29 +1,29 @@ using NLog; +using NzbDrone.Common.Cache; using NzbDrone.Common.Cloud; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; -using NzbDrone.Core.MetadataSource; using NzbDrone.Core.Parser; namespace NzbDrone.Core.ImportLists.TMDb.Person { public class TMDbPersonImport : TMDbImportListBase { + public override string Name => "TMDb Person"; + public override bool Enabled => true; + public override bool EnableAuto => false; + public TMDbPersonImport(IRadarrCloudRequestBuilder requestBuilder, IHttpClient httpClient, IImportListStatusService importListStatusService, IConfigService configService, IParsingService parsingService, - ISearchForNewMovie searchForNewMovie, + ICacheManager cacheManager, Logger logger) - : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, searchForNewMovie, logger) + : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, cacheManager, logger) { } - public override string Name => "TMDb Person"; - public override bool Enabled => true; - public override bool EnableAuto => false; - public override IParseImportListResponse GetParser() { return new TMDbPersonParser(Settings); @@ -31,7 +31,7 @@ namespace NzbDrone.Core.ImportLists.TMDb.Person public override IImportListRequestGenerator GetRequestGenerator() { - return new TMDbPersonRequestGenerator() + return new TMDbPersonRequestGenerator { RequestBuilder = _requestBuilder, Settings = Settings, diff --git a/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonParser.cs b/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonParser.cs index 08a25aeec..52231df82 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonParser.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonParser.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using Newtonsoft.Json; using NzbDrone.Common.Extensions; using NzbDrone.Core.ImportLists.ImportListMovies; @@ -35,7 +36,9 @@ namespace NzbDrone.Core.ImportLists.TMDb.Person if (_settings.PersonCast) { - foreach (var movie in jsonResponse.Cast) + var castMovies = FilterResults(jsonResponse.Cast); + + foreach (var movie in castMovies) { // Movies with no Year Fix if (string.IsNullOrWhiteSpace(movie.ReleaseDate)) @@ -49,7 +52,9 @@ namespace NzbDrone.Core.ImportLists.TMDb.Person if (crewTypes.Count > 0) { - foreach (var movie in jsonResponse.Crew) + var crewMovies = FilterResults(jsonResponse.Crew); + + foreach (var movie in crewMovies) { // Movies with no Year Fix if (string.IsNullOrWhiteSpace(movie.ReleaseDate)) @@ -67,9 +72,36 @@ namespace NzbDrone.Core.ImportLists.TMDb.Person return movies; } - private List GetCrewDepartments() + private IEnumerable FilterResults(IReadOnlyCollection results) + { + var items = results.ToList(); + + if (_settings.MinVoteAverage.HasValue) + { + items = items.Where(r => _settings.MinVoteAverage.Value <= r.VoteAverage).ToList(); + } + + if (_settings.MinVotes.HasValue) + { + items = items.Where(r => _settings.MinVotes.Value <= r.VoteCount).ToList(); + } + + if (_settings.GenreIds.Any()) + { + items = items.Where(r => r.GenreIds is { Count: > 0 } && _settings.GenreIds.Intersect(r.GenreIds).Any()).ToList(); + } + + if (_settings.LanguageCodes.Any()) + { + items = items.Where(r => r.OriginalLanguage.IsNotNullOrWhiteSpace() && _settings.LanguageCodes.Contains(r.OriginalLanguage)).ToList(); + } + + return items; + } + + private HashSet GetCrewDepartments() { - var creditsDepartment = new List(); + var creditsDepartment = new HashSet(); if (_settings.PersonCastDirector) { diff --git a/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonRequestGenerator.cs b/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonRequestGenerator.cs index d793ef3e0..9ac0d008a 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonRequestGenerator.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonRequestGenerator.cs @@ -24,13 +24,15 @@ namespace NzbDrone.Core.ImportLists.TMDb.Person { Logger.Info("Importing TMDb movies from person: {0}", Settings.PersonId); - var requestBuilder = RequestBuilder.Create() + var request = RequestBuilder.Create() .SetSegment("api", "3") .SetSegment("route", "person") .SetSegment("id", Settings.PersonId) - .SetSegment("secondaryRoute", "/movie_credits"); + .SetSegment("secondaryRoute", "/movie_credits") + .Accept(HttpAccept.Json) + .Build(); - yield return new ImportListRequest(requestBuilder.Accept(HttpAccept.Json).Build()); + yield return new ImportListRequest(request); } } } diff --git a/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonSettings.cs b/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonSettings.cs index 1cc836cae..c7e81b93b 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonSettings.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/Person/TMDbPersonSettings.cs @@ -1,3 +1,5 @@ +using System; +using System.Collections.Generic; using System.Text.RegularExpressions; using FluentValidation; using NzbDrone.Core.Annotations; @@ -15,22 +17,36 @@ namespace NzbDrone.Core.ImportLists.TMDb.Person .Equal(true) .Unless(c => c.PersonCastDirector || c.PersonCastProducer || c.PersonCastSound || c.PersonCastWriting) .WithMessage("Must Select One Credit Type Option"); + RuleFor(c => c.PersonCastDirector) .Equal(true) .Unless(c => c.PersonCast || c.PersonCastProducer || c.PersonCastSound || c.PersonCastWriting) .WithMessage("Must Select One Credit Type Option"); + RuleFor(c => c.PersonCastProducer) .Equal(true) .Unless(c => c.PersonCastDirector || c.PersonCast || c.PersonCastSound || c.PersonCastWriting) .WithMessage("Must Select One Credit Type Option"); + RuleFor(c => c.PersonCastSound) .Equal(true) .Unless(c => c.PersonCastDirector || c.PersonCastProducer || c.PersonCast || c.PersonCastWriting) .WithMessage("Must Select One Credit Type Option"); + RuleFor(c => c.PersonCastWriting) .Equal(true) .Unless(c => c.PersonCastDirector || c.PersonCastProducer || c.PersonCastSound || c.PersonCast) .WithMessage("Must Select One Credit Type Option"); + + RuleFor(c => c.MinVoteAverage) + .InclusiveBetween(0, 10) + .When(c => c.MinVoteAverage.HasValue) + .WithMessage("Minimum vote average must be between 0.0 and 10.0"); + + RuleFor(c => c.MinVotes) + .GreaterThan(0) + .When(c => c.MinVotes.HasValue) + .WithMessage("Minimum votes must be greater than 0"); } } @@ -43,7 +59,7 @@ namespace NzbDrone.Core.ImportLists.TMDb.Person PersonId = ""; } - [FieldDefinition(1, Label = "PersonId", Type = FieldType.Textbox, HelpText = "TMDb Id of Person to Follow")] + [FieldDefinition(1, Label = "Person Id", Type = FieldType.Textbox, HelpText = "TMDb Id of Person to Follow")] public string PersonId { get; set; } [FieldDefinition(2, Label = "Person Cast", HelpText = "Select if you want to include Cast credits", Type = FieldType.Checkbox)] @@ -61,6 +77,18 @@ namespace NzbDrone.Core.ImportLists.TMDb.Person [FieldDefinition(6, Label = "Person Writing Credits", HelpText = "Select if you want to include Writing credits", Type = FieldType.Checkbox)] public bool PersonCastWriting { get; set; } + [FieldDefinition(7, Label = "Minimum Vote Average", HelpText = "Filter movies by votes (0.0-10.0)")] + public double? MinVoteAverage { get; set; } + + [FieldDefinition(8, Label = "Minimum Number of Votes", HelpText = "Filter movies by number of votes")] + public int? MinVotes { get; set; } + + [FieldDefinition(9, Label = "Genres", Type = FieldType.Select, SelectOptionsProviderAction = "getTmdbGenres", HelpText = "Filter movies by TMDb Genre Ids")] + public IEnumerable GenreIds { get; set; } = Array.Empty(); + + [FieldDefinition(10, Label = "Original Languages", Type = FieldType.Select, SelectOptionsProviderAction = "getTmdbLanguages", HelpText = "Filter by Languages")] + public IEnumerable LanguageCodes { get; set; } = Array.Empty(); + public override NzbDroneValidationResult Validate() { return new NzbDroneValidationResult(Validator.Validate(this)); diff --git a/src/NzbDrone.Core/ImportLists/TMDb/Popular/TMDbPopularImport.cs b/src/NzbDrone.Core/ImportLists/TMDb/Popular/TMDbPopularImport.cs index 4a064d4b7..080d16a49 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/Popular/TMDbPopularImport.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/Popular/TMDbPopularImport.cs @@ -1,29 +1,29 @@ using NLog; +using NzbDrone.Common.Cache; using NzbDrone.Common.Cloud; using NzbDrone.Common.Http; using NzbDrone.Core.Configuration; -using NzbDrone.Core.MetadataSource; using NzbDrone.Core.Parser; namespace NzbDrone.Core.ImportLists.TMDb.Popular { public class TMDbPopularImport : TMDbImportListBase { + public override string Name => "TMDb Popular"; + public override bool Enabled => true; + public override bool EnableAuto => false; + public TMDbPopularImport(IRadarrCloudRequestBuilder requestBuilder, IHttpClient httpClient, IImportListStatusService importListStatusService, IConfigService configService, IParsingService parsingService, - ISearchForNewMovie searchForNewMovie, + ICacheManager cacheManager, Logger logger) - : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, searchForNewMovie, logger) + : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, cacheManager, logger) { } - public override string Name => "TMDb Popular"; - public override bool Enabled => true; - public override bool EnableAuto => false; - public override IParseImportListResponse GetParser() { return new TMDbParser(); @@ -31,7 +31,7 @@ namespace NzbDrone.Core.ImportLists.TMDb.Popular public override IImportListRequestGenerator GetRequestGenerator() { - return new TMDbPopularRequestGenerator() + return new TMDbPopularRequestGenerator { RequestBuilder = _requestBuilder, Settings = Settings, diff --git a/src/NzbDrone.Core/ImportLists/TMDb/TMDBResources.cs b/src/NzbDrone.Core/ImportLists/TMDb/TMDBResources.cs index 9a913149f..0865e0bad 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/TMDBResources.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/TMDBResources.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using Newtonsoft.Json; namespace NzbDrone.Core.ImportLists.TMDb @@ -40,7 +41,7 @@ namespace NzbDrone.Core.ImportLists.TMDb public string ReleaseDate { get; set; } [JsonProperty("genre_ids")] - public int?[] GenreIds { get; set; } + public IReadOnlyCollection GenreIds { get; set; } public int Id { get; set; } [JsonProperty("original_title")] @@ -118,9 +119,9 @@ namespace NzbDrone.Core.ImportLists.TMDb public class PersonCreditsResource { - public CreditsResultResource[] Cast { get; set; } - public CreditsResultResource[] Crew { get; set; } public int Id { get; set; } + public IReadOnlyCollection Cast { get; set; } + public IReadOnlyCollection Crew { get; set; } } public class ListItemResource : MovieResultResource @@ -133,4 +134,24 @@ namespace NzbDrone.Core.ImportLists.TMDb [JsonProperty("original_name")] public string OriginalName { get; set; } } + + public class LanguageResource + { + [JsonProperty("iso_639_1")] + public string Language { get; set; } + public string Name { get; set; } + [JsonProperty("english_name")] + public string EnglishName { get; set; } + } + + public class GenresResponseResource + { + public IReadOnlyCollection Genres { get; set; } + } + + public class GenreResource + { + public int Id { get; set; } + public string Name { get; set; } + } } diff --git a/src/NzbDrone.Core/ImportLists/TMDb/TMDbImportBase.cs b/src/NzbDrone.Core/ImportLists/TMDb/TMDbImportBase.cs index 48262edf9..2b1af2a71 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/TMDbImportBase.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/TMDbImportBase.cs @@ -1,9 +1,12 @@ using System; +using System.Collections.Generic; +using System.Linq; using NLog; +using NzbDrone.Common.Cache; using NzbDrone.Common.Cloud; using NzbDrone.Common.Http; +using NzbDrone.Common.Serializer; using NzbDrone.Core.Configuration; -using NzbDrone.Core.MetadataSource; using NzbDrone.Core.Parser; namespace NzbDrone.Core.ImportLists.TMDb @@ -15,20 +18,89 @@ namespace NzbDrone.Core.ImportLists.TMDb public override TimeSpan MinRefreshInterval => TimeSpan.FromHours(12); public override int PageSize => 20; - public readonly ISearchForNewMovie _skyhookProxy; public readonly IHttpRequestBuilderFactory _requestBuilder; + private readonly ICached _cacheOptions; + protected TMDbImportListBase(IRadarrCloudRequestBuilder requestBuilder, - IHttpClient httpClient, - IImportListStatusService importListStatusService, - IConfigService configService, - IParsingService parsingService, - ISearchForNewMovie skyhookProxy, - Logger logger) + IHttpClient httpClient, + IImportListStatusService importListStatusService, + IConfigService configService, + IParsingService parsingService, + ICacheManager cacheManager, + Logger logger) : base(httpClient, importListStatusService, configService, parsingService, logger) { - _skyhookProxy = skyhookProxy; _requestBuilder = requestBuilder.TMDB; + + _cacheOptions = cacheManager.GetCache(GetType()); + } + + public override object RequestAction(string action, IDictionary query) + { + if (action == "getTmdbGenres") + { + var genres = _cacheOptions.Get("tmdb_genres", FetchTmdbGenres, TimeSpan.FromDays(1)); + + return new + { + options = genres + }; + } + + if (action == "getTmdbLanguages") + { + var languages = _cacheOptions.Get("tmdb_languages", FetchTmdbLanguages, TimeSpan.FromDays(1)); + + return new + { + options = languages + }; + } + + return new { }; + } + + private object FetchTmdbGenres() + { + var request = _requestBuilder.Create() + .SetSegment("api", "3") + .SetSegment("route", "genre") + .SetSegment("id", "") + .SetSegment("secondaryRoute", "movie/list") + .Build(); + + var genres = Json.Deserialize(_httpClient.Execute(request).Content); + + return genres.Genres + .OrderBy(r => r.Name, StringComparer.InvariantCultureIgnoreCase) + .Select(r => new + { + Value = r.Id, + Name = r.Name, + Hint = $"{r.Id}" + }); + } + + private object FetchTmdbLanguages() + { + var request = _requestBuilder.Create() + .SetSegment("api", "3") + .SetSegment("route", "configuration") + .SetSegment("id", "") + .SetSegment("secondaryRoute", "languages") + .Build(); + + var languages = Json.Deserialize>(_httpClient.Execute(request).Content); + + return languages + .OrderBy(r => r.Language, StringComparer.InvariantCultureIgnoreCase) + .Select(r => new + { + Value = r.Language, + Name = r.Language, + Hint = r.EnglishName + }); } } } diff --git a/src/NzbDrone.Core/ImportLists/TMDb/User/TMDbUserImport.cs b/src/NzbDrone.Core/ImportLists/TMDb/User/TMDbUserImport.cs index 6a905b989..ca6df6c41 100644 --- a/src/NzbDrone.Core/ImportLists/TMDb/User/TMDbUserImport.cs +++ b/src/NzbDrone.Core/ImportLists/TMDb/User/TMDbUserImport.cs @@ -1,32 +1,32 @@ using System.Collections.Generic; using System.Net.Http; using NLog; +using NzbDrone.Common.Cache; using NzbDrone.Common.Cloud; using NzbDrone.Common.Http; using NzbDrone.Common.Serializer; using NzbDrone.Core.Configuration; -using NzbDrone.Core.MetadataSource; using NzbDrone.Core.Parser; namespace NzbDrone.Core.ImportLists.TMDb.User { public class TMDbUserImport : TMDbImportListBase { + public override string Name => "TMDb User"; + public override bool Enabled => true; + public override bool EnableAuto => false; + public TMDbUserImport(IRadarrCloudRequestBuilder requestBuilder, IHttpClient httpClient, IImportListStatusService importListStatusService, IConfigService configService, IParsingService parsingService, - ISearchForNewMovie searchForNewMovie, + ICacheManager cacheManager, Logger logger) - : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, searchForNewMovie, logger) + : base(requestBuilder, httpClient, importListStatusService, configService, parsingService, cacheManager, logger) { } - public override string Name => "TMDb User"; - public override bool Enabled => true; - public override bool EnableAuto => false; - public override IParseImportListResponse GetParser() { return new TMDbParser(); @@ -34,7 +34,7 @@ namespace NzbDrone.Core.ImportLists.TMDb.User public override IImportListRequestGenerator GetRequestGenerator() { - return new TMDbUserRequestGenerator() + return new TMDbUserRequestGenerator { RequestBuilder = _requestBuilder, Settings = Settings,