diff --git a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.css b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.css
index a6b976c68..79a4f0d94 100644
--- a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.css
+++ b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.css
@@ -10,3 +10,7 @@
display: none;
}
+
+.labelIcon {
+ margin-left: 8px;
+}
diff --git a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js
index c2996f0f7..25da42106 100644
--- a/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js
+++ b/frontend/src/Settings/ImportLists/ImportLists/EditImportListModalContent.js
@@ -1,6 +1,7 @@
import PropTypes from 'prop-types';
import React from 'react';
-import { inputTypes, kinds } from 'Helpers/Props';
+import { icons, inputTypes, kinds, tooltipPositions } from 'Helpers/Props';
+import Icon from 'Components/Icon';
import Button from 'Components/Link/Button';
import SpinnerErrorButton from 'Components/Link/SpinnerErrorButton';
import LoadingIndicator from 'Components/Loading/LoadingIndicator';
@@ -12,10 +13,41 @@ import Form from 'Components/Form/Form';
import FormGroup from 'Components/Form/FormGroup';
import FormLabel from 'Components/Form/FormLabel';
import FormInputGroup from 'Components/Form/FormInputGroup';
+import Popover from 'Components/Tooltip/Popover';
import ProviderFieldFormGroup from 'Components/Form/ProviderFieldFormGroup';
+import DescriptionList from 'Components/DescriptionList/DescriptionList';
+import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';
import styles from './EditImportListModalContent.css';
+function ImportListMonitoringOptionsPopoverContent() {
+ return (
+
+
+
+
+
+
+
+ );
+}
+
function EditImportListModalContent(props) {
+
+ const monitorOptions = [
+ { key: 'none', value: 'None' },
+ { key: 'specificAlbum', value: 'Specific Album' },
+ { key: 'entireArtist', value: 'All Artist Albums' }
+ ];
+
const {
advancedSettings,
isFetching,
@@ -92,11 +124,26 @@ function EditImportListModalContent(props) {
- Monitor
+
+ Monitor
+
+
+ }
+ title="Monitoring Options"
+ body={}
+ position={tooltipPositions.RIGHT}
+ />
+
{
return selectProviderSchema(state, section, payload, (selectedSchema) => {
- selectedSchema.enableRss = selectedSchema.supportsRss;
- selectedSchema.enableSearch = selectedSchema.supportsSearch;
+ selectedSchema.enableAutomaticAdd = true;
+ selectedSchema.shouldMonitor = 'entireArtist';
return selectedSchema;
});
diff --git a/src/Lidarr.Api.V1/ImportLists/ImportListResource.cs b/src/Lidarr.Api.V1/ImportLists/ImportListResource.cs
index 930ee9c90..3c2cc36da 100644
--- a/src/Lidarr.Api.V1/ImportLists/ImportListResource.cs
+++ b/src/Lidarr.Api.V1/ImportLists/ImportListResource.cs
@@ -5,7 +5,7 @@ namespace Lidarr.Api.V1.ImportLists
public class ImportListResource : ProviderResource
{
public bool EnableAutomaticAdd { get; set; }
- public bool ShouldMonitor { get; set; }
+ public ImportListMonitorType ShouldMonitor { get; set; }
public string RootFolderPath { get; set; }
public int QualityProfileId { get; set; }
public int LanguageProfileId { get; set; }
diff --git a/src/NzbDrone.Core.Test/ImportListTests/ImportListSyncServiceFixture.cs b/src/NzbDrone.Core.Test/ImportListTests/ImportListSyncServiceFixture.cs
index df76a7cc8..17995eeed 100644
--- a/src/NzbDrone.Core.Test/ImportListTests/ImportListSyncServiceFixture.cs
+++ b/src/NzbDrone.Core.Test/ImportListTests/ImportListSyncServiceFixture.cs
@@ -39,7 +39,7 @@ namespace NzbDrone.Core.Test.ImportListTests
Mocker.GetMock()
.Setup(v => v.Get(It.IsAny()))
- .Returns(new ImportListDefinition{ ShouldMonitor = true });
+ .Returns(new ImportListDefinition{ ShouldMonitor = ImportListMonitorType.SpecificAlbum });
Mocker.GetMock()
.Setup(v => v.Fetch())
@@ -83,6 +83,13 @@ namespace NzbDrone.Core.Test.ImportListTests
});
}
+ private void WithMonitorType(ImportListMonitorType monitor)
+ {
+ Mocker.GetMock()
+ .Setup(v => v.Get(It.IsAny()))
+ .Returns(new ImportListDefinition{ ShouldMonitor = monitor });
+ }
+
[Test]
public void should_search_if_artist_title_and_no_artist_id()
{
@@ -152,17 +159,20 @@ namespace NzbDrone.Core.Test.ImportListTests
.Verify(v => v.AddArtists(It.Is>(t=>t.Count == 0)));
}
- [Test]
- public void should_add_if_not_existing_artist()
+ [TestCase(ImportListMonitorType.None, false)]
+ [TestCase(ImportListMonitorType.SpecificAlbum, true)]
+ [TestCase(ImportListMonitorType.EntireArtist, true)]
+ public void should_add_if_not_existing_artist(ImportListMonitorType monitor, bool expectedArtistMonitored)
{
WithArtistId();
WithAlbum();
WithAlbumId();
+ WithMonitorType(monitor);
Subject.Execute(new ImportListSyncCommand());
Mocker.GetMock()
- .Verify(v => v.AddArtists(It.Is>(t => t.Count == 1)));
+ .Verify(v => v.AddArtists(It.Is>(t => t.Count == 1 && t.First().Monitored == expectedArtistMonitored)));
}
[Test]
@@ -180,11 +190,12 @@ namespace NzbDrone.Core.Test.ImportListTests
}
[Test]
- public void should_mark_album_for_monitor_if_album_id()
+ public void should_mark_album_for_monitor_if_album_id_and_specific_monitor_selected()
{
WithArtistId();
WithAlbum();
WithAlbumId();
+ WithMonitorType(ImportListMonitorType.SpecificAlbum);
Subject.Execute(new ImportListSyncCommand());
@@ -192,6 +203,20 @@ namespace NzbDrone.Core.Test.ImportListTests
.Verify(v => v.AddArtists(It.Is>(t => t.Count == 1 && t.First().AddOptions.AlbumsToMonitor.Contains("09474d62-17dd-3a4f-98fb-04c65f38a479"))));
}
+ [Test]
+ public void should_not_mark_album_for_monitor_if_album_id_and_monitor_all_selected()
+ {
+ WithArtistId();
+ WithAlbum();
+ WithAlbumId();
+ WithMonitorType(ImportListMonitorType.EntireArtist);
+
+ Subject.Execute(new ImportListSyncCommand());
+
+ Mocker.GetMock()
+ .Verify(v => v.AddArtists(It.Is>(t => t.Count == 1 && !t.First().AddOptions.AlbumsToMonitor.Any())));
+ }
+
[Test]
public void should_not_mark_album_for_monitor_if_no_album_id()
{
@@ -202,6 +227,5 @@ namespace NzbDrone.Core.Test.ImportListTests
Mocker.GetMock()
.Verify(v => v.AddArtists(It.Is>(t => t.Count == 1 && t.First().AddOptions.AlbumsToMonitor.Count == 0)));
}
-
}
}
diff --git a/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs b/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs
index 51afd2076..0a31ecdd9 100644
--- a/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs
+++ b/src/NzbDrone.Core/ImportLists/ImportListDefinition.cs
@@ -5,7 +5,7 @@ namespace NzbDrone.Core.ImportLists
public class ImportListDefinition : ProviderDefinition
{
public bool EnableAutomaticAdd { get; set; }
- public bool ShouldMonitor { get; set; }
+ public ImportListMonitorType ShouldMonitor { get; set; }
public int ProfileId { get; set; }
public int LanguageProfileId { get; set; }
public int MetadataProfileId { get; set; }
@@ -15,4 +15,11 @@ namespace NzbDrone.Core.ImportLists
public ImportListStatus Status { get; set; }
}
+
+ public enum ImportListMonitorType
+ {
+ None,
+ SpecificAlbum,
+ EntireArtist
+ }
}
diff --git a/src/NzbDrone.Core/ImportLists/ImportListSyncService.cs b/src/NzbDrone.Core/ImportLists/ImportListSyncService.cs
index c771254c9..cc48fc635 100644
--- a/src/NzbDrone.Core/ImportLists/ImportListSyncService.cs
+++ b/src/NzbDrone.Core/ImportLists/ImportListSyncService.cs
@@ -130,13 +130,14 @@ namespace NzbDrone.Core.ImportLists
// Append Artist if not already in DB or already on add list
if (existingArtist == null && excludedArtist == null && artistsToAdd.All(s => s.Metadata.Value.ForeignArtistId != report.ArtistMusicBrainzId))
{
+ var monitored = importList.ShouldMonitor != ImportListMonitorType.None;
artistsToAdd.Add(new Artist
{
Metadata = new ArtistMetadata {
ForeignArtistId = report.ArtistMusicBrainzId,
Name = report.Artist
},
- Monitored = importList.ShouldMonitor,
+ Monitored = monitored,
RootFolderPath = importList.RootFolderPath,
QualityProfileId = importList.ProfileId,
LanguageProfileId = importList.LanguageProfileId,
@@ -144,15 +145,15 @@ namespace NzbDrone.Core.ImportLists
Tags = importList.Tags,
AlbumFolder = true,
AddOptions = new AddArtistOptions {
- SearchForMissingAlbums = importList.ShouldMonitor,
- Monitored = importList.ShouldMonitor,
- Monitor = importList.ShouldMonitor ? MonitorTypes.All : MonitorTypes.None
+ SearchForMissingAlbums = monitored,
+ Monitored = monitored,
+ Monitor = monitored ? MonitorTypes.All : MonitorTypes.None
}
});
}
// Add Album so we know what to monitor
- if (report.AlbumMusicBrainzId.IsNotNullOrWhiteSpace() && artistsToAdd.Any(s => s.Metadata.Value.ForeignArtistId == report.ArtistMusicBrainzId) && importList.ShouldMonitor)
+ if (report.AlbumMusicBrainzId.IsNotNullOrWhiteSpace() && artistsToAdd.Any(s => s.Metadata.Value.ForeignArtistId == report.ArtistMusicBrainzId) && importList.ShouldMonitor == ImportListMonitorType.SpecificAlbum)
{
artistsToAdd.Find(s => s.Metadata.Value.ForeignArtistId == report.ArtistMusicBrainzId).AddOptions.AlbumsToMonitor.Add(report.AlbumMusicBrainzId);
}