diff --git a/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.tsx b/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.tsx index e5fa6cf445..6e4f1629fb 100644 --- a/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.tsx +++ b/frontend/src/InteractiveImport/Interactive/InteractiveImportRow.tsx @@ -25,6 +25,7 @@ import { import { SelectStateInputProps } from 'typings/props'; import Rejection from 'typings/Rejection'; import formatBytes from 'Utilities/Number/formatBytes'; +import formatCustomFormatScore from 'Utilities/Number/formatCustomFormatScore'; import translate from 'Utilities/String/translate'; import InteractiveImportRowCellPlaceholder from './InteractiveImportRowCellPlaceholder'; import styles from './InteractiveImportRow.css'; @@ -45,6 +46,7 @@ interface InteractiveImportRowProps { languages?: Language[]; size: number; customFormats?: object[]; + customFormatScore?: number; rejections: Rejection[]; columns: Column[]; movieFileId?: number; @@ -66,6 +68,7 @@ function InteractiveImportRow(props: InteractiveImportRowProps) { releaseGroup, size, customFormats, + customFormatScore, rejections, isSelected, modalTitle, @@ -293,8 +296,11 @@ function InteractiveImportRow(props: InteractiveImportRowProps) { {customFormats?.length ? ( } - title={translate('Formats')} + anchor={formatCustomFormatScore( + customFormatScore, + customFormats.length + )} + title={translate('CustomFormats')} body={
diff --git a/frontend/src/Store/Actions/interactiveImportActions.js b/frontend/src/Store/Actions/interactiveImportActions.js index 6cf355c271..854aeb1ec4 100644 --- a/frontend/src/Store/Actions/interactiveImportActions.js +++ b/frontend/src/Store/Actions/interactiveImportActions.js @@ -47,6 +47,10 @@ export const defaultState = { quality: function(item, direction) { return item.qualityWeight || 0; + }, + + customFormats: function(item, direction) { + return item.customFormatScore; } } }; diff --git a/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportItem.cs b/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportItem.cs index 2f19a99f42..516c0dd5e9 100644 --- a/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportItem.cs +++ b/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportItem.cs @@ -19,6 +19,7 @@ public class ManualImportItem public string ReleaseGroup { get; set; } public string DownloadId { get; set; } public List CustomFormats { get; set; } + public int CustomFormatScore { get; set; } public IEnumerable Rejections { get; set; } public Movie Movie { get; set; } diff --git a/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportService.cs b/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportService.cs index b2175cb186..786ff182d6 100644 --- a/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportService.cs +++ b/src/NzbDrone.Core/MediaFiles/MovieImport/Manual/ManualImportService.cs @@ -312,6 +312,7 @@ private ManualImportItem MapItem(ImportDecision decision, string rootFolder, str item.Movie = decision.LocalMovie.Movie; item.CustomFormats = _formatCalculator.ParseCustomFormat(decision.LocalMovie); + item.CustomFormatScore = item.Movie.Profile?.CalculateCustomFormatScore(item.CustomFormats) ?? 0; } item.Quality = decision.LocalMovie.Quality; diff --git a/src/Radarr.Api.V3/ManualImport/ManualImportController.cs b/src/Radarr.Api.V3/ManualImport/ManualImportController.cs index 7914fc59d0..cd6de27435 100644 --- a/src/Radarr.Api.V3/ManualImport/ManualImportController.cs +++ b/src/Radarr.Api.V3/ManualImport/ManualImportController.cs @@ -5,6 +5,7 @@ using NzbDrone.Core.Languages; using NzbDrone.Core.MediaFiles.MovieImport.Manual; using NzbDrone.Core.Qualities; +using Radarr.Api.V3.CustomFormats; using Radarr.Api.V3.Movies; using Radarr.Http; @@ -35,6 +36,8 @@ public object ReprocessItems([FromBody] List item item.Movie = processedItem.Movie.ToResource(0); item.Rejections = processedItem.Rejections; + item.CustomFormats = processedItem.CustomFormats.ToResource(false); + item.CustomFormatScore = processedItem.CustomFormatScore; if (item.Languages?.Count <= 1 && (item.Languages?.SingleOrDefault() ?? Language.Unknown) == Language.Unknown && processedItem.Languages.Any()) diff --git a/src/Radarr.Api.V3/ManualImport/ManualImportReprocessResource.cs b/src/Radarr.Api.V3/ManualImport/ManualImportReprocessResource.cs index 4999ae42df..5733f145ea 100644 --- a/src/Radarr.Api.V3/ManualImport/ManualImportReprocessResource.cs +++ b/src/Radarr.Api.V3/ManualImport/ManualImportReprocessResource.cs @@ -2,6 +2,7 @@ using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.Languages; using NzbDrone.Core.Qualities; +using Radarr.Api.V3.CustomFormats; using Radarr.Api.V3.Movies; using Radarr.Http.REST; @@ -16,7 +17,8 @@ public class ManualImportReprocessResource : RestResource public List Languages { get; set; } public string ReleaseGroup { get; set; } public string DownloadId { get; set; } - + public List CustomFormats { get; set; } + public int CustomFormatScore { get; set; } public IEnumerable Rejections { get; set; } } } diff --git a/src/Radarr.Api.V3/ManualImport/ManualImportResource.cs b/src/Radarr.Api.V3/ManualImport/ManualImportResource.cs index ac2b86f57e..a51c41a482 100644 --- a/src/Radarr.Api.V3/ManualImport/ManualImportResource.cs +++ b/src/Radarr.Api.V3/ManualImport/ManualImportResource.cs @@ -25,6 +25,7 @@ public class ManualImportResource : RestResource public int QualityWeight { get; set; } public string DownloadId { get; set; } public List CustomFormats { get; set; } + public int CustomFormatScore { get; set; } public IEnumerable Rejections { get; set; } } @@ -37,6 +38,9 @@ public static ManualImportResource ToResource(this ManualImportItem model) return null; } + var customFormats = model.CustomFormats; + var customFormatScore = model.Movie?.Profile?.CalculateCustomFormatScore(customFormats) ?? 0; + return new ManualImportResource { Id = HashConverter.GetHashInt31(model.Path), @@ -49,7 +53,8 @@ public static ManualImportResource ToResource(this ManualImportItem model) ReleaseGroup = model.ReleaseGroup, Quality = model.Quality, Languages = model.Languages, - CustomFormats = model.CustomFormats.ToResource(false), + CustomFormats = customFormats.ToResource(false), + CustomFormatScore = customFormatScore, // QualityWeight DownloadId = model.DownloadId,