From b3553e93abd6357a1aa7599883e3d0cb5ac9e4ee Mon Sep 17 00:00:00 2001 From: Qstick Date: Thu, 9 Jan 2020 20:03:08 -0500 Subject: [PATCH] Fixed: Broken Title Sort on Activity Pages --- .../src/Activity/Blacklist/BlacklistRow.js | 4 +- frontend/src/Activity/History/HistoryRow.js | 2 +- frontend/src/Activity/Queue/QueueRow.js | 2 +- .../src/Store/Actions/blacklistActions.js | 4 +- frontend/src/Store/Actions/historyActions.js | 2 +- frontend/src/Store/Actions/queueActions.js | 2 +- .../Languages/LanguagesComparer.cs | 54 +++++++++++++++++++ src/Radarr.Api.V3/Queue/QueueModule.cs | 11 +++- 8 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 src/NzbDrone.Core/Languages/LanguagesComparer.cs diff --git a/frontend/src/Activity/Blacklist/BlacklistRow.js b/frontend/src/Activity/Blacklist/BlacklistRow.js index 22e43f9c3..a7a66050f 100644 --- a/frontend/src/Activity/Blacklist/BlacklistRow.js +++ b/frontend/src/Activity/Blacklist/BlacklistRow.js @@ -70,7 +70,7 @@ class BlacklistRow extends Component { return null; } - if (name === 'movie.sortTitle') { + if (name === 'movies.sortTitle') { return ( { diff --git a/frontend/src/Store/Actions/blacklistActions.js b/frontend/src/Store/Actions/blacklistActions.js index c6b1877fc..e50433980 100644 --- a/frontend/src/Store/Actions/blacklistActions.js +++ b/frontend/src/Store/Actions/blacklistActions.js @@ -27,7 +27,7 @@ export const defaultState = { columns: [ { - name: 'movie.sortTitle', + name: 'movies.sortTitle', label: 'Movie Title', isSortable: true, isVisible: true @@ -39,7 +39,7 @@ export const defaultState = { isVisible: true }, { - name: 'language', + name: 'languages', label: 'Language', isSortable: true, isVisible: true diff --git a/frontend/src/Store/Actions/historyActions.js b/frontend/src/Store/Actions/historyActions.js index b4d30e0df..a30de3716 100644 --- a/frontend/src/Store/Actions/historyActions.js +++ b/frontend/src/Store/Actions/historyActions.js @@ -34,7 +34,7 @@ export const defaultState = { isModifiable: false }, { - name: 'movie.sortTitle', + name: 'movies.sortTitle', label: 'Movie', isSortable: true, isVisible: true diff --git a/frontend/src/Store/Actions/queueActions.js b/frontend/src/Store/Actions/queueActions.js index 1e075d4b4..2062b3f25 100644 --- a/frontend/src/Store/Actions/queueActions.js +++ b/frontend/src/Store/Actions/queueActions.js @@ -63,7 +63,7 @@ export const defaultState = { isModifiable: false }, { - name: 'movie.sortTitle', + name: 'movies.sortTitle', label: 'Movie', isSortable: true, isVisible: true diff --git a/src/NzbDrone.Core/Languages/LanguagesComparer.cs b/src/NzbDrone.Core/Languages/LanguagesComparer.cs new file mode 100644 index 000000000..fb0cb158d --- /dev/null +++ b/src/NzbDrone.Core/Languages/LanguagesComparer.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace NzbDrone.Core.Languages +{ + public class LanguagesComparer : IComparer> + { + public int Compare(List x, List y) + { + if (!x.Any() && !y.Any()) + { + return 0; + } + + if (!x.Any() && y.Any()) + { + return 1; + } + + if (x.Any() && !y.Any()) + { + return -1; + } + + if (x.Count() > 1 && y.Count() > 1 && x.Count() > y.Count()) + { + return 1; + } + + if (x.Count() > 1 && y.Count() > 1 && x.Count() < y.Count()) + { + return -1; + } + + if (x.Count() > 1 && y.Count() == 1) + { + return 1; + } + + if (x.Count() == 1 && y.Count() > 1) + { + return -1; + } + + if (x.Count() == 1 && y.Count() == 1) + { + return x.First().Name.CompareTo(y.First().Name); + } + + return 0; + } + } +} diff --git a/src/Radarr.Api.V3/Queue/QueueModule.cs b/src/Radarr.Api.V3/Queue/QueueModule.cs index c9c52059e..d654f294e 100644 --- a/src/Radarr.Api.V3/Queue/QueueModule.cs +++ b/src/Radarr.Api.V3/Queue/QueueModule.cs @@ -4,6 +4,7 @@ using NzbDrone.Common.Extensions; using NzbDrone.Core.Datastore; using NzbDrone.Core.Datastore.Events; using NzbDrone.Core.Download.Pending; +using NzbDrone.Core.Languages; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Profiles; using NzbDrone.Core.Qualities; @@ -92,6 +93,12 @@ namespace Radarr.Api.V3.Queue ? fullQueue.OrderBy(q => q.Quality, _qualityComparer) : fullQueue.OrderByDescending(q => q.Quality, _qualityComparer); } + else if (pagingSpec.SortKey == "languages") + { + ordered = ascending + ? fullQueue.OrderBy(q => q.Languages, new LanguagesComparer()) + : fullQueue.OrderByDescending(q => q.Languages, new LanguagesComparer()); + } else { ordered = ascending ? fullQueue.OrderBy(orderByFunc) : fullQueue.OrderByDescending(orderByFunc); @@ -117,11 +124,11 @@ namespace Radarr.Api.V3.Queue { case "status": return q => q.Status; - case "movie.sortTitle": + case "movies.sortTitle": return q => q.Movie.SortTitle; case "title": return q => q.Title; - case "language": + case "languages": return q => q.Languages; case "quality": return q => q.Quality;