From 1865257544f029b6bf825f0130031390c3ea6799 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Wed, 6 Sep 2023 11:56:28 +0300 Subject: [PATCH] Include indexer flags to show the correct custom formats in movie file history --- .../src/Store/Actions/movieFileActions.js | 10 ++++--- src/NzbDrone.Core/History/HistoryService.cs | 2 ++ .../MovieFiles/MovieFileController.cs | 29 +++++-------------- .../MovieFiles/MovieFileResource.cs | 17 +++++++++-- src/Radarr.Api.V3/Movies/MovieResource.cs | 9 +++--- 5 files changed, 36 insertions(+), 31 deletions(-) diff --git a/frontend/src/Store/Actions/movieFileActions.js b/frontend/src/Store/Actions/movieFileActions.js index 610fe10c3..1a71501a9 100644 --- a/frontend/src/Store/Actions/movieFileActions.js +++ b/frontend/src/Store/Actions/movieFileActions.js @@ -269,17 +269,19 @@ export const actionHandlers = handleThunks({ promise.done((data) => { dispatch(batchActions([ ...movieFileIds.map((id) => { - const props = {}; - const movieFile = data.find((file) => file.id === id); - props.qualityCutoffNotMet = movieFile.qualityCutoffNotMet; + const props = { + customFormats: movieFile.customFormats, + customFormatScore: movieFile.customFormatScore, + qualityCutoffNotMet: movieFile.qualityCutoffNotMet + }; if (languages) { props.languages = languages; } - if (indexerFlags) { + if (indexerFlags !== undefined) { props.indexerFlags = indexerFlags; } diff --git a/src/NzbDrone.Core/History/HistoryService.cs b/src/NzbDrone.Core/History/HistoryService.cs index 74ebaef71..1c1bb2c56 100644 --- a/src/NzbDrone.Core/History/HistoryService.cs +++ b/src/NzbDrone.Core/History/HistoryService.cs @@ -228,6 +228,7 @@ public void Handle(MovieFileDeletedEvent message) history.Data.Add("Reason", message.Reason.ToString()); history.Data.Add("ReleaseGroup", message.MovieFile.ReleaseGroup); + history.Data.Add("IndexerFlags", message.MovieFile.IndexerFlags.ToString()); _historyRepository.Insert(history); } @@ -254,6 +255,7 @@ public void Handle(MovieFileRenamedEvent message) history.Data.Add("Path", path); history.Data.Add("RelativePath", relativePath); history.Data.Add("ReleaseGroup", message.MovieFile.ReleaseGroup); + history.Data.Add("IndexerFlags", message.MovieFile.IndexerFlags.ToString()); _historyRepository.Insert(history); } diff --git a/src/Radarr.Api.V3/MovieFiles/MovieFileController.cs b/src/Radarr.Api.V3/MovieFiles/MovieFileController.cs index 63499680b..9f256e51d 100644 --- a/src/Radarr.Api.V3/MovieFiles/MovieFileController.cs +++ b/src/Radarr.Api.V3/MovieFiles/MovieFileController.cs @@ -13,7 +13,6 @@ using NzbDrone.Core.Parser; using NzbDrone.Core.Parser.Model; using NzbDrone.SignalR; -using Radarr.Api.V3.CustomFormats; using Radarr.Http; using Radarr.Http.REST; using Radarr.Http.REST.Attributes; @@ -51,19 +50,14 @@ protected override MovieFileResource GetResourceById(int id) { var movieFile = _mediaFileService.GetMovie(id); var movie = _movieService.GetMovie(movieFile.MovieId); - movieFile.Movie = movie; - var resource = movieFile.ToResource(movie, _qualityUpgradableSpecification); - - var customFormats = _formatCalculator.ParseCustomFormat(movieFile); - var customFormatScore = movie?.QualityProfile?.CalculateCustomFormatScore(customFormats) ?? 0; - resource.CustomFormats = customFormats.ToResource(false); - resource.CustomFormatScore = customFormatScore; + var resource = movieFile.ToResource(movie, _qualityUpgradableSpecification, _formatCalculator); return resource; } [HttpGet] + [Produces("application/json")] public List GetMovieFiles(int? movieId, [FromQuery] List movieFileIds) { if (!movieId.HasValue && !movieFileIds.Any()) @@ -81,15 +75,7 @@ public List GetMovieFiles(int? movieId, [FromQuery] List return new List(); } - var resource = file.ToResource(movie, _qualityUpgradableSpecification); - file.Movie = movie; - - var customFormats = _formatCalculator.ParseCustomFormat(file); - var customFormatScore = movie?.QualityProfile?.CalculateCustomFormatScore(customFormats) ?? 0; - resource.CustomFormats = customFormats.ToResource(false); - resource.CustomFormatScore = customFormatScore; - - return new List { resource }; + return new List { file.ToResource(movie, _qualityUpgradableSpecification, _formatCalculator) }; } else { @@ -97,12 +83,13 @@ public List GetMovieFiles(int? movieId, [FromQuery] List return movieFiles.GroupBy(e => e.MovieId) .SelectMany(f => f.ToList() - .ConvertAll(e => e.ToResource(_movieService.GetMovie(f.Key), _qualityUpgradableSpecification))) + .ConvertAll(e => e.ToResource(_movieService.GetMovie(f.Key), _qualityUpgradableSpecification, _formatCalculator))) .ToList(); } } [RestPutById] + [Consumes("application/json")] public ActionResult SetMovieFile(MovieFileResource movieFileResource) { var movieFile = _mediaFileService.GetMovie(movieFileResource.Id); @@ -125,6 +112,7 @@ public ActionResult SetMovieFile(MovieFileResource movieFileR } [HttpPut("editor")] + [Consumes("application/json")] public object SetMovieFile([FromBody] MovieFileListResource resource) { var movieFiles = _mediaFileService.GetMovies(resource.MovieFileIds); @@ -164,10 +152,8 @@ public object SetMovieFile([FromBody] MovieFileListResource resource) } _mediaFileService.Update(movieFiles); - var movie = _movieService.GetMovie(movieFiles.First().MovieId); - - return Accepted(movieFiles.ConvertAll(f => f.ToResource(movie, _qualityUpgradableSpecification))); + return Accepted(movieFiles.ConvertAll(f => f.ToResource(movie, _qualityUpgradableSpecification, _formatCalculator))); } [RestDeleteById] @@ -186,6 +172,7 @@ public void DeleteMovieFile(int id) } [HttpDelete("bulk")] + [Consumes("application/json")] public object DeleteMovieFiles([FromBody] MovieFileListResource resource) { var movieFiles = _mediaFileService.GetMovies(resource.MovieFileIds); diff --git a/src/Radarr.Api.V3/MovieFiles/MovieFileResource.cs b/src/Radarr.Api.V3/MovieFiles/MovieFileResource.cs index 14bf3db66..15b19ab7d 100644 --- a/src/Radarr.Api.V3/MovieFiles/MovieFileResource.cs +++ b/src/Radarr.Api.V3/MovieFiles/MovieFileResource.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using NzbDrone.Core.CustomFormats; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Languages; using NzbDrone.Core.MediaFiles; @@ -60,14 +61,14 @@ private static MovieFileResource ToResource(this MovieFile model) }; } - public static MovieFileResource ToResource(this MovieFile model, NzbDrone.Core.Movies.Movie movie, IUpgradableSpecification upgradableSpecification) + public static MovieFileResource ToResource(this MovieFile model, NzbDrone.Core.Movies.Movie movie, IUpgradableSpecification upgradableSpecification, ICustomFormatCalculationService formatCalculationService) { if (model == null) { return null; } - return new MovieFileResource + var resource = new MovieFileResource { Id = model.Id, @@ -86,6 +87,18 @@ public static MovieFileResource ToResource(this MovieFile model, NzbDrone.Core.M QualityCutoffNotMet = upgradableSpecification?.QualityCutoffNotMet(movie.QualityProfile, model.Quality) ?? false, OriginalFilePath = model.OriginalFilePath }; + + if (formatCalculationService != null) + { + model.Movie = movie; + var customFormats = formatCalculationService?.ParseCustomFormat(model, model.Movie); + var customFormatScore = movie?.QualityProfile?.CalculateCustomFormatScore(customFormats) ?? 0; + + resource.CustomFormats = customFormats.ToResource(false); + resource.CustomFormatScore = customFormatScore; + } + + return resource; } } } diff --git a/src/Radarr.Api.V3/Movies/MovieResource.cs b/src/Radarr.Api.V3/Movies/MovieResource.cs index 1b0e8c0d1..50fddc7d1 100644 --- a/src/Radarr.Api.V3/Movies/MovieResource.cs +++ b/src/Radarr.Api.V3/Movies/MovieResource.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using NzbDrone.Core.CustomFormats; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Languages; using NzbDrone.Core.MediaCover; @@ -80,7 +81,7 @@ public MovieResource() public static class MovieResourceMapper { - public static MovieResource ToResource(this Movie model, int availDelay, MovieTranslation movieTranslation = null, IUpgradableSpecification upgradableSpecification = null) + public static MovieResource ToResource(this Movie model, int availDelay, MovieTranslation movieTranslation = null, IUpgradableSpecification upgradableSpecification = null, ICustomFormatCalculationService formatCalculationService = null) { if (model == null) { @@ -89,7 +90,7 @@ public static MovieResource ToResource(this Movie model, int availDelay, MovieTr var size = model.MovieFile?.Size ?? 0; - var movieFile = model.MovieFile?.ToResource(model, upgradableSpecification); + var movieFile = model.MovieFile?.ToResource(model, upgradableSpecification, formatCalculationService); var translatedTitle = movieTranslation?.Title ?? model.Title; var translatedOverview = movieTranslation?.Overview ?? model.MovieMetadata.Value.Overview; @@ -205,9 +206,9 @@ public static Movie ToModel(this MovieResource resource, Movie movie) return movie; } - public static List ToResource(this IEnumerable movies, int availDelay, IUpgradableSpecification upgradableSpecification = null) + public static List ToResource(this IEnumerable movies, int availDelay, IUpgradableSpecification upgradableSpecification = null, ICustomFormatCalculationService formatCalculationService = null) { - return movies.Select(x => ToResource(x, availDelay, null, upgradableSpecification)).ToList(); + return movies.Select(x => ToResource(x, availDelay, null, upgradableSpecification, formatCalculationService)).ToList(); } public static List ToModel(this IEnumerable resources)