import PropTypes from 'prop-types'; import React, { Component } from 'react'; import FieldSet from 'Components/FieldSet'; import SelectInput from 'Components/Form/SelectInput'; import TextInput from 'Components/Form/TextInput'; import Icon from 'Components/Icon'; import Button from 'Components/Link/Button'; import InlineMarkdown from 'Components/Markdown/InlineMarkdown'; import Modal from 'Components/Modal/Modal'; 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 { icons, sizes } from 'Helpers/Props'; import translate from 'Utilities/String/translate'; import NamingOption from './NamingOption'; import styles from './NamingModal.css'; const separatorOptions = [ { key: ' ', get value() { return `${translate('Space')} ( )`; } }, { key: '.', get value() { return `${translate('Period')} (.)`; } }, { key: '_', get value() { return `${translate('Underscore')} (_)`; } }, { key: '-', get value() { return `${translate('Dash')} (-)`; } } ]; const caseOptions = [ { key: 'title', get value() { return translate('DefaultCase'); } }, { key: 'lower', get value() { return translate('Lowercase'); } }, { key: 'upper', get value() { return translate('Uppercase'); } } ]; const fileNameTokens = [ { token: '{Movie Title} - {Quality Full}', example: 'Movie Title (2010) - HDTV-720p Proper' } ]; const movieTokens = [ { token: '{Movie Title}', example: 'Movie\'s Title', footNote: 1 }, { token: '{Movie Title:DE}', example: 'Titel des Films', footNote: 1 }, { token: '{Movie CleanTitle}', example: 'Movies Title', footNote: 1 }, { token: '{Movie TitleThe}', example: 'Movie\'s Title, The', footNote: 1 }, { token: '{Movie OriginalTitle}', example: 'Τίτλος ταινίας', footNote: 1 }, { token: '{Movie CleanOriginalTitle}', example: 'Τίτλος ταινίας', footNote: 1 }, { token: '{Movie TitleFirstCharacter}', example: 'M' }, { token: '{Movie TitleFirstCharacter:DE}', example: 'T' }, { token: '{Movie Collection}', example: 'The Movie Collection', footNote: 1 }, { token: '{Movie Certification}', example: 'R' }, { token: '{Release Year}', example: '2009' } ]; const movieIdTokens = [ { token: '{ImdbId}', example: 'tt12345' }, { token: '{TmdbId}', example: '123456' } ]; const qualityTokens = [ { token: '{Quality Full}', example: 'HDTV-720p Proper' }, { token: '{Quality Title}', example: 'HDTV-720p' } ]; const mediaInfoTokens = [ { token: '{MediaInfo Simple}', example: 'x264 DTS' }, { token: '{MediaInfo Full}', example: 'x264 DTS [EN+DE]', footNote: 1 }, { token: '{MediaInfo AudioCodec}', example: 'DTS' }, { token: '{MediaInfo AudioChannels}', example: '5.1' }, { token: '{MediaInfo AudioLanguages}', example: '[EN+DE]', footNote: 1 }, { token: '{MediaInfo SubtitleLanguages}', example: '[DE]', footNote: 1 }, { token: '{MediaInfo VideoCodec}', example: 'x264' }, { token: '{MediaInfo VideoBitDepth}', example: '10' }, { token: '{MediaInfo VideoDynamicRange}', example: 'HDR' }, { token: '{MediaInfo VideoDynamicRangeType}', example: 'DV HDR10' }, { token: '{MediaInfo 3D}', example: '3D' } ]; const releaseGroupTokens = [ { token: '{Release Group}', example: 'Rls Grp', footNote: 1 } ]; const editionTokens = [ { token: '{Edition Tags}', example: 'IMAX', footNote: 1 } ]; const customFormatTokens = [ { token: '{Custom Formats}', example: 'Surround Sound x264' }, { token: '{Custom Format:FormatName}', example: 'AMZN' } ]; const originalTokens = [ { token: '{Original Title}', example: 'Movie.Title.HDTV.x264-EVOLVE' }, { token: '{Original Filename}', example: 'movie title hdtv.x264-Evolve' } ]; class NamingModal extends Component { // // Lifecycle constructor(props, context) { super(props, context); this._selectionStart = null; this._selectionEnd = null; this.state = { separator: ' ', case: 'title' }; } // // Listeners onTokenSeparatorChange = (event) => { this.setState({ separator: event.value }); }; onTokenCaseChange = (event) => { this.setState({ case: event.value }); }; onInputSelectionChange = (selectionStart, selectionEnd) => { this._selectionStart = selectionStart; this._selectionEnd = selectionEnd; }; onOptionPress = ({ isFullFilename, tokenValue }) => { const { name, value, onInputChange } = this.props; const selectionStart = this._selectionStart; const selectionEnd = this._selectionEnd; if (isFullFilename) { onInputChange({ name, value: tokenValue }); } else if (selectionStart == null) { onInputChange({ name, value: `${value}${tokenValue}` }); } else { const start = value.substring(0, selectionStart); const end = value.substring(selectionEnd); const newValue = `${start}${tokenValue}${end}`; onInputChange({ name, value: newValue }); this._selectionStart = newValue.length - 1; this._selectionEnd = newValue.length - 1; } }; // // Render render() { const { name, value, isOpen, advancedSettings, additional, onInputChange, onModalClose } = this.props; const { separator: tokenSeparator, case: tokenCase } = this.state; return ( {translate('FileNameTokens')}
{ !advancedSettings &&
{ fileNameTokens.map(({ token, example }) => { return ( ); } ) }
}
{ movieTokens.map(({ token, example, footNote }) => { return ( ); } ) }
{ movieIdTokens.map(({ token, example }) => { return ( ); } ) }
{ additional &&
{ qualityTokens.map(({ token, example }) => { return ( ); } ) }
{ mediaInfoTokens.map(({ token, example, footNote }) => { return ( ); } ) }
{ releaseGroupTokens.map(({ token, example, footNote }) => { return ( ); } ) }
{ editionTokens.map(({ token, example, footNote }) => { return ( ); } ) }
{ customFormatTokens.map(({ token, example }) => { return ( ); } ) }
{ originalTokens.map(({ token, example }) => { return ( ); } ) }
}
); } } NamingModal.propTypes = { name: PropTypes.string.isRequired, value: PropTypes.string.isRequired, isOpen: PropTypes.bool.isRequired, advancedSettings: PropTypes.bool.isRequired, additional: PropTypes.bool.isRequired, onInputChange: PropTypes.func.isRequired, onModalClose: PropTypes.func.isRequired }; NamingModal.defaultProps = { additional: false }; export default NamingModal;