From ba83c01b6ca8dfe9f1a033f3caafe6c8f41bbd8c Mon Sep 17 00:00:00 2001 From: Qstick Date: Sat, 2 Nov 2019 15:43:45 -0400 Subject: [PATCH] New: NetImport Lists Grouped by Type Co-Authored-By: ta264 --- .../NetImport/AddNetImportModalContent.js | 43 +++++++++++-------- .../AddNetImportModalContentConnector.js | 8 +++- src/NzbDrone.Core/Datastore/TableMapping.cs | 1 + .../CouchPotato/CouchPotatoImport.cs | 2 + src/NzbDrone.Core/NetImport/INetImport.cs | 1 + src/NzbDrone.Core/NetImport/NetImportBase.cs | 2 + .../NetImport/NetImportDefinition.cs | 2 + .../NetImport/NetImportFactory.cs | 2 + src/NzbDrone.Core/NetImport/NetImportType.cs | 8 ++++ .../NetImport/RSSImport/RSSImport.cs | 2 + .../NetImport/Radarr/RadarrLists.cs | 2 + .../NetImport/StevenLu/StevenLuImport.cs | 2 + .../NetImport/TMDb/TMDbImport.cs | 2 + .../NetImport/Trakt/TraktImport.cs | 2 + .../NetImport/NetImportResource.cs | 5 +++ 15 files changed, 65 insertions(+), 19 deletions(-) create mode 100644 src/NzbDrone.Core/NetImport/NetImportType.cs diff --git a/frontend/src/Settings/NetImport/NetImport/AddNetImportModalContent.js b/frontend/src/Settings/NetImport/NetImport/AddNetImportModalContent.js index 7824a554e..2b89eff7b 100644 --- a/frontend/src/Settings/NetImport/NetImport/AddNetImportModalContent.js +++ b/frontend/src/Settings/NetImport/NetImport/AddNetImportModalContent.js @@ -10,6 +10,7 @@ import ModalHeader from 'Components/Modal/ModalHeader'; import ModalBody from 'Components/Modal/ModalBody'; import ModalFooter from 'Components/Modal/ModalFooter'; import AddNetImportItem from './AddNetImportItem'; +import titleCase from 'Utilities/String/titleCase'; import styles from './AddNetImportModalContent.css'; class AddNetImportModalContent extends Component { @@ -22,7 +23,7 @@ class AddNetImportModalContent extends Component { isSchemaFetching, isSchemaPopulated, schemaError, - netImports, + listGroups, onNetImportSelect, onModalClose } = this.props; @@ -53,22 +54,28 @@ class AddNetImportModalContent extends Component {
For more information on the individual netImports, clink on the info buttons.
-
-
- { - netImports.map((netImport) => { - return ( - - ); - }) - } -
-
+ { + Object.keys(listGroups).map((key) => { + return ( +
+
+ { + listGroups[key].map((netImport) => { + return ( + + ); + }) + } +
+
+ ); + }) + } } @@ -88,7 +95,7 @@ AddNetImportModalContent.propTypes = { isSchemaFetching: PropTypes.bool.isRequired, isSchemaPopulated: PropTypes.bool.isRequired, schemaError: PropTypes.object, - netImports: PropTypes.arrayOf(PropTypes.object).isRequired, + listGroups: PropTypes.object.isRequired, onNetImportSelect: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired }; diff --git a/frontend/src/Settings/NetImport/NetImport/AddNetImportModalContentConnector.js b/frontend/src/Settings/NetImport/NetImport/AddNetImportModalContentConnector.js index 39e43b366..b721ffda9 100644 --- a/frontend/src/Settings/NetImport/NetImport/AddNetImportModalContentConnector.js +++ b/frontend/src/Settings/NetImport/NetImport/AddNetImportModalContentConnector.js @@ -1,3 +1,4 @@ +import _ from 'lodash'; import PropTypes from 'prop-types'; import React, { Component } from 'react'; import { connect } from 'react-redux'; @@ -16,11 +17,16 @@ function createMapStateToProps() { schema } = netImports; + const listGroups = _.chain(schema) + .sortBy((o) => o.listOrder) + .groupBy('listType') + .value(); + return { isSchemaFetching, isSchemaPopulated, schemaError, - netImports: schema + listGroups }; } ); diff --git a/src/NzbDrone.Core/Datastore/TableMapping.cs b/src/NzbDrone.Core/Datastore/TableMapping.cs index c17e6fd93..06bce9794 100644 --- a/src/NzbDrone.Core/Datastore/TableMapping.cs +++ b/src/NzbDrone.Core/Datastore/TableMapping.cs @@ -72,6 +72,7 @@ namespace NzbDrone.Core.Datastore Mapper.Entity("NetImport").RegisterModel() .Ignore(x => x.ImplementationName) + .Ignore(i => i.ListType) .Ignore(i => i.Enable); Mapper.Entity("Notifications").RegisterModel() diff --git a/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoImport.cs b/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoImport.cs index 130eb1144..3a51f256d 100644 --- a/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoImport.cs +++ b/src/NzbDrone.Core/NetImport/CouchPotato/CouchPotatoImport.cs @@ -8,6 +8,8 @@ namespace NzbDrone.Core.NetImport.CouchPotato public class CouchPotatoImport : HttpNetImportBase { public override string Name => "CouchPotato"; + + public override NetImportType ListType => NetImportType.Other; public override bool Enabled => true; public override bool EnableAuto => false; diff --git a/src/NzbDrone.Core/NetImport/INetImport.cs b/src/NzbDrone.Core/NetImport/INetImport.cs index d0af784f9..e4c69ec2d 100644 --- a/src/NzbDrone.Core/NetImport/INetImport.cs +++ b/src/NzbDrone.Core/NetImport/INetImport.cs @@ -7,6 +7,7 @@ namespace NzbDrone.Core.NetImport bool Enabled { get; } bool EnableAuto { get; } + NetImportType ListType { get; } NetImportFetchResult Fetch(); } } diff --git a/src/NzbDrone.Core/NetImport/NetImportBase.cs b/src/NzbDrone.Core/NetImport/NetImportBase.cs index a12fcab84..17bb41356 100644 --- a/src/NzbDrone.Core/NetImport/NetImportBase.cs +++ b/src/NzbDrone.Core/NetImport/NetImportBase.cs @@ -23,6 +23,8 @@ namespace NzbDrone.Core.NetImport protected readonly Logger _logger; public abstract string Name { get; } + + public abstract NetImportType ListType { get; } public abstract bool Enabled { get; } public abstract bool EnableAuto { get; } diff --git a/src/NzbDrone.Core/NetImport/NetImportDefinition.cs b/src/NzbDrone.Core/NetImport/NetImportDefinition.cs index 2ca6d0f27..1169a4974 100644 --- a/src/NzbDrone.Core/NetImport/NetImportDefinition.cs +++ b/src/NzbDrone.Core/NetImport/NetImportDefinition.cs @@ -18,5 +18,7 @@ namespace NzbDrone.Core.NetImport public int ProfileId { get; set; } public string RootFolderPath { get; set; } public override bool Enable => Enabled; + + public NetImportType ListType { get; set; } } } diff --git a/src/NzbDrone.Core/NetImport/NetImportFactory.cs b/src/NzbDrone.Core/NetImport/NetImportFactory.cs index 2d6b71f9c..963d4e323 100644 --- a/src/NzbDrone.Core/NetImport/NetImportFactory.cs +++ b/src/NzbDrone.Core/NetImport/NetImportFactory.cs @@ -39,6 +39,8 @@ namespace NzbDrone.Core.NetImport public override void SetProviderCharacteristics(INetImport provider, NetImportDefinition definition) { base.SetProviderCharacteristics(provider, definition); + + definition.ListType = provider.ListType; } public List Enabled() diff --git a/src/NzbDrone.Core/NetImport/NetImportType.cs b/src/NzbDrone.Core/NetImport/NetImportType.cs new file mode 100644 index 000000000..6ac07af0b --- /dev/null +++ b/src/NzbDrone.Core/NetImport/NetImportType.cs @@ -0,0 +1,8 @@ +namespace NzbDrone.Core.NetImport +{ + public enum NetImportType + { + TMDB, + Other + } +} diff --git a/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs b/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs index 06dcd6f3d..6ec52ae54 100644 --- a/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs +++ b/src/NzbDrone.Core/NetImport/RSSImport/RSSImport.cs @@ -10,6 +10,8 @@ namespace NzbDrone.Core.NetImport.RSSImport public class RSSImport : HttpNetImportBase { public override string Name => "RSSList"; + + public override NetImportType ListType => NetImportType.Other; public override bool Enabled => true; public override bool EnableAuto => false; diff --git a/src/NzbDrone.Core/NetImport/Radarr/RadarrLists.cs b/src/NzbDrone.Core/NetImport/Radarr/RadarrLists.cs index e0ec2bc07..6d316dad3 100644 --- a/src/NzbDrone.Core/NetImport/Radarr/RadarrLists.cs +++ b/src/NzbDrone.Core/NetImport/Radarr/RadarrLists.cs @@ -11,6 +11,8 @@ namespace NzbDrone.Core.NetImport.Radarr public class RadarrLists : HttpNetImportBase { public override string Name => "Radarr Lists"; + + public override NetImportType ListType => NetImportType.Other; public override bool Enabled => true; public override bool EnableAuto => false; diff --git a/src/NzbDrone.Core/NetImport/StevenLu/StevenLuImport.cs b/src/NzbDrone.Core/NetImport/StevenLu/StevenLuImport.cs index 8ec74b9ca..a3071cd91 100644 --- a/src/NzbDrone.Core/NetImport/StevenLu/StevenLuImport.cs +++ b/src/NzbDrone.Core/NetImport/StevenLu/StevenLuImport.cs @@ -8,6 +8,8 @@ namespace NzbDrone.Core.NetImport.StevenLu public class StevenLuImport : HttpNetImportBase { public override string Name => "StevenLu"; + + public override NetImportType ListType => NetImportType.Other; public override bool Enabled => true; public override bool EnableAuto => false; diff --git a/src/NzbDrone.Core/NetImport/TMDb/TMDbImport.cs b/src/NzbDrone.Core/NetImport/TMDb/TMDbImport.cs index ec32da5f3..bf31fe7a5 100644 --- a/src/NzbDrone.Core/NetImport/TMDb/TMDbImport.cs +++ b/src/NzbDrone.Core/NetImport/TMDb/TMDbImport.cs @@ -9,6 +9,8 @@ namespace NzbDrone.Core.NetImport.TMDb public class TMDbImport : HttpNetImportBase { public override string Name => "TMDb Lists"; + + public override NetImportType ListType => NetImportType.TMDB; public override bool Enabled => true; public override bool EnableAuto => false; diff --git a/src/NzbDrone.Core/NetImport/Trakt/TraktImport.cs b/src/NzbDrone.Core/NetImport/Trakt/TraktImport.cs index 695e77703..82c398586 100644 --- a/src/NzbDrone.Core/NetImport/Trakt/TraktImport.cs +++ b/src/NzbDrone.Core/NetImport/Trakt/TraktImport.cs @@ -11,6 +11,8 @@ namespace NzbDrone.Core.NetImport.Trakt public class TraktImport : HttpNetImportBase { public override string Name => "Trakt List"; + + public override NetImportType ListType => NetImportType.Other; public override bool Enabled => true; public override bool EnableAuto => false; diff --git a/src/Radarr.Api.V3/NetImport/NetImportResource.cs b/src/Radarr.Api.V3/NetImport/NetImportResource.cs index e7e4790dc..85e992c5e 100644 --- a/src/Radarr.Api.V3/NetImport/NetImportResource.cs +++ b/src/Radarr.Api.V3/NetImport/NetImportResource.cs @@ -11,6 +11,8 @@ namespace Radarr.Api.V3.NetImport public string RootFolderPath { get; set; } public int QualityProfileId { get; set; } public MovieStatusType MinimumAvailability { get; set; } + public NetImportType ListType { get; set; } + public int ListOrder { get; set; } } public class NetImportResourceMapper : ProviderResourceMapper @@ -30,6 +32,8 @@ namespace Radarr.Api.V3.NetImport resource.RootFolderPath = definition.RootFolderPath; resource.QualityProfileId = definition.ProfileId; resource.MinimumAvailability = definition.MinimumAvailability; + resource.ListType = definition.ListType; + resource.ListOrder = (int)definition.ListType; return resource; } @@ -49,6 +53,7 @@ namespace Radarr.Api.V3.NetImport definition.RootFolderPath = resource.RootFolderPath; definition.ProfileId = resource.QualityProfileId; definition.MinimumAvailability = resource.MinimumAvailability; + definition.ListType = resource.ListType; return definition; }