|
|
|
@ -1,17 +1,17 @@
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
using NzbDrone.Common.Extensions;
|
|
|
|
|
using NzbDrone.Core.Configuration;
|
|
|
|
|
using NzbDrone.Core.Datastore.Events;
|
|
|
|
|
using NzbDrone.Core.MediaCover;
|
|
|
|
|
using NzbDrone.Core.Languages;
|
|
|
|
|
using NzbDrone.Core.Messaging.Commands;
|
|
|
|
|
using NzbDrone.Core.Messaging.Events;
|
|
|
|
|
using NzbDrone.Core.Movies;
|
|
|
|
|
using NzbDrone.Core.Movies.Collections;
|
|
|
|
|
using NzbDrone.Core.Movies.Commands;
|
|
|
|
|
using NzbDrone.Core.Movies.Events;
|
|
|
|
|
using NzbDrone.Core.Movies.Translations;
|
|
|
|
|
using NzbDrone.Core.Organizer;
|
|
|
|
|
using NzbDrone.SignalR;
|
|
|
|
|
using Radarr.Http;
|
|
|
|
@ -29,27 +29,30 @@ namespace Radarr.Api.V3.Collections
|
|
|
|
|
private readonly IMovieCollectionService _collectionService;
|
|
|
|
|
private readonly IMovieService _movieService;
|
|
|
|
|
private readonly IMovieMetadataService _movieMetadataService;
|
|
|
|
|
private readonly IMovieTranslationService _movieTranslationService;
|
|
|
|
|
private readonly IConfigService _configService;
|
|
|
|
|
private readonly IBuildFileNames _fileNameBuilder;
|
|
|
|
|
private readonly INamingConfigService _namingService;
|
|
|
|
|
private readonly IMapCoversToLocal _coverMapper;
|
|
|
|
|
private readonly IManageCommandQueue _commandQueueManager;
|
|
|
|
|
|
|
|
|
|
public CollectionController(IBroadcastSignalRMessage signalRBroadcaster,
|
|
|
|
|
IMovieCollectionService collectionService,
|
|
|
|
|
IMovieService movieService,
|
|
|
|
|
IMovieMetadataService movieMetadataService,
|
|
|
|
|
IMovieTranslationService movieTranslationService,
|
|
|
|
|
IConfigService configService,
|
|
|
|
|
IBuildFileNames fileNameBuilder,
|
|
|
|
|
INamingConfigService namingService,
|
|
|
|
|
IMapCoversToLocal coverMapper,
|
|
|
|
|
IManageCommandQueue commandQueueManager)
|
|
|
|
|
: base(signalRBroadcaster)
|
|
|
|
|
{
|
|
|
|
|
_collectionService = collectionService;
|
|
|
|
|
_movieService = movieService;
|
|
|
|
|
_movieMetadataService = movieMetadataService;
|
|
|
|
|
_movieTranslationService = movieTranslationService;
|
|
|
|
|
_configService = configService;
|
|
|
|
|
_fileNameBuilder = fileNameBuilder;
|
|
|
|
|
_namingService = namingService;
|
|
|
|
|
_coverMapper = coverMapper;
|
|
|
|
|
_commandQueueManager = commandQueueManager;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -62,7 +65,6 @@ namespace Radarr.Api.V3.Collections
|
|
|
|
|
public List<CollectionResource> GetCollections(int? tmdbId)
|
|
|
|
|
{
|
|
|
|
|
var collectionResources = new List<CollectionResource>();
|
|
|
|
|
var coverFileInfos = _coverMapper.GetCoverFileInfos();
|
|
|
|
|
|
|
|
|
|
if (tmdbId.HasValue)
|
|
|
|
|
{
|
|
|
|
@ -75,7 +77,7 @@ namespace Radarr.Api.V3.Collections
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
collectionResources = MapToResource(_collectionService.GetAllCollections(), coverFileInfos).ToList();
|
|
|
|
|
collectionResources = MapToResource(_collectionService.GetAllCollections()).ToList();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return collectionResources;
|
|
|
|
@ -137,20 +139,31 @@ namespace Radarr.Api.V3.Collections
|
|
|
|
|
return Accepted(updated);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private IEnumerable<CollectionResource> MapToResource(List<MovieCollection> collections, Dictionary<string, FileInfo> coverFileInfos)
|
|
|
|
|
private IEnumerable<CollectionResource> MapToResource(List<MovieCollection> collections)
|
|
|
|
|
{
|
|
|
|
|
// Avoid calling for naming spec on every movie in filenamebuilder
|
|
|
|
|
var namingConfig = _namingService.GetConfig();
|
|
|
|
|
var collectionMovies = _movieMetadataService.GetMoviesWithCollections();
|
|
|
|
|
var existingMoviesTmdbIds = _movieService.AllMovieWithCollectionsTmdbIds();
|
|
|
|
|
var configLanguage = (Language)_configService.MovieInfoLanguage;
|
|
|
|
|
|
|
|
|
|
var allCollectionMovies = _movieMetadataService.GetMoviesWithCollections()
|
|
|
|
|
.GroupBy(x => x.CollectionTmdbId)
|
|
|
|
|
.ToDictionary(x => x.Key, x => (IEnumerable<MovieMetadata>)x);
|
|
|
|
|
|
|
|
|
|
var translations = _movieTranslationService.GetAllTranslationsForLanguage(configLanguage);
|
|
|
|
|
var tdict = translations.ToDictionary(x => x.MovieMetadataId);
|
|
|
|
|
|
|
|
|
|
foreach (var collection in collections)
|
|
|
|
|
{
|
|
|
|
|
var resource = collection.ToResource();
|
|
|
|
|
|
|
|
|
|
foreach (var movie in collectionMovies.Where(m => m.CollectionTmdbId == collection.TmdbId))
|
|
|
|
|
allCollectionMovies.TryGetValue(collection.TmdbId, out var collectionMovies);
|
|
|
|
|
|
|
|
|
|
foreach (var movie in collectionMovies)
|
|
|
|
|
{
|
|
|
|
|
var movieResource = movie.ToResource();
|
|
|
|
|
var translation = GetTranslationFromDict(tdict, movie, configLanguage);
|
|
|
|
|
|
|
|
|
|
var movieResource = movie.ToResource(translation);
|
|
|
|
|
movieResource.Folder = _fileNameBuilder.GetMovieFolder(new Movie { MovieMetadata = movie }, namingConfig);
|
|
|
|
|
|
|
|
|
|
if (!existingMoviesTmdbIds.Contains(movie.TmdbId))
|
|
|
|
@ -161,8 +174,6 @@ namespace Radarr.Api.V3.Collections
|
|
|
|
|
resource.Movies.Add(movieResource);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MapCoversToLocal(resource.Movies, coverFileInfos);
|
|
|
|
|
|
|
|
|
|
yield return resource;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -172,13 +183,15 @@ namespace Radarr.Api.V3.Collections
|
|
|
|
|
var resource = collection.ToResource();
|
|
|
|
|
var existingMoviesTmdbIds = _movieService.AllMovieWithCollectionsTmdbIds();
|
|
|
|
|
var namingConfig = _namingService.GetConfig();
|
|
|
|
|
var configLanguage = (Language)_configService.MovieInfoLanguage;
|
|
|
|
|
|
|
|
|
|
foreach (var movie in _movieMetadataService.GetMoviesByCollectionTmdbId(collection.TmdbId))
|
|
|
|
|
{
|
|
|
|
|
var movieResource = movie.ToResource();
|
|
|
|
|
movieResource.Folder = _fileNameBuilder.GetMovieFolder(new Movie { MovieMetadata = movie }, namingConfig);
|
|
|
|
|
var translations = _movieTranslationService.GetAllTranslationsForMovieMetadata(movie.Id);
|
|
|
|
|
var translation = GetMovieTranslation(translations, movie, configLanguage);
|
|
|
|
|
|
|
|
|
|
_coverMapper.ConvertToLocalUrls(0, movieResource.Images);
|
|
|
|
|
var movieResource = movie.ToResource(translation);
|
|
|
|
|
movieResource.Folder = _fileNameBuilder.GetMovieFolder(new Movie { MovieMetadata = movie }, namingConfig);
|
|
|
|
|
|
|
|
|
|
if (!existingMoviesTmdbIds.Contains(movie.TmdbId))
|
|
|
|
|
{
|
|
|
|
@ -191,9 +204,52 @@ namespace Radarr.Api.V3.Collections
|
|
|
|
|
return resource;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void MapCoversToLocal(IEnumerable<CollectionMovieResource> movies, Dictionary<string, FileInfo> coverFileInfos)
|
|
|
|
|
private MovieTranslation GetMovieTranslation(List<MovieTranslation> translations, MovieMetadata movieMetadata, Language configLanguage)
|
|
|
|
|
{
|
|
|
|
|
_coverMapper.ConvertToLocalUrls(movies.Select(x => Tuple.Create(0, x.Images.AsEnumerable())), coverFileInfos);
|
|
|
|
|
if (configLanguage == Language.Original)
|
|
|
|
|
{
|
|
|
|
|
return new MovieTranslation
|
|
|
|
|
{
|
|
|
|
|
Title = movieMetadata.OriginalTitle,
|
|
|
|
|
Overview = movieMetadata.Overview
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var translation = translations.FirstOrDefault(t => t.Language == configLanguage && t.MovieMetadataId == movieMetadata.Id);
|
|
|
|
|
|
|
|
|
|
if (translation == null)
|
|
|
|
|
{
|
|
|
|
|
translation = new MovieTranslation
|
|
|
|
|
{
|
|
|
|
|
Title = movieMetadata.Title,
|
|
|
|
|
Language = Language.English
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return translation;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private MovieTranslation GetTranslationFromDict(Dictionary<int, MovieTranslation> translations, MovieMetadata movieMetadata, Language configLanguage)
|
|
|
|
|
{
|
|
|
|
|
if (configLanguage == Language.Original)
|
|
|
|
|
{
|
|
|
|
|
return new MovieTranslation
|
|
|
|
|
{
|
|
|
|
|
Title = movieMetadata.OriginalTitle,
|
|
|
|
|
Overview = movieMetadata.Overview
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!translations.TryGetValue(movieMetadata.Id, out var translation))
|
|
|
|
|
{
|
|
|
|
|
translation = new MovieTranslation
|
|
|
|
|
{
|
|
|
|
|
Title = movieMetadata.Title,
|
|
|
|
|
Language = Language.English
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return translation;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[NonAction]
|
|
|
|
|