1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2026-04-22 22:16:13 -04:00

New: Ability to forcibly grab a release from Interactive Search

Closes #395
This commit is contained in:
Mark McDowall
2019-01-18 11:46:21 -08:00
parent 70fb1551af
commit 8aecec507e
5 changed files with 116 additions and 14 deletions
@@ -90,6 +90,7 @@ const columns = [
function InteractiveSearch(props) {
const {
searchPayload,
isFetching,
isPopulated,
error,
@@ -164,6 +165,7 @@ function InteractiveSearch(props) {
<InteractiveSearchRow
key={item.guid}
{...item}
searchPayload={searchPayload}
longDateFormat={longDateFormat}
timeFormat={timeFormat}
onGrabPress={onGrabPress}
@@ -186,6 +188,7 @@ function InteractiveSearch(props) {
}
InteractiveSearch.propTypes = {
searchPayload: PropTypes.object.isRequired,
isFetching: PropTypes.bool.isRequired,
isPopulated: PropTypes.bool.isRequired,
error: PropTypes.object,
@@ -41,8 +41,8 @@ function createMapDispatchToProps(dispatch, props) {
dispatch(action({ selectedFilterKey }));
},
onGrabPress(guid, indexerId) {
dispatch(releaseActions.grabRelease({ guid, indexerId }));
onGrabPress(payload) {
dispatch(releaseActions.grabRelease(payload));
}
};
}
@@ -7,6 +7,7 @@ import { icons, kinds, tooltipPositions } from 'Helpers/Props';
import Icon from 'Components/Icon';
import SpinnerIconButton from 'Components/Link/SpinnerIconButton';
import Link from 'Components/Link/Link';
import ConfirmModal from 'Components/Modal/ConfirmModal';
import TableRow from 'Components/Table/TableRow';
import TableRowCell from 'Components/Table/Cells/TableRowCell';
import Popover from 'Components/Tooltip/Popover';
@@ -42,6 +43,17 @@ function getDownloadTooltip(isGrabbing, isGrabbed, grabError) {
class InteractiveSearchRow extends Component {
//
// Lifecycle
constructor(props, context) {
super(props, context);
this.state = {
isConfirmGrabModalOpen: false
};
}
//
// Listeners
@@ -50,9 +62,37 @@ class InteractiveSearchRow extends Component {
guid,
indexerId,
onGrabPress
}= this.props;
} = this.props;
onGrabPress(guid, indexerId);
onGrabPress({
guid,
indexerId
});
}
onConfirmGrabPress = () => {
this.setState({ isConfirmGrabModalOpen: true });
}
onGrabConfirm = () => {
this.setState({ isConfirmGrabModalOpen: false });
const {
guid,
indexerId,
searchPayload,
onGrabPress
} = this.props;
onGrabPress({
guid,
indexerId,
...searchPayload
});
}
onGrabCancel = () => {
this.setState({ isConfirmGrabModalOpen: false });
}
//
@@ -165,17 +205,24 @@ class InteractiveSearchRow extends Component {
</TableRowCell>
<TableRowCell className={styles.download}>
{
downloadAllowed &&
<SpinnerIconButton
name={getDownloadIcon(isGrabbing, isGrabbed, grabError)}
kind={grabError ? kinds.DANGER : kinds.DEFAULT}
title={getDownloadTooltip(isGrabbing, isGrabbed, grabError)}
isSpinning={isGrabbing}
onPress={this.onGrabPress}
/>
}
<SpinnerIconButton
name={getDownloadIcon(isGrabbing, isGrabbed, grabError)}
kind={grabError ? kinds.DANGER : kinds.DEFAULT}
title={getDownloadTooltip(isGrabbing, isGrabbed, grabError)}
isSpinning={isGrabbing}
onPress={downloadAllowed ? this.onGrabPress : this.onConfirmGrabPress}
/>
</TableRowCell>
<ConfirmModal
isOpen={this.state.isConfirmGrabModalOpen}
kind={kinds.WARNING}
title="Grab Release"
message={`Sonarr was unable to determine which series and episode this release was for. Sonarr may be unable to automatically import this release. Do you want to grab '${title}'?`}
confirmLabel="Grab"
onConfirm={this.onGrabConfirm}
onCancel={this.onGrabCancel}
/>
</TableRow>
);
}
@@ -205,6 +252,7 @@ InteractiveSearchRow.propTypes = {
grabError: PropTypes.string,
longDateFormat: PropTypes.string.isRequired,
timeFormat: PropTypes.string.isRequired,
searchPayload: PropTypes.object.isRequired,
onGrabPress: PropTypes.func.isRequired
};