import _ from 'lodash'; import classNames from 'classnames'; import React from 'react'; import CSSTransitionGroup from 'react-addons-css-transition-group'; import ApplicationPanel from '../layout/ApplicationPanel'; import Download from '../icons/Download'; import EventTypes from '../../constants/EventTypes'; import ETA from '../icons/ETA'; import format from '../../util/formatData'; import Ratio from '../../components/icons/Ratio'; import TorrentActions from '../../actions/TorrentActions'; import TorrentFiles from '../torrent-details/TorrentFiles'; import TorrentPeers from '../torrent-details/TorrentPeers'; import TorrentStore from '../../stores/TorrentStore'; import TorrentTrackers from '../torrent-details/TorrentTrackers'; import UIStore from '../../stores/UIStore'; import Upload from '../icons/Upload'; const METHODS_TO_BIND = [ 'onTorrentDetailsHashChange', 'onOpenChange', 'onTorrentDetailsChange', 'getHeading', 'getSidePanel' ]; export default class TorrentDetails extends React.Component { constructor() { super(); this.state = { isOpen: false, torrentDetailsSuccess: false, torrentDetailsError: false, selectedTorrent: {}, selectedTorrentHash: null, torrentDetails: {} }; METHODS_TO_BIND.forEach((method) => { this[method] = this[method].bind(this); }); } componentDidMount() { TorrentStore.listen(EventTypes.CLIENT_TORRENT_DETAILS_CHANGE, this.onTorrentDetailsChange); UIStore.listen(EventTypes.UI_TORRENT_DETAILS_OPEN_CHANGE, this.onOpenChange); UIStore.listen(EventTypes.UI_TORRENT_DETAILS_HASH_CHANGE, this.onTorrentDetailsHashChange); } componentWillUnmount() { TorrentStore.stopPollingTorrentDetails(); TorrentStore.unlisten(EventTypes.CLIENT_TORRENT_DETAILS_CHANGE, this.onTorrentDetailsChange); UIStore.unlisten(EventTypes.UI_TORRENT_DETAILS_OPEN_CHANGE, this.onOpenChange); UIStore.unlisten(EventTypes.UI_TORRENT_DETAILS_HASH_CHANGE, this.onTorrentDetailsHashChange); } onTorrentDetailsHashChange() { if (UIStore.isTorrentDetailsOpen()) { TorrentStore.fetchTorrentDetails(UIStore.getTorrentDetailsHash()); } } onOpenChange() { if (!UIStore.isTorrentDetailsOpen()) { TorrentStore.stopPollingTorrentDetails(); } else { TorrentStore.fetchTorrentDetails(UIStore.getTorrentDetailsHash()); } this.setState({ isOpen: UIStore.isTorrentDetailsOpen() }); } onTorrentDetailsChange() { this.setState({ torrentDetails: TorrentStore.getTorrentDetails(UIStore.getTorrentDetailsHash()) }); } getHeading() { // return ( //