New: Option to control which new artist albums get monitored

(cherry picked from commit c51ae664aa6e6f5330be67e68476af76c55352f5)
This commit is contained in:
ta264 2022-04-28 21:04:09 +01:00 committed by Qstick
commit 2318c43536
41 changed files with 795 additions and 160 deletions

View file

@ -0,0 +1,27 @@
import React from 'react';
import DescriptionList from 'Components/DescriptionList/DescriptionList';
import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';
import translate from 'Utilities/String/translate';
function ArtistMonitorNewItemsOptionsPopoverContent() {
return (
<DescriptionList>
<DescriptionListItem
title={translate('AllAlbums')}
data="Monitor all new albums"
/>
<DescriptionListItem
title={translate('NewAlbums')}
data="Monitor new albums released after the newest existing album"
/>
<DescriptionListItem
title={translate('None')}
data="Don't monitor any new albums"
/>
</DescriptionList>
);
}
export default ArtistMonitorNewItemsOptionsPopoverContent;

View file

@ -1,46 +1,52 @@
import React from 'react';
import Alert from 'Components/Alert';
import DescriptionList from 'Components/DescriptionList/DescriptionList';
import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';
import translate from 'Utilities/String/translate';
function ArtistMonitoringOptionsPopoverContent() {
return (
<DescriptionList>
<DescriptionListItem
title={translate('AllAlbums')}
data={translate('AllAlbumsData')}
/>
<>
<Alert>
This is a one time adjustment to set which albums are monitored
</Alert>
<DescriptionList>
<DescriptionListItem
title={translate('AllAlbums')}
data={translate('AllAlbumsData')}
/>
<DescriptionListItem
title={translate('FutureAlbums')}
data={translate('FutureAlbumsData')}
/>
<DescriptionListItem
title={translate('FutureAlbums')}
data={translate('FutureAlbumsData')}
/>
<DescriptionListItem
title={translate('MissingAlbums')}
data={translate('MissingAlbumsData')}
/>
<DescriptionListItem
title={translate('MissingAlbums')}
data={translate('MissingAlbumsData')}
/>
<DescriptionListItem
title={translate('ExistingAlbums')}
data={translate('ExistingAlbumsData')}
/>
<DescriptionListItem
title={translate('ExistingAlbums')}
data={translate('ExistingAlbumsData')}
/>
<DescriptionListItem
title={translate('FirstAlbum')}
data={translate('FirstAlbumData')}
/>
<DescriptionListItem
title={translate('FirstAlbum')}
data={translate('FirstAlbumData')}
/>
<DescriptionListItem
title={translate('LatestAlbum')}
data={translate('LatestAlbumData')}
/>
<DescriptionListItem
title={translate('LatestAlbum')}
data={translate('LatestAlbumData')}
/>
<DescriptionListItem
title={translate('None')}
data={translate('NoneData')}
/>
</DescriptionList>
<DescriptionListItem
title={translate('None')}
data={translate('NoneData')}
/>
</DescriptionList>
</>
);
}

View file

@ -1,6 +1,7 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import MonitorAlbumsSelectInput from 'Components/Form/MonitorAlbumsSelectInput';
import MonitorNewItemsSelectInput from 'Components/Form/MonitorNewItemsSelectInput';
import SelectInput from 'Components/Form/SelectInput';
import SpinnerButton from 'Components/Link/SpinnerButton';
import PageContentFooter from 'Components/Page/PageContentFooter';
@ -19,7 +20,8 @@ class AlbumStudioFooter extends Component {
this.state = {
monitored: NO_CHANGE,
monitor: NO_CHANGE
monitor: NO_CHANGE,
monitorNewItems: NO_CHANGE
};
}
@ -32,7 +34,8 @@ class AlbumStudioFooter extends Component {
if (prevProps.isSaving && !isSaving && !saveError) {
this.setState({
monitored: NO_CHANGE,
monitor: NO_CHANGE
monitor: NO_CHANGE,
monitorNewItems: NO_CHANGE
});
}
}
@ -47,7 +50,8 @@ class AlbumStudioFooter extends Component {
onUpdateSelectedPress = () => {
const {
monitor,
monitored
monitored,
monitorNewItems
} = this.state;
const changes = {};
@ -60,6 +64,10 @@ class AlbumStudioFooter extends Component {
changes.monitor = monitor;
}
if (monitorNewItems !== NO_CHANGE) {
changes.monitorNewItems = monitorNewItems;
}
this.props.onUpdateSelectedPress(changes);
};
@ -74,7 +82,8 @@ class AlbumStudioFooter extends Component {
const {
monitored,
monitor
monitor,
monitorNewItems
} = this.state;
const monitoredOptions = [
@ -83,7 +92,9 @@ class AlbumStudioFooter extends Component {
{ key: 'unmonitored', value: 'Unmonitored' }
];
const noChanges = monitored === NO_CHANGE && monitor === NO_CHANGE;
const noChanges = monitored === NO_CHANGE &&
monitor === NO_CHANGE &&
monitorNewItems === NO_CHANGE;
return (
<PageContentFooter>
@ -103,7 +114,7 @@ class AlbumStudioFooter extends Component {
<div className={styles.inputContainer}>
<div className={styles.label}>
Monitor Albums
Monitor Existing Albums
</div>
<MonitorAlbumsSelectInput
@ -115,6 +126,20 @@ class AlbumStudioFooter extends Component {
/>
</div>
<div className={styles.inputContainer}>
<div className={styles.label}>
Monitor New Albums
</div>
<MonitorNewItemsSelectInput
name="monitorNewItems"
value={monitorNewItems}
includeNoChange={true}
isDisabled={!selectedCount}
onChange={this.onInputChange}
/>
</div>
<div>
<div className={styles.label}>
{selectedCount} Artist(s) Selected

View file

@ -1,6 +1,7 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import ArtistMetadataProfilePopoverContent from 'AddArtist/ArtistMetadataProfilePopoverContent';
import ArtistMonitorNewItemsOptionsPopoverContent from 'AddArtist/ArtistMonitorNewItemsOptionsPopoverContent';
import MoveArtistModal from 'Artist/MoveArtist/MoveArtistModal';
import Form from 'Components/Form/Form';
import FormGroup from 'Components/Form/FormGroup';
@ -73,6 +74,7 @@ class EditArtistModalContent extends Component {
const {
monitored,
monitorNewItems,
qualityProfileId,
metadataProfileId,
path,
@ -101,6 +103,31 @@ class EditArtistModalContent extends Component {
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('MonitorNewItems')}
<Popover
anchor={
<Icon
className={styles.labelIcon}
name={icons.INFO}
/>
}
title={translate('MonitorNewItems')}
body={<ArtistMonitorNewItemsOptionsPopoverContent />}
position={tooltipPositions.RIGHT}
/>
</FormLabel>
<FormInputGroup
type={inputTypes.MONITOR_NEW_ITEMS_SELECT}
name="monitorNewItems"
helpText={translate('MonitorNewItemsHelpText')}
{...monitorNewItems}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('QualityProfile')}

View file

@ -39,6 +39,7 @@ function createMapStateToProps() {
const artistSettings = _.pick(artist, [
'monitored',
'monitorNewItems',
'qualityProfileId',
'metadataProfileId',
'path',

View file

@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import MoveArtistModal from 'Artist/MoveArtist/MoveArtistModal';
import MetadataProfileSelectInputConnector from 'Components/Form/MetadataProfileSelectInputConnector';
import MonitorNewItemsSelectInput from 'Components/Form/MonitorNewItemsSelectInput';
import QualityProfileSelectInputConnector from 'Components/Form/QualityProfileSelectInputConnector';
import RootFolderSelectInputConnector from 'Components/Form/RootFolderSelectInputConnector';
import SelectInput from 'Components/Form/SelectInput';
@ -26,6 +27,7 @@ class ArtistEditorFooter extends Component {
this.state = {
monitored: NO_CHANGE,
monitorNewItems: NO_CHANGE,
qualityProfileId: NO_CHANGE,
metadataProfileId: NO_CHANGE,
rootFolderPath: NO_CHANGE,
@ -46,6 +48,7 @@ class ArtistEditorFooter extends Component {
if (prevProps.isSaving && !isSaving && !saveError) {
this.setState({
monitored: NO_CHANGE,
monitorNewItems: NO_CHANGE,
qualityProfileId: NO_CHANGE,
metadataProfileId: NO_CHANGE,
rootFolderPath: NO_CHANGE,
@ -146,6 +149,7 @@ class ArtistEditorFooter extends Component {
const {
monitored,
monitorNewItems,
qualityProfileId,
metadataProfileId,
rootFolderPath,
@ -179,6 +183,21 @@ class ArtistEditorFooter extends Component {
/>
</div>
<div className={styles.inputContainer}>
<ArtistEditorFooterLabel
label={translate('MonitorNewItems')}
isSaving={isSaving && monitored !== NO_CHANGE}
/>
<MonitorNewItemsSelectInput
name="monitorNewItems"
value={monitorNewItems}
includeNoChange={true}
isDisabled={!selectedCount}
onChange={this.onInputChange}
/>
</div>
{
columns.map((column) => {
const {

View file

@ -0,0 +1,149 @@
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import Alert from 'Components/Alert';
import Form from 'Components/Form/Form';
import FormGroup from 'Components/Form/FormGroup';
import FormInputGroup from 'Components/Form/FormInputGroup';
import FormLabel from 'Components/Form/FormLabel';
import Button from 'Components/Link/Button';
import SpinnerButton from 'Components/Link/SpinnerButton';
import ModalBody from 'Components/Modal/ModalBody';
import ModalContent from 'Components/Modal/ModalContent';
import ModalFooter from 'Components/Modal/ModalFooter';
import ModalHeader from 'Components/Modal/ModalHeader';
import { inputTypes, kinds } from 'Helpers/Props';
import translate from 'Utilities/String/translate';
const NO_CHANGE = 'noChange';
class MonitoringOptionsModalContent extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
monitor: NO_CHANGE
};
}
componentDidUpdate(prevProps) {
const {
isSaving,
saveError
} = prevProps;
if (prevProps.isSaving && !isSaving && !saveError) {
this.setState({
monitor: NO_CHANGE
});
}
}
onInputChange = ({ name, value }) => {
this.setState({ [name]: value });
};
//
// Listeners
onSavePress = () => {
const {
onSavePress,
isSaving
} = this.props;
const {
monitor
} = this.state;
if (monitor !== NO_CHANGE) {
onSavePress({ monitor });
}
if (!isSaving) {
this.onModalClose();
}
};
onModalClose = () => {
this.props.onModalClose();
};
//
// Render
render() {
const {
isSaving,
onInputChange,
onModalClose,
...otherProps
} = this.props;
const {
monitor
} = this.state;
return (
<ModalContent onModalClose={onModalClose}>
<ModalHeader>
{translate('MonitorAlbum')}
</ModalHeader>
<ModalBody>
<Alert kind={kinds.INFO}>
<div>
{translate('MonitorAlbumExistingOnlyWarning')}
</div>
</Alert>
<Form {...otherProps}>
<FormGroup>
<FormLabel>{translate('Monitoring')}</FormLabel>
<FormInputGroup
type={inputTypes.MONITOR_ALBUMS_SELECT}
name="monitor"
value={monitor}
includeNoChange={true}
onChange={this.onInputChange}
/>
</FormGroup>
</Form>
</ModalBody>
<ModalFooter>
<Button
onPress={onModalClose}
>
{translate('Cancel')}
</Button>
<SpinnerButton
isSpinning={isSaving}
onPress={this.onSavePress}
>
{translate('Save')}
</SpinnerButton>
</ModalFooter>
</ModalContent>
);
}
}
MonitoringOptionsModalContent.propTypes = {
authorId: PropTypes.number.isRequired,
saveError: PropTypes.object,
isSaving: PropTypes.bool.isRequired,
onInputChange: PropTypes.func.isRequired,
onSavePress: PropTypes.func.isRequired,
onModalClose: PropTypes.func.isRequired
};
MonitoringOptionsModalContent.defaultProps = {
isSaving: false
};
export default MonitoringOptionsModalContent;

View file

@ -14,6 +14,7 @@ import IndexerSelectInputConnector from './IndexerSelectInputConnector';
import KeyValueListInput from './KeyValueListInput';
import MetadataProfileSelectInputConnector from './MetadataProfileSelectInputConnector';
import MonitorAlbumsSelectInput from './MonitorAlbumsSelectInput';
import MonitorNewItemsSelectInput from './MonitorNewItemsSelectInput';
import NumberInput from './NumberInput';
import OAuthInputConnector from './OAuthInputConnector';
import PasswordInput from './PasswordInput';
@ -52,6 +53,9 @@ function getComponent(type) {
case inputTypes.MONITOR_ALBUMS_SELECT:
return MonitorAlbumsSelectInput;
case inputTypes.MONITOR_NEW_ITEMS_SELECT:
return MonitorNewItemsSelectInput;
case inputTypes.NUMBER:
return NumberInput;

View file

@ -0,0 +1,50 @@
import PropTypes from 'prop-types';
import React from 'react';
import monitorNewItemsOptions from 'Utilities/Artist/monitorNewItemsOptions';
import SelectInput from './SelectInput';
function MonitorNewItemsSelectInput(props) {
const {
includeNoChange,
includeMixed,
...otherProps
} = props;
const values = [...monitorNewItemsOptions];
if (includeNoChange) {
values.unshift({
key: 'noChange',
value: 'No Change',
disabled: true
});
}
if (includeMixed) {
values.unshift({
key: 'mixed',
value: '(Mixed)',
disabled: true
});
}
return (
<SelectInput
values={values}
{...otherProps}
/>
);
}
MonitorNewItemsSelectInput.propTypes = {
includeNoChange: PropTypes.bool.isRequired,
includeMixed: PropTypes.bool.isRequired,
onChange: PropTypes.func.isRequired
};
MonitorNewItemsSelectInput.defaultProps = {
includeNoChange: false,
includeMixed: false
};
export default MonitorNewItemsSelectInput;

View file

@ -5,6 +5,7 @@ export const DEVICE = 'device';
export const PLAYLIST = 'playlist';
export const KEY_VALUE_LIST = 'keyValueList';
export const MONITOR_ALBUMS_SELECT = 'monitorAlbumsSelect';
export const MONITOR_NEW_ITEMS_SELECT = 'monitorNewItemsSelect';
export const NUMBER = 'number';
export const OAUTH = 'oauth';
export const PASSWORD = 'password';
@ -31,6 +32,7 @@ export const all = [
PLAYLIST,
KEY_VALUE_LIST,
MONITOR_ALBUMS_SELECT,
MONITOR_NEW_ITEMS_SELECT,
NUMBER,
OAUTH,
PASSWORD,

View file

@ -85,6 +85,7 @@ class AddNewAlbumModalContentConnector extends Component {
foreignAlbumId,
rootFolderPath,
monitor,
monitorNewItems,
qualityProfileId,
metadataProfileId,
tags
@ -94,6 +95,7 @@ class AddNewAlbumModalContentConnector extends Component {
foreignAlbumId,
rootFolderPath: rootFolderPath.value,
monitor: monitor.value,
monitorNewItems: monitorNewItems.value,
qualityProfileId: qualityProfileId.value,
metadataProfileId: metadataProfileId.value,
tags: tags.value,
@ -120,6 +122,7 @@ AddNewAlbumModalContentConnector.propTypes = {
foreignAlbumId: PropTypes.string.isRequired,
rootFolderPath: PropTypes.object,
monitor: PropTypes.object.isRequired,
monitorNewItems: PropTypes.object.isRequired,
qualityProfileId: PropTypes.object,
metadataProfileId: PropTypes.object,
noneMetadataProfileId: PropTypes.number.isRequired,

View file

@ -57,6 +57,7 @@ class AddNewArtistModalContentConnector extends Component {
foreignArtistId,
rootFolderPath,
monitor,
monitorNewItems,
qualityProfileId,
metadataProfileId,
tags
@ -66,6 +67,7 @@ class AddNewArtistModalContentConnector extends Component {
foreignArtistId,
rootFolderPath: rootFolderPath.value,
monitor: monitor.value,
monitorNewItems: monitorNewItems.value,
qualityProfileId: qualityProfileId.value,
metadataProfileId: metadataProfileId.value,
tags: tags.value,
@ -91,6 +93,7 @@ AddNewArtistModalContentConnector.propTypes = {
foreignArtistId: PropTypes.string.isRequired,
rootFolderPath: PropTypes.object,
monitor: PropTypes.object.isRequired,
monitorNewItems: PropTypes.object.isRequired,
qualityProfileId: PropTypes.object,
metadataProfileId: PropTypes.object,
tags: PropTypes.object.isRequired,

View file

@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
import React, { Component } from 'react';
import ArtistMetadataProfilePopoverContent from 'AddArtist/ArtistMetadataProfilePopoverContent';
import ArtistMonitoringOptionsPopoverContent from 'AddArtist/ArtistMonitoringOptionsPopoverContent';
import ArtistMonitorNewItemsOptionsPopoverContent from 'AddArtist/ArtistMonitorNewItemsOptionsPopoverContent';
import Form from 'Components/Form/Form';
import FormGroup from 'Components/Form/FormGroup';
import FormInputGroup from 'Components/Form/FormInputGroup';
@ -32,6 +33,7 @@ class AddArtistOptionsForm extends Component {
const {
rootFolderPath,
monitor,
monitorNewItems,
qualityProfileId,
metadataProfileId,
includeNoneMetadataProfile,
@ -76,11 +78,37 @@ class AddArtistOptionsForm extends Component {
<FormInputGroup
type={inputTypes.MONITOR_ALBUMS_SELECT}
name="monitor"
helpText={translate('MonitoringOptionsHelpText')}
onChange={onInputChange}
{...monitor}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('MonitorNewItems')}
<Popover
anchor={
<Icon
className={styles.labelIcon}
name={icons.INFO}
/>
}
title={translate('MonitorNewItems')}
body={<ArtistMonitorNewItemsOptionsPopoverContent />}
position={tooltipPositions.RIGHT}
/>
</FormLabel>
<FormInputGroup
type={inputTypes.MONITOR_NEW_ITEMS_SELECT}
name="monitorNewItems"
helpText={translate('MonitorNewItemsHelpText')}
{...monitorNewItems}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('QualityProfile')}
@ -143,6 +171,7 @@ class AddArtistOptionsForm extends Component {
AddArtistOptionsForm.propTypes = {
rootFolderPath: PropTypes.object,
monitor: PropTypes.object.isRequired,
monitorNewItems: PropTypes.string.isRequired,
qualityProfileId: PropTypes.object,
metadataProfileId: PropTypes.object,
showMetadataProfile: PropTypes.bool.isRequired,

View file

@ -1,8 +1,10 @@
import PropTypes from 'prop-types';
import React from 'react';
import ArtistMonitorNewItemsOptionsPopoverContent from 'AddArtist/ArtistMonitorNewItemsOptionsPopoverContent';
import Alert from 'Components/Alert';
import DescriptionList from 'Components/DescriptionList/DescriptionList';
import DescriptionListItem from 'Components/DescriptionList/DescriptionListItem';
import FieldSet from 'Components/FieldSet';
import Form from 'Components/Form/Form';
import FormGroup from 'Components/Form/FormGroup';
import FormInputGroup from 'Components/Form/FormInputGroup';
@ -74,6 +76,7 @@ function EditImportListModalContent(props) {
enableAutomaticAdd,
shouldMonitor,
rootFolderPath,
monitorNewItems,
qualityProfileId,
metadataProfileId,
tags,
@ -112,120 +115,150 @@ function EditImportListModalContent(props) {
{message.value.message}
</Alert>
}
<FormGroup>
<FormLabel>
{translate('Name')}
</FormLabel>
<FormInputGroup
type={inputTypes.TEXT}
name="name"
{...name}
onChange={onInputChange}
/>
</FormGroup>
<FieldSet legend={translate('ImportListSettings')} >
<FormGroup>
<FormLabel>
{translate('Name')}
</FormLabel>
<FormGroup>
<FormLabel>
{translate('EnableAutomaticAdd')}
</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="enableAutomaticAdd"
helpText={translate('EnableAutomaticAddHelpText')}
{...enableAutomaticAdd}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
Monitor
<Popover
anchor={
<Icon
className={styles.labelIcon}
name={icons.INFO}
/>
}
title={translate('MonitoringOptions')}
body={<ImportListMonitoringOptionsPopoverContent />}
position={tooltipPositions.RIGHT}
<FormInputGroup
type={inputTypes.TEXT}
name="name"
{...name}
onChange={onInputChange}
/>
</FormLabel>
</FormGroup>
<FormInputGroup
type={inputTypes.SELECT}
name="shouldMonitor"
values={monitorOptions}
helpText={translate('ShouldMonitorHelpText')}
{...shouldMonitor}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('EnableAutomaticAdd')}
</FormLabel>
<FormGroup>
<FormLabel>
{translate('RootFolder')}
</FormLabel>
<FormInputGroup
type={inputTypes.CHECK}
name="enableAutomaticAdd"
helpText={translate('EnableAutomaticAddHelpText')}
{...enableAutomaticAdd}
onChange={onInputChange}
/>
</FormGroup>
<FormInputGroup
type={inputTypes.ROOT_FOLDER_SELECT}
name="rootFolderPath"
helpText={translate('RootFolderPathHelpText')}
{...rootFolderPath}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
Monitor
<FormGroup>
<FormLabel>
{translate('QualityProfile')}
</FormLabel>
<Popover
anchor={
<Icon
className={styles.labelIcon}
name={icons.INFO}
/>
}
title={translate('MonitoringOptions')}
body={<ImportListMonitoringOptionsPopoverContent />}
position={tooltipPositions.RIGHT}
/>
</FormLabel>
<FormInputGroup
type={inputTypes.QUALITY_PROFILE_SELECT}
name="qualityProfileId"
helpText={translate('QualityProfileIdHelpText')}
{...qualityProfileId}
onChange={onInputChange}
/>
</FormGroup>
<FormInputGroup
type={inputTypes.SELECT}
name="shouldMonitor"
values={monitorOptions}
helpText={translate('ShouldMonitorHelpText')}
{...shouldMonitor}
onChange={onInputChange}
/>
</FormGroup>
</FieldSet>
<FormGroup className={showMetadataProfile ? undefined : styles.hideMetadataProfile}>
<FormLabel>
{translate('MetadataProfile')}
</FormLabel>
<FieldSet legend={translate('AddedArtistSettings')} >
<FormGroup>
<FormLabel>
{translate('RootFolder')}
</FormLabel>
<FormInputGroup
type={inputTypes.METADATA_PROFILE_SELECT}
name="metadataProfileId"
helpText={translate('MetadataProfileIdHelpText')}
{...metadataProfileId}
includeNone={true}
onChange={onInputChange}
/>
</FormGroup>
<FormInputGroup
type={inputTypes.ROOT_FOLDER_SELECT}
name="rootFolderPath"
helpText={translate('RootFolderPathHelpText')}
{...rootFolderPath}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('LidarrTags')}
</FormLabel>
<FormGroup>
<FormLabel>
{translate('MonitorNewItems')}
<Popover
anchor={
<Icon
className={styles.labelIcon}
name={icons.INFO}
/>
}
title={translate('MonitorNewItems')}
body={<ArtistMonitorNewItemsOptionsPopoverContent />}
position={tooltipPositions.RIGHT}
/>
</FormLabel>
<FormInputGroup
type={inputTypes.TAG}
name="tags"
helpText={translate('TagsHelpText')}
{...tags}
onChange={onInputChange}
/>
</FormGroup>
<FormInputGroup
type={inputTypes.MONITOR_NEW_ITEMS_SELECT}
name="monitorNewItems"
helpText={translate('MonitorNewItemsHelpText')}
{...monitorNewItems}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('QualityProfile')}
</FormLabel>
<FormInputGroup
type={inputTypes.QUALITY_PROFILE_SELECT}
name="qualityProfileId"
helpText={translate('QualityProfileIdHelpText')}
{...qualityProfileId}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup className={showMetadataProfile ? undefined : styles.hideMetadataProfile}>
<FormLabel>
{translate('MetadataProfile')}
</FormLabel>
<FormInputGroup
type={inputTypes.METADATA_PROFILE_SELECT}
name="metadataProfileId"
helpText={translate('MetadataProfileIdHelpText')}
{...metadataProfileId}
includeNone={true}
onChange={onInputChange}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('ReadarrTags')}
</FormLabel>
<FormInputGroup
type={inputTypes.TAG}
name="tags"
helpText={translate('TagsHelpText')}
{...tags}
onChange={onInputChange}
/>
</FormGroup>
</FieldSet>
{
!!fields && !!fields.length &&
<div>
<FieldSet legend={translate('ImportListSpecificSettings')} >
{
fields.map((field) => {
return (
@ -241,7 +274,7 @@ function EditImportListModalContent(props) {
);
})
}
</div>
</FieldSet>
}
</Form>

View file

@ -2,6 +2,7 @@ import PropTypes from 'prop-types';
import React from 'react';
import ArtistMetadataProfilePopoverContent from 'AddArtist/ArtistMetadataProfilePopoverContent';
import ArtistMonitoringOptionsPopoverContent from 'AddArtist/ArtistMonitoringOptionsPopoverContent';
import ArtistMonitorNewItemsOptionsPopoverContent from 'AddArtist/ArtistMonitorNewItemsOptionsPopoverContent';
import Form from 'Components/Form/Form';
import FormGroup from 'Components/Form/FormGroup';
import FormInputGroup from 'Components/Form/FormInputGroup';
@ -43,6 +44,7 @@ function EditRootFolderModalContent(props) {
defaultQualityProfileId,
defaultMetadataProfileId,
defaultMonitorOption,
defaultNewItemMonitorOption,
defaultTags
} = item;
@ -99,7 +101,7 @@ function EditRootFolderModalContent(props) {
<FormGroup>
<FormLabel>
Monitor
{translate('Monitor')}
<Popover
anchor={
@ -124,6 +126,31 @@ function EditRootFolderModalContent(props) {
</FormGroup>
<FormGroup>
<FormLabel>
{translate('MonitorNewItems')}
<Popover
anchor={
<Icon
className={styles.labelIcon}
name={icons.INFO}
/>
}
title={translate('MonitorNewItems')}
body={<ArtistMonitorNewItemsOptionsPopoverContent />}
position={tooltipPositions.RIGHT}
/>
</FormLabel>
<FormInputGroup
type={inputTypes.MONITOR_NEW_ITEMS_SELECT}
name="defaultNewItemMonitorOption"
{...defaultNewItemMonitorOption}
onChange={onInputChange}
helpText={translate('MonitorNewItemsHelpText')}
/>
</FormGroup>
<FormGroup>
<FormLabel>
{translate('QualityProfile')}

View file

@ -102,7 +102,8 @@ export const actionHandlers = handleThunks({
const {
artistIds,
monitored,
monitor
monitor,
monitorNewItems
} = payload;
const artist = [];
@ -127,7 +128,8 @@ export const actionHandlers = handleThunks({
method: 'POST',
data: JSON.stringify({
artist,
monitoringOptions: { monitor }
monitoringOptions: { monitor },
monitorNewItems
}),
dataType: 'json'
}).request;

View file

@ -3,6 +3,7 @@ function getNewArtist(artist, payload) {
const {
rootFolderPath,
monitor,
monitorNewItems,
qualityProfileId,
metadataProfileId,
artistType,
@ -17,6 +18,7 @@ function getNewArtist(artist, payload) {
artist.addOptions = addOptions;
artist.monitored = true;
artist.monitorNewItems = monitorNewItems;
artist.qualityProfileId = qualityProfileId;
artist.metadataProfileId = metadataProfileId;
artist.rootFolderPath = rootFolderPath;

View file

@ -0,0 +1,7 @@
const monitorNewItemsOptions = [
{ key: 'all', value: 'All Albums' },
{ key: 'none', value: 'None' },
{ key: 'new', value: 'New' }
];
export default monitorNewItemsOptions;