import React from 'react'; import lbry from 'lbry'; import VideoPlayer from './internal/player'; import VideoPlayButton from './internal/play-button'; import LoadingScreen from './internal/loading-screen'; import NsfwOverlay from 'component/nsfwOverlay'; class Video extends React.PureComponent { constructor(props) { super(props); this.state = { showNsfwHelp: false, }; } componentWillUnmount() { this.props.cancelPlay(); } isMediaSame(nextProps) { return ( this.props.fileInfo && nextProps.fileInfo && this.props.fileInfo.outpoint === nextProps.fileInfo.outpoint ); } handleMouseOver() { if (this.props.obscureNsfw && this.props.metadata && this.props.metadata.nsfw) { this.setState({ showNsfwHelp: true, }); } } handleMouseOut() { if (this.state.showNsfwHelp) { this.setState({ showNsfwHelp: false, }); } } render() { const { metadata, isLoading, isDownloading, playingUri, fileInfo, contentType, changeVolume, volume, uri, videoPause, setVideoPause, } = this.props; const isPlaying = playingUri === uri; const isReadyToPlay = fileInfo && fileInfo.written_bytes > 0; const obscureNsfw = this.props.obscureNsfw && metadata && metadata.nsfw; const mediaType = lbry.getMediaType(contentType, fileInfo && fileInfo.file_name); let loadStatusMessage = ''; if (fileInfo && fileInfo.completed && !fileInfo.written_bytes) { loadStatusMessage = __( "It looks like you deleted or moved this file. We're rebuilding it now. It will only take a few seconds." ); } else if (isLoading) { loadStatusMessage = __('Requesting stream...'); } else if (isDownloading) { loadStatusMessage = __('Downloading stream... not long left now!'); } const klasses = []; klasses.push(obscureNsfw ? 'video--obscured ' : ''); if (isLoading || isDownloading) klasses.push('video-embedded', 'video'); if (mediaType === 'video') { klasses.push('video-embedded', 'video'); klasses.push(isPlaying ? 'video--active' : 'video--hidden'); } else if (mediaType === 'application') { klasses.push('video-embedded'); } else if (!isPlaying) klasses.push('video-embedded'); const poster = metadata.thumbnail; return (
{isPlaying && (!isReadyToPlay ? ( ) : ( ))} {!isPlaying && (
)} {this.state.showNsfwHelp && }
); } } export default Video;