From ff7f95a0ab96aeea6fc063f2c46bb65ebda8dc21 Mon Sep 17 00:00:00 2001 From: Qstick Date: Sun, 6 Mar 2022 18:47:45 -0600 Subject: [PATCH] New: Original Language and Title sort and filter options Fixes #7019 Fixes #5438 --- .../Movie/Index/Menus/MovieIndexSortMenu.js | 18 ++++++++ .../Movie/Index/Table/MovieIndexHeader.css | 2 + .../src/Movie/Index/Table/MovieIndexRow.css | 2 + .../src/Movie/Index/Table/MovieIndexRow.js | 26 ++++++++++++ frontend/src/Store/Actions/movieActions.js | 7 ++++ .../src/Store/Actions/movieIndexActions.js | 42 +++++++++++++++++++ src/NzbDrone.Core/Localization/Core/en.json | 2 + src/Radarr.Api.V3/Movies/MovieResource.cs | 3 ++ 8 files changed, 102 insertions(+) diff --git a/frontend/src/Movie/Index/Menus/MovieIndexSortMenu.js b/frontend/src/Movie/Index/Menus/MovieIndexSortMenu.js index 97563567a8..4f877bf60f 100644 --- a/frontend/src/Movie/Index/Menus/MovieIndexSortMenu.js +++ b/frontend/src/Movie/Index/Menus/MovieIndexSortMenu.js @@ -136,6 +136,24 @@ function MovieIndexSortMenu(props) { > {translate('Certification')} + + + {translate('OriginalTitle')} + + + + {translate('OriginalLanguage')} + ); diff --git a/frontend/src/Movie/Index/Table/MovieIndexHeader.css b/frontend/src/Movie/Index/Table/MovieIndexHeader.css index 54265a51b1..1b8c660cf4 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexHeader.css +++ b/frontend/src/Movie/Index/Table/MovieIndexHeader.css @@ -5,6 +5,7 @@ } .collection, +.originalTitle, .sortTitle { composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css'; @@ -23,6 +24,7 @@ flex: 2 0 90px; } +.originalLanguage, .qualityProfileId { composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css'; diff --git a/frontend/src/Movie/Index/Table/MovieIndexRow.css b/frontend/src/Movie/Index/Table/MovieIndexRow.css index b1bcc46a83..525af84089 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexRow.css +++ b/frontend/src/Movie/Index/Table/MovieIndexRow.css @@ -12,6 +12,7 @@ } .collection, +.originalTitle, .sortTitle { composes: cell; @@ -30,6 +31,7 @@ flex: 2 0 90px; } +.originalLanguage, .qualityProfileId { composes: cell; diff --git a/frontend/src/Movie/Index/Table/MovieIndexRow.js b/frontend/src/Movie/Index/Table/MovieIndexRow.js index 9ebe8bba8f..560e69433f 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexRow.js +++ b/frontend/src/Movie/Index/Table/MovieIndexRow.js @@ -80,6 +80,8 @@ class MovieIndexRow extends Component { year, inCinemas, physicalRelease, + originalLanguage, + originalTitle, digitalRelease, runtime, minimumAvailability, @@ -184,6 +186,28 @@ class MovieIndexRow extends Component { ); } + if (name === 'originalLanguage') { + return ( + + {originalLanguage.name} + + ); + } + + if (name === 'originalTitle') { + return ( + + {originalTitle} + + ); + } + if (name === 'qualityProfileId') { return ( { + if (movie.originalLanguage) { + acc.push({ + id: movie.originalLanguage.name, + name: movie.originalLanguage.name + }); + } + + return acc; + }, []); + + return collectionList.sort(sortByName); + } + }, { name: 'status', label: translate('ReleaseStatus'), diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index a006661d1f..15dcbe8ef7 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -645,6 +645,8 @@ "OpenThisModal": "Open This Modal", "Options": "Options", "Organize": "Organize", + "OriginalTitle": "Original Title", + "OriginalLanguage": "Original Language", "OrganizeAndRename": "Organize & Rename", "OrganizeConfirm": "Are you sure you want to organize all files in the {0} selected movie(s)?", "OrganizeModalAllPathsRelative": "All paths are relative to:", diff --git a/src/Radarr.Api.V3/Movies/MovieResource.cs b/src/Radarr.Api.V3/Movies/MovieResource.cs index d7e0927d4b..b0b1eeb83f 100644 --- a/src/Radarr.Api.V3/Movies/MovieResource.cs +++ b/src/Radarr.Api.V3/Movies/MovieResource.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using NzbDrone.Core.DecisionEngine.Specifications; +using NzbDrone.Core.Languages; using NzbDrone.Core.MediaCover; using NzbDrone.Core.Movies; using NzbDrone.Core.Movies.Translations; @@ -26,6 +27,7 @@ public MovieResource() //View Only public string Title { get; set; } public string OriginalTitle { get; set; } + public Language OriginalLanguage { get; set; } public List AlternateTitles { get; set; } public int? SecondaryYear { get; set; } public int SecondaryYearSourceId { get; set; } @@ -96,6 +98,7 @@ public static MovieResource ToResource(this Movie model, int availDelay, MovieTr TmdbId = model.TmdbId, Title = translatedTitle, OriginalTitle = model.OriginalTitle, + OriginalLanguage = model.OriginalLanguage, SortTitle = translatedTitle.NormalizeTitle(), InCinemas = model.InCinemas, PhysicalRelease = model.PhysicalRelease,