From 4a66a832b3ebbd349386786ac0f1ab360553ebdf Mon Sep 17 00:00:00 2001 From: Qstick Date: Mon, 10 Jul 2023 22:54:32 -0500 Subject: [PATCH] New: View, Sort, Filter by Movie popularity on Index and Discover Fixes #1947 --- .../Table/DiscoverMovieHeader.css | 6 +++++ .../Table/DiscoverMovieHeader.css.d.ts | 1 + .../DiscoverMovie/Table/DiscoverMovieRow.css | 6 +++++ .../Table/DiscoverMovieRow.css.d.ts | 1 + .../DiscoverMovie/Table/DiscoverMovieRow.js | 11 +++++++++ frontend/src/Helpers/Props/icons.js | 2 ++ .../Movie/Index/Menus/MovieIndexSortMenu.tsx | 9 ++++++++ .../src/Movie/Index/Table/MovieIndexRow.css | 1 + .../Movie/Index/Table/MovieIndexRow.css.d.ts | 1 + .../src/Movie/Index/Table/MovieIndexRow.tsx | 10 ++++++++ .../Index/Table/MovieIndexTableHeader.css | 1 + .../Table/MovieIndexTableHeader.css.d.ts | 1 + frontend/src/Movie/Movie.ts | 1 + frontend/src/Movie/MoviePopularityIndex.css | 5 ++++ .../src/Movie/MoviePopularityIndex.css.d.ts | 7 ++++++ frontend/src/Movie/MoviePopularityIndex.tsx | 23 +++++++++++++++++++ .../src/Store/Actions/discoverMovieActions.js | 11 +++++++++ .../src/Store/Actions/movieIndexActions.js | 11 +++++++++ src/NzbDrone.Core/Localization/Core/en.json | 2 ++ .../ImportLists/ImportListMoviesResource.cs | 3 +++ 20 files changed, 113 insertions(+) create mode 100644 frontend/src/Movie/MoviePopularityIndex.css create mode 100644 frontend/src/Movie/MoviePopularityIndex.css.d.ts create mode 100644 frontend/src/Movie/MoviePopularityIndex.tsx diff --git a/frontend/src/DiscoverMovie/Table/DiscoverMovieHeader.css b/frontend/src/DiscoverMovie/Table/DiscoverMovieHeader.css index 5c673fd5f..c543d231d 100644 --- a/frontend/src/DiscoverMovie/Table/DiscoverMovieHeader.css +++ b/frontend/src/DiscoverMovie/Table/DiscoverMovieHeader.css @@ -39,6 +39,12 @@ flex: 0 0 90px; } +.popularity { + composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css'; + + flex: 0 0 100px; +} + .lists { composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css'; diff --git a/frontend/src/DiscoverMovie/Table/DiscoverMovieHeader.css.d.ts b/frontend/src/DiscoverMovie/Table/DiscoverMovieHeader.css.d.ts index a32ca9e7d..fd8bbf0f8 100644 --- a/frontend/src/DiscoverMovie/Table/DiscoverMovieHeader.css.d.ts +++ b/frontend/src/DiscoverMovie/Table/DiscoverMovieHeader.css.d.ts @@ -11,6 +11,7 @@ interface CssExports { 'lists': string; 'originalLanguage': string; 'physicalRelease': string; + 'popularity': string; 'ratings': string; 'runtime': string; 'sortTitle': string; diff --git a/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.css b/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.css index 86f6363ba..3e2ebd2e7 100644 --- a/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.css +++ b/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.css @@ -64,6 +64,12 @@ flex: 0 0 90px; } +.popularity { + composes: cell; + + flex: 0 0 100px; +} + .lists { composes: cell; diff --git a/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.css.d.ts b/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.css.d.ts index f65df2a1b..8b7ec2014 100644 --- a/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.css.d.ts +++ b/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.css.d.ts @@ -16,6 +16,7 @@ interface CssExports { 'lists': string; 'originalLanguage': string; 'physicalRelease': string; + 'popularity': string; 'ratings': string; 'runtime': string; 'sortTitle': string; diff --git a/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.js b/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.js index 9dd7b0d21..47f914324 100644 --- a/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.js +++ b/frontend/src/DiscoverMovie/Table/DiscoverMovieRow.js @@ -13,6 +13,7 @@ import AddNewDiscoverMovieModal from 'DiscoverMovie/AddNewDiscoverMovieModal'; import ExcludeMovieModal from 'DiscoverMovie/Exclusion/ExcludeMovieModal'; import { icons } from 'Helpers/Props'; import MovieDetailsLinks from 'Movie/Details/MovieDetailsLinks'; +import MoviePopularityIndex from 'Movie/MoviePopularityIndex'; import formatRuntime from 'Utilities/Date/formatRuntime'; import translate from 'Utilities/String/translate'; import ListMovieStatusCell from './ListMovieStatusCell'; @@ -73,6 +74,7 @@ class DiscoverMovieRow extends Component { images, genres, ratings, + popularity, certification, collection, columns, @@ -261,6 +263,14 @@ class DiscoverMovieRow extends Component { ); } + if (name === 'popularity') { + return ( + + + + ); + } + if (name === 'certification') { return ( + + {translate('Popularity')} + + + + + ); + } + if (name === 'certification') { return ( diff --git a/frontend/src/Movie/Index/Table/MovieIndexTableHeader.css b/frontend/src/Movie/Index/Table/MovieIndexTableHeader.css index 9d286dfa4..f6d937857 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexTableHeader.css +++ b/frontend/src/Movie/Index/Table/MovieIndexTableHeader.css @@ -41,6 +41,7 @@ } .added, +.popularity, .runtime { composes: headerCell from '~Components/Table/VirtualTableHeaderCell.css'; diff --git a/frontend/src/Movie/Index/Table/MovieIndexTableHeader.css.d.ts b/frontend/src/Movie/Index/Table/MovieIndexTableHeader.css.d.ts index 2b1baa10f..8a8be09d4 100644 --- a/frontend/src/Movie/Index/Table/MovieIndexTableHeader.css.d.ts +++ b/frontend/src/Movie/Index/Table/MovieIndexTableHeader.css.d.ts @@ -15,6 +15,7 @@ interface CssExports { 'originalTitle': string; 'path': string; 'physicalRelease': string; + 'popularity': string; 'qualityProfileId': string; 'rottenTomatoesRating': string; 'runtime': string; diff --git a/frontend/src/Movie/Movie.ts b/frontend/src/Movie/Movie.ts index d1abf81b9..7160497b7 100644 --- a/frontend/src/Movie/Movie.ts +++ b/frontend/src/Movie/Movie.ts @@ -49,6 +49,7 @@ interface Movie extends ModelBase { sizeOnDisk: number; genres: string[]; ratings: Ratings; + popularity: number; certification: string; tags: number[]; images: Image[]; diff --git a/frontend/src/Movie/MoviePopularityIndex.css b/frontend/src/Movie/MoviePopularityIndex.css new file mode 100644 index 000000000..352ea3d48 --- /dev/null +++ b/frontend/src/Movie/MoviePopularityIndex.css @@ -0,0 +1,5 @@ +.popularityIcon { + margin-right: 2px; + width: 12px !important; + text-align: center; +} \ No newline at end of file diff --git a/frontend/src/Movie/MoviePopularityIndex.css.d.ts b/frontend/src/Movie/MoviePopularityIndex.css.d.ts new file mode 100644 index 000000000..771315d85 --- /dev/null +++ b/frontend/src/Movie/MoviePopularityIndex.css.d.ts @@ -0,0 +1,7 @@ +// This file is automatically generated. +// Please do not change this file! +interface CssExports { + 'popularityIcon': string; +} +export const cssExports: CssExports; +export default cssExports; diff --git a/frontend/src/Movie/MoviePopularityIndex.tsx b/frontend/src/Movie/MoviePopularityIndex.tsx new file mode 100644 index 000000000..16d65f075 --- /dev/null +++ b/frontend/src/Movie/MoviePopularityIndex.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import Icon from 'Components/Icon'; +import Label from 'Components/Label'; +import { icons, kinds } from 'Helpers/Props'; +import translate from 'Utilities/String/translate'; +import styles from './MoviePopularityIndex.css'; + +interface MoviePopularityIndexProps { + popularity: number; +} + +function MoviePopularityIndex(props: MoviePopularityIndexProps) { + const { popularity } = props; + + return ( + + ); +} + +export default MoviePopularityIndex; diff --git a/frontend/src/Store/Actions/discoverMovieActions.js b/frontend/src/Store/Actions/discoverMovieActions.js index afaabf9d6..2b1895894 100644 --- a/frontend/src/Store/Actions/discoverMovieActions.js +++ b/frontend/src/Store/Actions/discoverMovieActions.js @@ -148,6 +148,12 @@ export const defaultState = { isSortable: true, isVisible: false }, + { + name: 'popularity', + label: translate('Popularity'), + isSortable: true, + isVisible: false + }, { name: 'certification', label: translate('Certification'), @@ -380,6 +386,11 @@ export const defaultState = { label: translate('ImdbVotes'), type: filterBuilderTypes.NUMBER }, + { + name: 'popularity', + label: translate('Popularity'), + type: filterBuilderTypes.NUMBER + }, { name: 'certification', label: 'Certification', diff --git a/frontend/src/Store/Actions/movieIndexActions.js b/frontend/src/Store/Actions/movieIndexActions.js index bd9c62b0e..c2f84b379 100644 --- a/frontend/src/Store/Actions/movieIndexActions.js +++ b/frontend/src/Store/Actions/movieIndexActions.js @@ -191,6 +191,12 @@ export const defaultState = { isSortable: true, isVisible: false }, + { + name: 'popularity', + label: translate('Popularity'), + isSortable: true, + isVisible: false + }, { name: 'certification', label: translate('Certification'), @@ -443,6 +449,11 @@ export const defaultState = { label: translate('ImdbVotes'), type: filterBuilderTypes.NUMBER }, + { + name: 'popularity', + label: translate('Popularity'), + type: filterBuilderTypes.NUMBER + }, { name: 'certification', label: translate('Certification'), diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index 0604438b6..eb5d6eba4 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -732,6 +732,8 @@ "Permissions": "Permissions", "PhysicalRelease": "Physical Release", "PhysicalReleaseDate": "Physical Release Date", + "Popularity": "Popularity", + "PopularityIndex": "Current Popularity Index", "Port": "Port", "PortNumber": "Port Number", "PosterOptions": "Poster Options", diff --git a/src/Radarr.Api.V3/ImportLists/ImportListMoviesResource.cs b/src/Radarr.Api.V3/ImportLists/ImportListMoviesResource.cs index 05de8ea46..c90f8dafd 100644 --- a/src/Radarr.Api.V3/ImportLists/ImportListMoviesResource.cs +++ b/src/Radarr.Api.V3/ImportLists/ImportListMoviesResource.cs @@ -36,6 +36,7 @@ namespace Radarr.Api.V3.ImportLists public int TmdbId { get; set; } public string Folder { get; set; } public string Certification { get; set; } + public float Popularity { get; set; } public List Genres { get; set; } public Ratings Ratings { get; set; } public MovieCollection Collection { get; set; } @@ -78,6 +79,7 @@ namespace Radarr.Api.V3.ImportLists Website = model.MovieMetadata.Value.Website, Genres = model.MovieMetadata.Value.Genres, Ratings = model.MovieMetadata.Value.Ratings, + Popularity = model.MovieMetadata.Value.Popularity, YouTubeTrailerId = model.MovieMetadata.Value.YouTubeTrailerId, Collection = new MovieCollection { Title = model.MovieMetadata.Value.CollectionTitle, TmdbId = model.MovieMetadata.Value.CollectionTmdbId }, Studio = model.MovieMetadata.Value.Studio @@ -115,6 +117,7 @@ namespace Radarr.Api.V3.ImportLists Genres = model.MovieMetadata.Value.Genres, Ratings = model.MovieMetadata.Value.Ratings, YouTubeTrailerId = model.MovieMetadata.Value.YouTubeTrailerId, + Popularity = model.MovieMetadata.Value.Popularity, Studio = model.MovieMetadata.Value.Studio, Collection = new MovieCollection { Title = model.MovieMetadata.Value.CollectionTitle, TmdbId = model.MovieMetadata.Value.CollectionTmdbId }, Lists = new HashSet { model.ListId }