This commit is contained in:
Qstick 2022-03-26 17:00:14 -05:00
parent 8a3622fd82
commit a936ab2504
17 changed files with 51 additions and 75 deletions

View file

@ -34,7 +34,7 @@ namespace NzbDrone.Core.Test.Housekeeping.Housekeepers
Db.Insert(collection);
var movie = Builder<Movie>.CreateNew().With(m => m.CollectionId = collection.Id).BuildNew();
var movie = Builder<MovieMetadata>.CreateNew().With(m => m.CollectionId = collection.Id).BuildNew();
Db.Insert(movie);

View file

@ -251,7 +251,7 @@ namespace NzbDrone.Core.Extras.Metadata.Consumers.Xbmc
details.Add(new XElement("country"));
if (movie.MovieMetadata.Value.Collection?.Name != null)
if (movie.MovieMetadata.Value.Collection?.Value.Title != null)
{
var setElement = new XElement("set");

View file

@ -510,35 +510,12 @@ namespace NzbDrone.Core.MetadataSource.SkyHook
CleanTitle = arg.Name.CleanMovieTitle(),
SortTitle = Parser.Parser.NormalizeTitle(arg.Name),
Images = arg.Images?.Select(MapImage).ToList() ?? new List<MediaCover.MediaCover>(),
Movies = arg.Parts?.Select(x => MapCollectionMovie(x)).ToList() ?? new List<CollectionMovie>()
MovieMetadata = arg.Parts?.Select(x => MapMovie(x)).ToList() ?? new List<MovieMetadata>()
};
return collection;
}
private static CollectionMovie MapCollectionMovie(MovieResource movieResult)
{
var movie = new CollectionMovie
{
TmdbId = movieResult.TmdbId,
ImdbId = movieResult.ImdbId,
Overview = movieResult.Overview,
Title = movieResult.Title,
SortTitle = Parser.Parser.NormalizeTitle(movieResult.Title),
Images = movieResult.Images.Select(MapImage).ToList(),
Year = movieResult.Year,
Ratings = MapRatings(movieResult.MovieRatings) ?? new Ratings(),
Genres = movieResult.Genres
};
if (movieResult.Runtime != null)
{
movie.Runtime = movieResult.Runtime.Value;
}
return movie;
}
private static Credit MapCast(CastResource arg)
{
var newActor = new Credit

View file

@ -26,6 +26,7 @@ namespace NzbDrone.Core.Movies
private readonly IMovieService _movieService;
private readonly IMovieMetadataService _movieMetadataService;
private readonly IAddMovieCollectionService _collectionService;
private readonly IRootFolderService _folderService;
private readonly IProvideMovieInfo _movieInfo;
private readonly IBuildFileNames _fileNameBuilder;
private readonly IAddMovieValidator _addMovieValidator;
@ -34,6 +35,7 @@ namespace NzbDrone.Core.Movies
public AddMovieService(IMovieService movieService,
IMovieMetadataService movieMetadataService,
IAddMovieCollectionService collectionService,
IRootFolderService folderService,
IProvideMovieInfo movieInfo,
IBuildFileNames fileNameBuilder,
IAddMovieValidator addMovieValidator,
@ -42,6 +44,7 @@ namespace NzbDrone.Core.Movies
_movieService = movieService;
_movieMetadataService = movieMetadataService;
_collectionService = collectionService;
_folderService = folderService;
_movieInfo = movieInfo;
_fileNameBuilder = fileNameBuilder;
_addMovieValidator = addMovieValidator;
@ -57,16 +60,16 @@ namespace NzbDrone.Core.Movies
_logger.Info("Adding Movie {0} Path: [{1}]", newMovie, newMovie.Path);
_movieMetadataService.Upsert(newMovie.MovieMetadata.Value);
newMovie.MovieMetadataId = newMovie.MovieMetadata.Value.Id;
// add collection
if (newMovie.Collection != null)
if (newMovie.MovieMetadata.Value.Collection != null)
{
var newCollection = _collectionService.AddMovieCollection(BuildCollection(newMovie));
newMovie.CollectionId = newCollection.Id;
newMovie.MovieMetadata.Value.CollectionId = newCollection.Id;
}
_movieMetadataService.Upsert(newMovie.MovieMetadata.Value);
newMovie.MovieMetadataId = newMovie.MovieMetadata.Value.Id;
_movieService.AddMovie(newMovie);
return newMovie;
@ -89,10 +92,10 @@ namespace NzbDrone.Core.Movies
movie.Added = added;
// add collection
if (movie.Collection != null)
if (movie.MovieMetadata.Value.Collection != null)
{
var newCollection = _collectionService.AddMovieCollection(BuildCollection(movie));
movie.CollectionId = newCollection.Id;
movie.MovieMetadata.Value.CollectionId = newCollection.Id;
}
moviesToAdd.Add(movie);
@ -139,7 +142,7 @@ namespace NzbDrone.Core.Movies
private MovieCollection BuildCollection(Movie newMovie)
{
var collection = newMovie.Collection.Value;
var collection = newMovie.MovieMetadata.Value.Collection.Value;
collection.Monitored = newMovie.AddOptions?.Monitor == MonitorTypes.MovieAndCollection;
collection.SearchOnAdd = newMovie.AddOptions?.SearchForMovie ?? false;
collection.QualityProfileId = newMovie.ProfileId;

View file

@ -1,20 +0,0 @@
using System.Collections.Generic;
using NzbDrone.Core.Datastore;
namespace NzbDrone.Core.Movies.Collections
{
public class CollectionMovie : IEmbeddedDocument
{
public int TmdbId { get; set; }
public string ImdbId { get; set; }
public string Title { get; set; }
public string CleanTitle { get; set; }
public string SortTitle { get; set; }
public string Overview { get; set; }
public int Runtime { get; set; }
public List<MediaCover.MediaCover> Images { get; set; }
public int Year { get; set; }
public Ratings Ratings { get; set; }
public List<string> Genres { get; set; }
}
}

View file

@ -9,7 +9,7 @@ namespace NzbDrone.Core.Movies.Collections
public MovieCollection()
{
Images = new List<MediaCover.MediaCover>();
Movies = new List<CollectionMovie>();
MovieMetadataIds = new List<int>();
}
public string Title { get; set; }
@ -25,7 +25,8 @@ namespace NzbDrone.Core.Movies.Collections
public DateTime? LastInfoSync { get; set; }
public List<MediaCover.MediaCover> Images { get; set; }
public DateTime Added { get; set; }
public List<CollectionMovie> Movies { get; set; }
public List<int> MovieMetadataIds { get; set; }
public List<MovieMetadata> MovieMetadata { get; set; }
public void ApplyChanges(MovieCollection otherCollection)
{

View file

@ -21,13 +21,13 @@ namespace NzbDrone.Core.Movies.Collections
public class MovieCollectionService : IMovieCollectionService, IHandleAsync<MoviesDeletedEvent>
{
private readonly IMovieCollectionRepository _repo;
private readonly IMovieService _movieService;
private readonly IMovieMetadataService _movieMetadataService;
private readonly IEventAggregator _eventAggregator;
public MovieCollectionService(IMovieCollectionRepository repo, IMovieService movieService, IEventAggregator eventAggregator)
public MovieCollectionService(IMovieCollectionRepository repo, IMovieMetadataService movieMetadataService, IEventAggregator eventAggregator)
{
_repo = repo;
_movieService = movieService;
_movieMetadataService = movieMetadataService;
_eventAggregator = eventAggregator;
}
@ -92,11 +92,11 @@ namespace NzbDrone.Core.Movies.Collections
public void HandleAsync(MoviesDeletedEvent message)
{
var collections = message.Movies.Select(x => x.CollectionId).Distinct();
var collections = message.Movies.Select(x => x.MovieMetadata.Value.CollectionId).Distinct();
foreach (var collectionId in collections)
{
if (collectionId == 0 || _movieService.GetMoviesByCollectionId(collectionId).Any())
if (collectionId == 0 || _movieMetadataService.GetMoviesByCollectionId(collectionId).Any())
{
continue;
}

View file

@ -3,7 +3,6 @@ using System.Collections.Generic;
using NzbDrone.Common.Extensions;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Movies.Collections;
using NzbDrone.Core.Profiles;
namespace NzbDrone.Core.Movies
@ -25,9 +24,6 @@ namespace NzbDrone.Core.Movies
public string Path { get; set; }
public LazyLoaded<MovieMetadata> MovieMetadata { get; set; }
public int CollectionId { get; set; }
public LazyLoaded<MovieCollection> Collection { get; set; }
public string RootFolderPath { get; set; }
public DateTime Added { get; set; }

View file

@ -3,6 +3,7 @@ using System.Collections.Generic;
using Equ;
using NzbDrone.Core.Languages;
using NzbDrone.Core.Movies.AlternativeTitles;
using NzbDrone.Core.Movies.Collections;
using NzbDrone.Core.Movies.Translations;
namespace NzbDrone.Core.Movies
@ -31,7 +32,8 @@ namespace NzbDrone.Core.Movies
public int Year { get; set; }
public Ratings Ratings { get; set; }
public MovieCollection Collection { get; set; }
public int CollectionId { get; set; }
public LazyLoaded<MovieCollection> Collection { get; set; }
public DateTime? LastInfoSync { get; set; }
public int Runtime { get; set; }
public string Website { get; set; }

View file

@ -10,6 +10,7 @@ namespace NzbDrone.Core.Movies
{
MovieMetadata FindByTmdbId(int tmdbId);
List<MovieMetadata> FindById(List<int> tmdbIds);
List<MovieMetadata> GetMoviesByCollectionId(int collectionId);
bool UpsertMany(List<MovieMetadata> data);
}
@ -33,6 +34,11 @@ namespace NzbDrone.Core.Movies
return Query(x => Enumerable.Contains(tmdbIds, x.TmdbId));
}
public List<MovieMetadata> GetMoviesByCollectionId(int collectionId)
{
return Query(x => x.CollectionId == collectionId);
}
public bool UpsertMany(List<MovieMetadata> data)
{
var existingMetadata = FindById(data.Select(x => x.TmdbId).ToList());

View file

@ -6,6 +6,7 @@ namespace NzbDrone.Core.Movies
{
MovieMetadata Get(int id);
MovieMetadata FindByTmdbId(int tmdbid);
List<MovieMetadata> GetMoviesByCollectionId(int collectionId);
bool Upsert(MovieMetadata movie);
bool UpsertMany(List<MovieMetadata> movies);
}
@ -24,6 +25,11 @@ namespace NzbDrone.Core.Movies
return _movieMetadataRepository.FindByTmdbId(tmdbid);
}
public List<MovieMetadata> GetMoviesByCollectionId(int collectionId)
{
return _movieMetadataRepository.GetMoviesByCollectionId(collectionId);
}
public MovieMetadata Get(int id)
{
return _movieMetadataRepository.Get(id);

View file

@ -225,7 +225,7 @@ namespace NzbDrone.Core.Movies
public List<Movie> GetMoviesByCollectionId(int collectionId)
{
return Query(x => x.CollectionId == collectionId);
return Query(x => x.MovieMetadata.Value.CollectionId == collectionId);
}
public void SetFileId(int fileId, int movieId)

View file

@ -62,7 +62,7 @@ namespace NzbDrone.Core.Movies
collection.SortTitle = collectionInfo.SortTitle;
collection.LastInfoSync = DateTime.UtcNow;
collection.Images = collectionInfo.Images;
collection.Movies = collectionInfo.Movies;
collection.MovieMetadataIds = collectionInfo.MovieMetadataIds;
_logger.Debug("Finished collection refresh for {0}", collection.Title);
@ -94,7 +94,7 @@ namespace NzbDrone.Core.Movies
{
var existingMovies = _movieService.AllMovieTmdbIds();
_addMovieService.AddMovies(collection.Movies.Where(m => !existingMovies.Contains(m.TmdbId)).Select(m => new Movie
_addMovieService.AddMovies(collection.MovieMetadata.Where(m => !existingMovies.Contains(m.TmdbId)).Select(m => new Movie
{
TmdbId = m.TmdbId,
Title = m.Title,

View file

@ -22,13 +22,19 @@ namespace Radarr.Api.V3.Collections
{
private readonly IMovieCollectionService _collectionService;
private readonly IMovieService _movieService;
private readonly IMovieMetadataService _movieMetadataService;
private readonly IBuildFileNames _fileNameBuilder;
public CollectionController(IBroadcastSignalRMessage signalRBroadcaster, IMovieCollectionService collectionService, IMovieService movieService, IBuildFileNames fileNameBuilder)
public CollectionController(IBroadcastSignalRMessage signalRBroadcaster,
IMovieCollectionService collectionService,
IMovieService movieService,
IMovieMetadataService movieMetadataService,
IBuildFileNames fileNameBuilder)
: base(signalRBroadcaster)
{
_collectionService = collectionService;
_movieService = movieService;
_movieMetadataService = movieMetadataService;
_fileNameBuilder = fileNameBuilder;
}
@ -90,7 +96,7 @@ namespace Radarr.Api.V3.Collections
{
var resource = collection.ToResource();
foreach (var movie in collection.Movies)
foreach (var movie in _movieMetadataService.GetMoviesByCollectionId(collection.Id))
{
var movieResource = movie.ToResource();
movieResource.Folder = _fileNameBuilder.GetMovieFolder(new Movie { Title = movie.Title, Year = movie.Year, ImdbId = movie.ImdbId, TmdbId = movie.TmdbId });

View file

@ -27,7 +27,7 @@ namespace Radarr.Api.V3.Collections
public static class CollectionMovieResourceMapper
{
public static CollectionMovieResource ToResource(this CollectionMovie model)
public static CollectionMovieResource ToResource(this MovieMetadata model)
{
if (model == null)
{

View file

@ -77,7 +77,7 @@ namespace Radarr.Api.V3.ImportLists
Ratings = model.MovieMetadata.Value.Ratings,
YouTubeTrailerId = model.MovieMetadata.Value.YouTubeTrailerId,
Studio = model.MovieMetadata.Value.Studio,
Collection = model.MovieMetadata.Value.CollectionId
Collection = model.MovieMetadata.Value.Collection
};
}

View file

@ -5,7 +5,6 @@ using NzbDrone.Core.DecisionEngine.Specifications;
using NzbDrone.Core.Languages;
using NzbDrone.Core.MediaCover;
using NzbDrone.Core.Movies;
using NzbDrone.Core.Movies.Collections;
using NzbDrone.Core.Movies.Translations;
using NzbDrone.Core.Parser;
using Radarr.Api.V3.MovieFiles;
@ -141,7 +140,7 @@ namespace Radarr.Api.V3.Movies
MovieFile = movieFile,
YouTubeTrailerId = model.MovieMetadata.Value.YouTubeTrailerId,
Studio = model.MovieMetadata.Value.Studio,
Collection = model.MovieMetadata.Value.CollectionId,
CollectionId = model.MovieMetadata.Value.CollectionId,
Popularity = model.MovieMetadata.Value.Popularity
};
}