diff --git a/frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContent.js b/frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContent.js
index 6c42c5ccd..04700237f 100644
--- a/frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContent.js
+++ b/frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContent.js
@@ -11,6 +11,7 @@ import ModalBody from 'Components/Modal/ModalBody';
import ModalFooter from 'Components/Modal/ModalFooter';
import AddImportListItem from './AddImportListItem';
import styles from './AddImportListModalContent.css';
+import titleCase from 'Utilities/String/titleCase';
class AddImportListModalContent extends Component {
@@ -22,7 +23,7 @@ class AddImportListModalContent extends Component {
isSchemaFetching,
isSchemaPopulated,
schemaError,
- allLists,
+ listGroups,
onImportListSelect,
onModalClose
} = this.props;
@@ -52,23 +53,28 @@ class AddImportListModalContent extends Component {
Lidarr supports multiple lists for importing Albums and Artists into the database.
For more information on the individual lists, click on the info buttons.
-
-
+ {
+ Object.keys(listGroups).map((key) => {
+ return (
+
+ );
+ })
+ }
}
@@ -88,7 +94,7 @@ AddImportListModalContent.propTypes = {
isSchemaFetching: PropTypes.bool.isRequired,
isSchemaPopulated: PropTypes.bool.isRequired,
schemaError: PropTypes.object,
- allLists: PropTypes.arrayOf(PropTypes.object).isRequired,
+ listGroups: PropTypes.object.isRequired,
onImportListSelect: PropTypes.func.isRequired,
onModalClose: PropTypes.func.isRequired
};
diff --git a/frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContentConnector.js b/frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContentConnector.js
index e3b5b1c08..1273035b1 100644
--- a/frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContentConnector.js
+++ b/frontend/src/Settings/ImportLists/ImportLists/AddImportListModalContentConnector.js
@@ -1,3 +1,4 @@
+import _ from 'lodash';
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { connect } from 'react-redux';
@@ -16,13 +17,13 @@ function createMapStateToProps() {
schema
} = importLists;
- const allLists = schema;
+ const listGroups = _.groupBy(schema, 'listType');
return {
isSchemaFetching,
isSchemaPopulated,
schemaError,
- allLists
+ listGroups
};
}
);
diff --git a/src/Lidarr.Api.V1/ImportLists/ImportListResource.cs b/src/Lidarr.Api.V1/ImportLists/ImportListResource.cs
index 3c2cc36da..f1a5f4fab 100644
--- a/src/Lidarr.Api.V1/ImportLists/ImportListResource.cs
+++ b/src/Lidarr.Api.V1/ImportLists/ImportListResource.cs
@@ -10,6 +10,7 @@ namespace Lidarr.Api.V1.ImportLists
public int QualityProfileId { get; set; }
public int LanguageProfileId { get; set; }
public int MetadataProfileId { get; set; }
+ public ImportListType ListType { get; set; }
}
public class ImportListResourceMapper : ProviderResourceMapper
@@ -29,6 +30,7 @@ namespace Lidarr.Api.V1.ImportLists
resource.QualityProfileId = definition.ProfileId;
resource.LanguageProfileId = definition.LanguageProfileId;
resource.MetadataProfileId = definition.MetadataProfileId;
+ resource.ListType = definition.ListType;
return resource;
}
@@ -48,6 +50,7 @@ namespace Lidarr.Api.V1.ImportLists
definition.ProfileId = resource.QualityProfileId;
definition.LanguageProfileId = resource.LanguageProfileId;
definition.MetadataProfileId = resource.MetadataProfileId;
+ definition.ListType = resource.ListType;
return definition;
}
diff --git a/src/NzbDrone.Core/Datastore/TableMapping.cs b/src/NzbDrone.Core/Datastore/TableMapping.cs
index 2122b8422..470123e30 100644
--- a/src/NzbDrone.Core/Datastore/TableMapping.cs
+++ b/src/NzbDrone.Core/Datastore/TableMapping.cs
@@ -68,7 +68,8 @@ namespace NzbDrone.Core.Datastore
.Ignore(d => d.Tags);
Mapper.Entity().RegisterDefinition("ImportLists")
- .Ignore(i => i.Enable);
+ .Ignore(i => i.Enable)
+ .Ignore(i => i.ListType);
Mapper.Entity().RegisterDefinition("Notifications")
.Ignore(i => i.SupportsOnGrab)
diff --git a/src/NzbDrone.Core/ImportLists/HeadphonesImport/HeadphonesImport.cs b/src/NzbDrone.Core/ImportLists/HeadphonesImport/HeadphonesImport.cs
index ec22977f2..6912858af 100644
--- a/src/NzbDrone.Core/ImportLists/HeadphonesImport/HeadphonesImport.cs
+++ b/src/NzbDrone.Core/ImportLists/HeadphonesImport/HeadphonesImport.cs
@@ -9,6 +9,8 @@ namespace NzbDrone.Core.ImportLists.HeadphonesImport
{
public override string Name => "Headphones";
+ public override ImportListType ListType => ImportListType.Other;
+
public override int PageSize => 1000;
public HeadphonesImport(IHttpClient httpClient, IImportListStatusService importListStatusService, IConfigService configService, IParsingService parsingService, Logger logger)
diff --git a/src/NzbDrone.Core/ImportLists/IImportList.cs b/src/NzbDrone.Core/ImportLists/IImportList.cs
index 04eb45c07..5aad5bb9d 100644
--- a/src/NzbDrone.Core/ImportLists/IImportList.cs
+++ b/src/NzbDrone.Core/ImportLists/IImportList.cs
@@ -6,6 +6,7 @@ namespace NzbDrone.Core.ImportLists
{
public interface IImportList : IProvider
{
+ ImportListType ListType { get; }
IList Fetch();
}
}
diff --git a/src/NzbDrone.Core/ImportLists/ImportListBase.cs b/src/NzbDrone.Core/ImportLists/ImportListBase.cs
index 8864830d7..36ae9a184 100644
--- a/src/NzbDrone.Core/ImportLists/ImportListBase.cs
+++ b/src/NzbDrone.Core/ImportLists/ImportListBase.cs
@@ -21,6 +21,8 @@ namespace NzbDrone.Core.ImportLists
public abstract string Name { get; }
+ public abstract ImportListType ListType {get; }
+
public ImportListBase(IImportListStatusService importListStatusService, IConfigService configService, IParsingService parsingService, Logger logger)
{
_importListStatusService = importListStatusService;
diff --git a/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs b/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs
index 0a31ecdd9..75b9d566f 100644
--- a/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs
+++ b/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs
@@ -14,6 +14,7 @@ namespace NzbDrone.Core.ImportLists
public override bool Enable => EnableAutomaticAdd;
public ImportListStatus Status { get; set; }
+ public ImportListType ListType { get; set; }
}
public enum ImportListMonitorType
diff --git a/src/NzbDrone.Core/ImportLists/ImportListFactory.cs b/src/NzbDrone.Core/ImportLists/ImportListFactory.cs
index a2a793a66..79165d275 100644
--- a/src/NzbDrone.Core/ImportLists/ImportListFactory.cs
+++ b/src/NzbDrone.Core/ImportLists/ImportListFactory.cs
@@ -35,6 +35,13 @@ namespace NzbDrone.Core.ImportLists
return base.Active().Where(c => c.Enable).ToList();
}
+ public override void SetProviderCharacteristics(IImportList provider, ImportListDefinition definition)
+ {
+ base.SetProviderCharacteristics(provider, definition);
+
+ definition.ListType = provider.ListType;
+ }
+
public List AutomaticAddEnabled(bool filterBlockedImportLists = true)
{
var enabledImportLists = GetAvailableProviders().Where(n => ((ImportListDefinition)n.Definition).EnableAutomaticAdd);
diff --git a/src/NzbDrone.Core/ImportLists/ImportListType.cs b/src/NzbDrone.Core/ImportLists/ImportListType.cs
new file mode 100644
index 000000000..556255095
--- /dev/null
+++ b/src/NzbDrone.Core/ImportLists/ImportListType.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace NzbDrone.Core.ImportLists
+{
+ public enum ImportListType
+ {
+ Spotify,
+ LastFm,
+ Other
+ }
+}
diff --git a/src/NzbDrone.Core/ImportLists/LastFm/LastFmTag.cs b/src/NzbDrone.Core/ImportLists/LastFm/LastFmTag.cs
index 58606beca..0d2da6c61 100644
--- a/src/NzbDrone.Core/ImportLists/LastFm/LastFmTag.cs
+++ b/src/NzbDrone.Core/ImportLists/LastFm/LastFmTag.cs
@@ -9,6 +9,8 @@ namespace NzbDrone.Core.ImportLists.LastFm
{
public override string Name => "Last.fm Tag";
+ public override ImportListType ListType => ImportListType.LastFm;
+
public override int PageSize => 1000;
public LastFmTag(IHttpClient httpClient, IImportListStatusService importListStatusService, IConfigService configService, IParsingService parsingService, Logger logger)
diff --git a/src/NzbDrone.Core/ImportLists/LastFm/LastFmUser.cs b/src/NzbDrone.Core/ImportLists/LastFm/LastFmUser.cs
index bb9143a9e..2e944c142 100644
--- a/src/NzbDrone.Core/ImportLists/LastFm/LastFmUser.cs
+++ b/src/NzbDrone.Core/ImportLists/LastFm/LastFmUser.cs
@@ -9,6 +9,8 @@ namespace NzbDrone.Core.ImportLists.LastFm
{
public override string Name => "Last.fm User";
+ public override ImportListType ListType => ImportListType.LastFm;
+
public override int PageSize => 1000;
public LastFmUser(IHttpClient httpClient, IImportListStatusService importListStatusService, IConfigService configService, IParsingService parsingService, Logger logger)
diff --git a/src/NzbDrone.Core/ImportLists/LidarrLists/LidarrLists.cs b/src/NzbDrone.Core/ImportLists/LidarrLists/LidarrLists.cs
index 9d8778ec6..fb14fb1a2 100644
--- a/src/NzbDrone.Core/ImportLists/LidarrLists/LidarrLists.cs
+++ b/src/NzbDrone.Core/ImportLists/LidarrLists/LidarrLists.cs
@@ -12,6 +12,8 @@ namespace NzbDrone.Core.ImportLists.LidarrLists
{
public override string Name => "Lidarr Lists";
+ public override ImportListType ListType => ImportListType.Other;
+
public override int PageSize => 10;
private readonly IMetadataRequestBuilder _requestBuilder;
diff --git a/src/NzbDrone.Core/ImportLists/Spotify/SpotifyImportListBase.cs b/src/NzbDrone.Core/ImportLists/Spotify/SpotifyImportListBase.cs
index ddc3fec75..d9c8c7564 100644
--- a/src/NzbDrone.Core/ImportLists/Spotify/SpotifyImportListBase.cs
+++ b/src/NzbDrone.Core/ImportLists/Spotify/SpotifyImportListBase.cs
@@ -32,6 +32,8 @@ namespace NzbDrone.Core.ImportLists.Spotify
_importListRepository = importListRepository;
}
+ public override ImportListType ListType => ImportListType.Spotify;
+
private void RefreshToken()
{
_logger.Trace("Refreshing Token");
diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj
index 31a628d4c..8722cd90c 100644
--- a/src/NzbDrone.Core/NzbDrone.Core.csproj
+++ b/src/NzbDrone.Core/NzbDrone.Core.csproj
@@ -552,6 +552,7 @@
+