mirror of
https://github.com/Radarr/Radarr
synced 2025-01-04 06:23:32 +00:00
New: Turn MediaInfo Popover into Modal, Add AudioFeatures
This commit is contained in:
parent
5e7f0f9d78
commit
8476e36122
3 changed files with 76 additions and 14 deletions
|
@ -2,7 +2,7 @@ import PropTypes from 'prop-types';
|
||||||
import React, { Component } from 'react';
|
import React, { Component } from 'react';
|
||||||
import formatBytes from 'Utilities/Number/formatBytes';
|
import formatBytes from 'Utilities/Number/formatBytes';
|
||||||
import IconButton from 'Components/Link/IconButton';
|
import IconButton from 'Components/Link/IconButton';
|
||||||
import { icons, kinds, tooltipPositions } from 'Helpers/Props';
|
import { icons, kinds } from 'Helpers/Props';
|
||||||
import TableRow from 'Components/Table/TableRow';
|
import TableRow from 'Components/Table/TableRow';
|
||||||
import TableRowCell from 'Components/Table/Cells/TableRowCell';
|
import TableRowCell from 'Components/Table/Cells/TableRowCell';
|
||||||
import TableRowCellButton from 'Components/Table/Cells/TableRowCellButton';
|
import TableRowCellButton from 'Components/Table/Cells/TableRowCellButton';
|
||||||
|
@ -10,15 +10,13 @@ import MovieQuality from 'Movie/MovieQuality';
|
||||||
import MovieFormats from 'Movie/MovieFormats';
|
import MovieFormats from 'Movie/MovieFormats';
|
||||||
import MovieLanguage from 'Movie/MovieLanguage';
|
import MovieLanguage from 'Movie/MovieLanguage';
|
||||||
import ConfirmModal from 'Components/Modal/ConfirmModal';
|
import ConfirmModal from 'Components/Modal/ConfirmModal';
|
||||||
import Icon from 'Components/Icon';
|
|
||||||
import Popover from 'Components/Tooltip/Popover';
|
|
||||||
import SelectQualityModal from 'MovieFile/Quality/SelectQualityModal';
|
import SelectQualityModal from 'MovieFile/Quality/SelectQualityModal';
|
||||||
import SelectLanguageModal from 'MovieFile/Language/SelectLanguageModal';
|
import SelectLanguageModal from 'MovieFile/Language/SelectLanguageModal';
|
||||||
import * as mediaInfoTypes from 'MovieFile/mediaInfoTypes';
|
import * as mediaInfoTypes from 'MovieFile/mediaInfoTypes';
|
||||||
import MediaInfoConnector from 'MovieFile/MediaInfoConnector';
|
import MediaInfoConnector from 'MovieFile/MediaInfoConnector';
|
||||||
import MovieFileRowCellPlaceholder from './MovieFileRowCellPlaceholder';
|
import MovieFileRowCellPlaceholder from './MovieFileRowCellPlaceholder';
|
||||||
import MediaInfoPopover from './MediaInfoPopover';
|
|
||||||
import styles from './MovieFileEditorRow.css';
|
import styles from './MovieFileEditorRow.css';
|
||||||
|
import FileDetailsModal from '../FileDetailsModal';
|
||||||
|
|
||||||
class MovieFileEditorRow extends Component {
|
class MovieFileEditorRow extends Component {
|
||||||
|
|
||||||
|
@ -31,7 +29,8 @@ class MovieFileEditorRow extends Component {
|
||||||
this.state = {
|
this.state = {
|
||||||
isSelectQualityModalOpen: false,
|
isSelectQualityModalOpen: false,
|
||||||
isSelectLanguageModalOpen: false,
|
isSelectLanguageModalOpen: false,
|
||||||
isConfirmDeleteModalOpen: false
|
isConfirmDeleteModalOpen: false,
|
||||||
|
isFileDetailsModalOpen: false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,6 +67,14 @@ class MovieFileEditorRow extends Component {
|
||||||
this.setState({ isConfirmDeleteModalOpen: false });
|
this.setState({ isConfirmDeleteModalOpen: false });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onFileDetailsPress = () => {
|
||||||
|
this.setState({ isFileDetailsModalOpen: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
onFileDetailsModalClose = () => {
|
||||||
|
this.setState({ isFileDetailsModalOpen: false });
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Render
|
// Render
|
||||||
|
|
||||||
|
@ -85,6 +92,7 @@ class MovieFileEditorRow extends Component {
|
||||||
const {
|
const {
|
||||||
isSelectQualityModalOpen,
|
isSelectQualityModalOpen,
|
||||||
isSelectLanguageModalOpen,
|
isSelectLanguageModalOpen,
|
||||||
|
isFileDetailsModalOpen,
|
||||||
isConfirmDeleteModalOpen
|
isConfirmDeleteModalOpen
|
||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
|
@ -170,15 +178,9 @@ class MovieFileEditorRow extends Component {
|
||||||
</TableRowCell>
|
</TableRowCell>
|
||||||
|
|
||||||
<TableRowCell className={styles.actions}>
|
<TableRowCell className={styles.actions}>
|
||||||
<Popover
|
<IconButton
|
||||||
anchor={
|
name={icons.MEDIA_INFO}
|
||||||
<Icon
|
onPress={this.onFileDetailsPress}
|
||||||
name={icons.MEDIA_INFO}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
title="Media Info"
|
|
||||||
body={<MediaInfoPopover {...mediaInfo} />}
|
|
||||||
position={tooltipPositions.LEFT}
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<IconButton
|
<IconButton
|
||||||
|
@ -188,6 +190,12 @@ class MovieFileEditorRow extends Component {
|
||||||
/>
|
/>
|
||||||
</TableRowCell>
|
</TableRowCell>
|
||||||
|
|
||||||
|
<FileDetailsModal
|
||||||
|
isOpen={isFileDetailsModalOpen}
|
||||||
|
onModalClose={this.onFileDetailsModalClose}
|
||||||
|
mediaInfo={mediaInfo}
|
||||||
|
/>
|
||||||
|
|
||||||
<ConfirmModal
|
<ConfirmModal
|
||||||
isOpen={isConfirmDeleteModalOpen}
|
isOpen={isConfirmDeleteModalOpen}
|
||||||
ids={[id]}
|
ids={[id]}
|
||||||
|
|
52
frontend/src/MovieFile/FileDetailsModal.js
Normal file
52
frontend/src/MovieFile/FileDetailsModal.js
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import React from 'react';
|
||||||
|
import { sizes } from 'Helpers/Props';
|
||||||
|
import Button from 'Components/Link/Button';
|
||||||
|
import Modal from 'Components/Modal/Modal';
|
||||||
|
import ModalContent from 'Components/Modal/ModalContent';
|
||||||
|
import ModalHeader from 'Components/Modal/ModalHeader';
|
||||||
|
import ModalBody from 'Components/Modal/ModalBody';
|
||||||
|
import ModalFooter from 'Components/Modal/ModalFooter';
|
||||||
|
import MediaInfoPopover from './Editor/MediaInfoPopover';
|
||||||
|
|
||||||
|
function FileDetailsModal(props) {
|
||||||
|
const {
|
||||||
|
isOpen,
|
||||||
|
onModalClose,
|
||||||
|
mediaInfo
|
||||||
|
} = props;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Modal
|
||||||
|
isOpen={isOpen}
|
||||||
|
onModalClose={onModalClose}
|
||||||
|
size={sizes.SMALL}
|
||||||
|
>
|
||||||
|
<ModalContent
|
||||||
|
onModalClose={onModalClose}
|
||||||
|
>
|
||||||
|
<ModalHeader>
|
||||||
|
Details
|
||||||
|
</ModalHeader>
|
||||||
|
|
||||||
|
<ModalBody>
|
||||||
|
<MediaInfoPopover {...mediaInfo} />
|
||||||
|
</ModalBody>
|
||||||
|
|
||||||
|
<ModalFooter>
|
||||||
|
<Button onPress={onModalClose}>
|
||||||
|
Close
|
||||||
|
</Button>
|
||||||
|
</ModalFooter>
|
||||||
|
</ModalContent>
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDetailsModal.propTypes = {
|
||||||
|
isOpen: PropTypes.bool.isRequired,
|
||||||
|
onModalClose: PropTypes.func.isRequired,
|
||||||
|
mediaInfo: PropTypes.object.isRequired
|
||||||
|
};
|
||||||
|
|
||||||
|
export default FileDetailsModal;
|
|
@ -7,6 +7,7 @@ namespace Radarr.Api.V3.MovieFiles
|
||||||
{
|
{
|
||||||
public class MediaInfoResource : RestResource
|
public class MediaInfoResource : RestResource
|
||||||
{
|
{
|
||||||
|
public string AudioAdditionalFeatures { get; set; }
|
||||||
public int AudioBitrate { get; set; }
|
public int AudioBitrate { get; set; }
|
||||||
public decimal AudioChannels { get; set; }
|
public decimal AudioChannels { get; set; }
|
||||||
public string AudioCodec { get; set; }
|
public string AudioCodec { get; set; }
|
||||||
|
@ -33,6 +34,7 @@ public static MediaInfoResource ToResource(this MediaInfoModel model, string sce
|
||||||
|
|
||||||
return new MediaInfoResource
|
return new MediaInfoResource
|
||||||
{
|
{
|
||||||
|
AudioAdditionalFeatures = model.AudioAdditionalFeatures,
|
||||||
AudioBitrate = model.AudioBitrate,
|
AudioBitrate = model.AudioBitrate,
|
||||||
AudioChannels = MediaInfoFormatter.FormatAudioChannels(model),
|
AudioChannels = MediaInfoFormatter.FormatAudioChannels(model),
|
||||||
AudioLanguages = model.AudioLanguages,
|
AudioLanguages = model.AudioLanguages,
|
||||||
|
|
Loading…
Reference in a new issue