Fixed: Ignore exclusions in missing movies for collections

Fixes #9966
This commit is contained in:
Bogdan 2024-05-06 23:18:02 +03:00
parent 086a0addba
commit 1090aeff75
2 changed files with 18 additions and 4 deletions

View File

@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Mvc;
using NzbDrone.Common.Extensions; using NzbDrone.Common.Extensions;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.Datastore.Events; using NzbDrone.Core.Datastore.Events;
using NzbDrone.Core.ImportLists.ImportExclusions;
using NzbDrone.Core.Languages; using NzbDrone.Core.Languages;
using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Messaging.Events;
@ -30,6 +31,7 @@ namespace Radarr.Api.V3.Collections
private readonly IMovieService _movieService; private readonly IMovieService _movieService;
private readonly IMovieMetadataService _movieMetadataService; private readonly IMovieMetadataService _movieMetadataService;
private readonly IMovieTranslationService _movieTranslationService; private readonly IMovieTranslationService _movieTranslationService;
private readonly IImportExclusionsService _importExclusionService;
private readonly IConfigService _configService; private readonly IConfigService _configService;
private readonly IBuildFileNames _fileNameBuilder; private readonly IBuildFileNames _fileNameBuilder;
private readonly INamingConfigService _namingService; private readonly INamingConfigService _namingService;
@ -40,6 +42,7 @@ namespace Radarr.Api.V3.Collections
IMovieService movieService, IMovieService movieService,
IMovieMetadataService movieMetadataService, IMovieMetadataService movieMetadataService,
IMovieTranslationService movieTranslationService, IMovieTranslationService movieTranslationService,
IImportExclusionsService importExclusionsService,
IConfigService configService, IConfigService configService,
IBuildFileNames fileNameBuilder, IBuildFileNames fileNameBuilder,
INamingConfigService namingService, INamingConfigService namingService,
@ -50,6 +53,7 @@ namespace Radarr.Api.V3.Collections
_movieService = movieService; _movieService = movieService;
_movieMetadataService = movieMetadataService; _movieMetadataService = movieMetadataService;
_movieTranslationService = movieTranslationService; _movieTranslationService = movieTranslationService;
_importExclusionService = importExclusionsService;
_configService = configService; _configService = configService;
_fileNameBuilder = fileNameBuilder; _fileNameBuilder = fileNameBuilder;
_namingService = namingService; _namingService = namingService;
@ -150,9 +154,11 @@ namespace Radarr.Api.V3.Collections
{ {
// Avoid calling for naming spec on every movie in filenamebuilder // Avoid calling for naming spec on every movie in filenamebuilder
var namingConfig = _namingService.GetConfig(); var namingConfig = _namingService.GetConfig();
var existingMoviesTmdbIds = _movieService.AllMovieWithCollectionsTmdbIds();
var configLanguage = (Language)_configService.MovieInfoLanguage; var configLanguage = (Language)_configService.MovieInfoLanguage;
var existingMoviesTmdbIds = _movieService.AllMovieWithCollectionsTmdbIds();
var listExclusions = _importExclusionService.GetAllExclusions();
var allCollectionMovies = _movieMetadataService.GetMoviesWithCollections() var allCollectionMovies = _movieMetadataService.GetMoviesWithCollections()
.GroupBy(x => x.CollectionTmdbId) .GroupBy(x => x.CollectionTmdbId)
.ToDictionary(x => x.Key, x => (IEnumerable<MovieMetadata>)x); .ToDictionary(x => x.Key, x => (IEnumerable<MovieMetadata>)x);
@ -175,7 +181,9 @@ namespace Radarr.Api.V3.Collections
var movieResource = movie.ToResource(translation); var movieResource = movie.ToResource(translation);
movieResource.Folder = _fileNameBuilder.GetMovieFolder(new Movie { MovieMetadata = movie }, namingConfig); movieResource.Folder = _fileNameBuilder.GetMovieFolder(new Movie { MovieMetadata = movie }, namingConfig);
if (!existingMoviesTmdbIds.Contains(movie.TmdbId)) var isExcluded = listExclusions.Any(e => e.TmdbId == movie.TmdbId);
if (!existingMoviesTmdbIds.Contains(movie.TmdbId) && !isExcluded)
{ {
resource.MissingMovies++; resource.MissingMovies++;
} }
@ -191,10 +199,13 @@ namespace Radarr.Api.V3.Collections
private CollectionResource MapToResource(MovieCollection collection) private CollectionResource MapToResource(MovieCollection collection)
{ {
var resource = collection.ToResource(); var resource = collection.ToResource();
var existingMoviesTmdbIds = _movieService.AllMovieWithCollectionsTmdbIds();
var namingConfig = _namingService.GetConfig(); var namingConfig = _namingService.GetConfig();
var configLanguage = (Language)_configService.MovieInfoLanguage; var configLanguage = (Language)_configService.MovieInfoLanguage;
var existingMoviesTmdbIds = _movieService.AllMovieWithCollectionsTmdbIds();
var listExclusions = _importExclusionService.GetAllExclusions();
foreach (var movie in _movieMetadataService.GetMoviesByCollectionTmdbId(collection.TmdbId)) foreach (var movie in _movieMetadataService.GetMoviesByCollectionTmdbId(collection.TmdbId))
{ {
var translations = _movieTranslationService.GetAllTranslationsForMovieMetadata(movie.Id); var translations = _movieTranslationService.GetAllTranslationsForMovieMetadata(movie.Id);
@ -203,7 +214,9 @@ namespace Radarr.Api.V3.Collections
var movieResource = movie.ToResource(translation); var movieResource = movie.ToResource(translation);
movieResource.Folder = _fileNameBuilder.GetMovieFolder(new Movie { MovieMetadata = movie }, namingConfig); movieResource.Folder = _fileNameBuilder.GetMovieFolder(new Movie { MovieMetadata = movie }, namingConfig);
if (!existingMoviesTmdbIds.Contains(movie.TmdbId)) var isExcluded = listExclusions.Any(e => e.TmdbId == movie.TmdbId);
if (!existingMoviesTmdbIds.Contains(movie.TmdbId) && !isExcluded)
{ {
resource.MissingMovies++; resource.MissingMovies++;
} }

View File

@ -20,6 +20,7 @@ namespace Radarr.Api.V3.Collections
public Ratings Ratings { get; set; } public Ratings Ratings { get; set; }
public List<string> Genres { get; set; } public List<string> Genres { get; set; }
public string Folder { get; set; } public string Folder { get; set; }
public bool IsExcluded { get; set; }
} }
public static class CollectionMovieResourceMapper public static class CollectionMovieResourceMapper