import React from 'react'; import FilePrice from 'component/filePrice'; import Link from 'component/link'; import Modal from 'component/modal'; import lbry from 'lbry'; import { Thumbnail } from 'component/common'; class VideoPlayButton extends React.Component { onPurchaseConfirmed() { this.props.closeModal(); this.props.startPlaying(); this.props.loadVideo(this.props.uri); } onWatchClick() { this.props.purchaseUri(this.props.uri).then(() => { if (!this.props.modal) { this.props.startPlaying(); } }); } render() { const { button, label, className, metadata, metadata: { title }, uri, modal, closeModal, isLoading, costInfo, fileInfo, mediaType } = this.props; /* title={ isLoading ? "Video is Loading" : !costInfo ? "Waiting on cost info..." : fileInfo === undefined ? "Waiting on file info..." : "" } */ const disabled = isLoading || fileInfo === undefined || (fileInfo === null && (!costInfo || costInfo.cost === undefined)); const icon = ['audio', 'video'].indexOf(mediaType) !== -1 ? 'icon-play' : 'icon-folder-o'; return (
{__("You don't have enough LBRY credits to pay for this stream.")} {__('This will purchase')} {title} {__('for')} {' '} {' '}{__('credits')}. {__('Sorry, your download timed out :(')}
); } } class Video extends React.Component { constructor(props) { super(props); this.state = { isPlaying: false }; } startPlaying() { this.setState({ isPlaying: true }); } render() { const { metadata, isLoading, isDownloading, fileInfo, contentType } = this.props; const { isPlaying = false } = this.state; const isReadyToPlay = fileInfo && fileInfo.written_bytes > 0; 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... it may sit here for like 15-20 seconds in a really awkward way... we're working on it" ); } else if (isDownloading) { loadStatusMessage = __('Downloading stream... not long left now!'); } let klassName = ''; if (isLoading || isDownloading) klassName += 'video-embedded video'; if (mediaType === 'video') { klassName += 'video-embedded video'; klassName += isPlaying ? ' video--active' : ' video--hidden'; } else if (mediaType === 'application') { klassName += 'video-embedded'; } else { if (!isPlaying) klassName += 'video-embedded'; } const poster = metadata.thumbnail; return (
{isPlaying ? !isReadyToPlay ? {__( "this is the world's worst loading screen and we shipped our software with it anyway..." )} {' '}

{loadStatusMessage}
: :
}
); } } const from = require('from2'); const player = require('render-media'); const fs = require('fs'); class VideoPlayer extends React.Component { componentDidMount() { const elem = this.refs.media; const { downloadPath, filename } = this.props; const file = { name: filename, createReadStream: opts => { return fs.createReadStream(downloadPath, opts); } }; player.append(file, elem, { autoplay: true, controls: true }); } render() { const { downloadPath, mediaType, poster } = this.props; return (
{['audio', 'application'].indexOf(mediaType) !== -1 && }
); } } export default Video;