mirror of
https://github.com/Sonarr/Sonarr.git
synced 2025-04-24 22:37:06 -04:00
Manual Import episode improvements
New: Show absolute episode number (for anime series) and title in manual import New: Show absolute episode number (for anime series) in manual import episode selection
This commit is contained in:
parent
328cfa12f6
commit
546d65b663
4 changed files with 24 additions and 3 deletions
|
@ -93,6 +93,7 @@ class SelectEpisodeModalContent extends Component {
|
||||||
error,
|
error,
|
||||||
items,
|
items,
|
||||||
relativePath,
|
relativePath,
|
||||||
|
isAnime,
|
||||||
sortKey,
|
sortKey,
|
||||||
sortDirection,
|
sortDirection,
|
||||||
onSortPress,
|
onSortPress,
|
||||||
|
@ -172,8 +173,10 @@ class SelectEpisodeModalContent extends Component {
|
||||||
key={item.id}
|
key={item.id}
|
||||||
id={item.id}
|
id={item.id}
|
||||||
episodeNumber={item.episodeNumber}
|
episodeNumber={item.episodeNumber}
|
||||||
|
absoluteEpisodeNumber={item.absoluteEpisodeNumber}
|
||||||
title={item.title}
|
title={item.title}
|
||||||
airDate={item.airDate}
|
airDate={item.airDate}
|
||||||
|
isAnime={isAnime}
|
||||||
isSelected={selectedState[item.id]}
|
isSelected={selectedState[item.id]}
|
||||||
onSelectedChange={this.onSelectedChange}
|
onSelectedChange={this.onSelectedChange}
|
||||||
/>
|
/>
|
||||||
|
@ -229,6 +232,7 @@ SelectEpisodeModalContent.propTypes = {
|
||||||
error: PropTypes.object,
|
error: PropTypes.object,
|
||||||
items: PropTypes.arrayOf(PropTypes.object).isRequired,
|
items: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||||
relativePath: PropTypes.string,
|
relativePath: PropTypes.string,
|
||||||
|
isAnime: PropTypes.bool.isRequired,
|
||||||
sortKey: PropTypes.string,
|
sortKey: PropTypes.string,
|
||||||
sortDirection: PropTypes.string,
|
sortDirection: PropTypes.string,
|
||||||
onSortPress: PropTypes.func.isRequired,
|
onSortPress: PropTypes.func.isRequired,
|
||||||
|
|
|
@ -25,8 +25,10 @@ class SelectEpisodeRow extends Component {
|
||||||
const {
|
const {
|
||||||
id,
|
id,
|
||||||
episodeNumber,
|
episodeNumber,
|
||||||
|
absoluteEpisodeNumber,
|
||||||
title,
|
title,
|
||||||
airDate,
|
airDate,
|
||||||
|
isAnime,
|
||||||
isSelected,
|
isSelected,
|
||||||
onSelectedChange
|
onSelectedChange
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
@ -41,6 +43,7 @@ class SelectEpisodeRow extends Component {
|
||||||
|
|
||||||
<TableRowCell>
|
<TableRowCell>
|
||||||
{episodeNumber}
|
{episodeNumber}
|
||||||
|
{isAnime ? ` (${absoluteEpisodeNumber})` : ''}
|
||||||
</TableRowCell>
|
</TableRowCell>
|
||||||
|
|
||||||
<TableRowCell>
|
<TableRowCell>
|
||||||
|
@ -58,8 +61,10 @@ class SelectEpisodeRow extends Component {
|
||||||
SelectEpisodeRow.propTypes = {
|
SelectEpisodeRow.propTypes = {
|
||||||
id: PropTypes.number.isRequired,
|
id: PropTypes.number.isRequired,
|
||||||
episodeNumber: PropTypes.number.isRequired,
|
episodeNumber: PropTypes.number.isRequired,
|
||||||
|
absoluteEpisodeNumber: PropTypes.number.isRequired,
|
||||||
title: PropTypes.string.isRequired,
|
title: PropTypes.string.isRequired,
|
||||||
airDate: PropTypes.string.isRequired,
|
airDate: PropTypes.string.isRequired,
|
||||||
|
isAnime: PropTypes.bool.isRequired,
|
||||||
isSelected: PropTypes.bool,
|
isSelected: PropTypes.bool,
|
||||||
onSelectedChange: PropTypes.func.isRequired
|
onSelectedChange: PropTypes.func.isRequired
|
||||||
};
|
};
|
||||||
|
|
|
@ -187,8 +187,17 @@ class InteractiveImportRow extends Component {
|
||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
const seriesTitle = series ? series.title : '';
|
const seriesTitle = series ? series.title : '';
|
||||||
const episodeNumbers = episodes.map((episode) => episode.episodeNumber)
|
const isAnime = series ? series.seriesType === 'anime' : false;
|
||||||
.join(', ');
|
|
||||||
|
const episodeInfo = episodes.map((episode) => {
|
||||||
|
return (
|
||||||
|
<div key={episode.id}>
|
||||||
|
{episode.episodeNumber}
|
||||||
|
{isAnime ? ` (${episode.absoluteEpisodeNumber})` : ''}
|
||||||
|
{` - ${episode.title}`}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
const showSeriesPlaceholder = isSelected && !series;
|
const showSeriesPlaceholder = isSelected && !series;
|
||||||
const showSeasonNumberPlaceholder = isSelected && !!series && isNaN(seasonNumber) && !isReprocessing;
|
const showSeasonNumberPlaceholder = isSelected && !!series && isNaN(seasonNumber) && !isReprocessing;
|
||||||
|
@ -246,7 +255,7 @@ class InteractiveImportRow extends Component {
|
||||||
onPress={this.onSelectEpisodePress}
|
onPress={this.onSelectEpisodePress}
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
showEpisodeNumbersPlaceholder ? <InteractiveImportRowCellPlaceholder /> : episodeNumbers
|
showEpisodeNumbersPlaceholder ? <InteractiveImportRowCellPlaceholder /> : episodeInfo
|
||||||
}
|
}
|
||||||
</TableRowCellButton>
|
</TableRowCellButton>
|
||||||
|
|
||||||
|
@ -339,6 +348,7 @@ class InteractiveImportRow extends Component {
|
||||||
isOpen={isSelectEpisodeModalOpen}
|
isOpen={isSelectEpisodeModalOpen}
|
||||||
ids={[id]}
|
ids={[id]}
|
||||||
seriesId={series && series.id}
|
seriesId={series && series.id}
|
||||||
|
isAnime={isAnime}
|
||||||
seasonNumber={seasonNumber}
|
seasonNumber={seasonNumber}
|
||||||
relativePath={relativePath}
|
relativePath={relativePath}
|
||||||
onModalClose={this.onSelectEpisodeModalClose}
|
onModalClose={this.onSelectEpisodeModalClose}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
|
import { sizes } from 'Helpers/Props';
|
||||||
import Modal from 'Components/Modal/Modal';
|
import Modal from 'Components/Modal/Modal';
|
||||||
import InteractiveImportSelectFolderModalContentConnector from './Folder/InteractiveImportSelectFolderModalContentConnector';
|
import InteractiveImportSelectFolderModalContentConnector from './Folder/InteractiveImportSelectFolderModalContentConnector';
|
||||||
import InteractiveImportModalContentConnector from './Interactive/InteractiveImportModalContentConnector';
|
import InteractiveImportModalContentConnector from './Interactive/InteractiveImportModalContentConnector';
|
||||||
|
@ -47,6 +48,7 @@ class InteractiveImportModal extends Component {
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
isOpen={isOpen}
|
isOpen={isOpen}
|
||||||
|
size={sizes.EXTRA_LARGE}
|
||||||
closeOnBackgroundClick={false}
|
closeOnBackgroundClick={false}
|
||||||
onModalClose={onModalClose}
|
onModalClose={onModalClose}
|
||||||
>
|
>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue