Moar fixes for v30 #2368

Merged
neb-b merged 3 commits from 30-fixes into master 2019-03-21 14:59:31 +01:00
3 changed files with 32 additions and 15 deletions

View file

@ -1,4 +1,5 @@
// @flow // @flow
import type { Claim } from 'types/claim';
import { remote } from 'electron'; import { remote } from 'electron';
import React from 'react'; import React from 'react';
import LoadingScreen from 'component/common/loading-screen'; import LoadingScreen from 'component/common/loading-screen';
@ -14,6 +15,7 @@ import ThreeViewer from 'component/viewers/threeViewer';
type Props = { type Props = {
mediaType: string, mediaType: string,
poster?: string, poster?: string,
claim: Claim,
source: { source: {
stream: string => void, stream: string => void,
fileName: string, fileName: string,
@ -150,7 +152,9 @@ class FileRender extends React.PureComponent<Props> {
if (!viewer && readableFiles.includes(mediaType)) { if (!viewer && readableFiles.includes(mediaType)) {
viewer = <DocumentViewer source={{ stream, fileType, contentType }} theme={currentTheme} />; viewer = <DocumentViewer source={{ stream, fileType, contentType }} theme={currentTheme} />;
} }
// temp workaround
// @if TARGET='web'
// temp workaround to disabled paid content on web
if (claim && claim.value.stream.metadata.fee && claim.value.stream.metadata.fee.amount > 0) { if (claim && claim.value.stream.metadata.fee && claim.value.stream.metadata.fee.amount > 0) {
const paidMessage = __( const paidMessage = __(
'Currently, only free content is available on lbry.tv. Try viewing it in the desktop app.' 'Currently, only free content is available on lbry.tv. Try viewing it in the desktop app.'
@ -158,6 +162,8 @@ class FileRender extends React.PureComponent<Props> {
const paid = <LoadingScreen status={paidMessage} spinner={false} />; const paid = <LoadingScreen status={paidMessage} spinner={false} />;
return paid; return paid;
} }
// @endif
// Message Error // Message Error
const unsupportedMessage = __("Sorry, looks like we can't preview this file."); const unsupportedMessage = __("Sorry, looks like we can't preview this file.");
const unsupported = <LoadingScreen status={unsupportedMessage} spinner={false} />; const unsupported = <LoadingScreen status={unsupportedMessage} spinner={false} />;

View file

@ -1,4 +1,5 @@
// @flow // @flow
import 'babel-polyfill';
import type { Claim } from 'types/claim'; import type { Claim } from 'types/claim';
import * as React from 'react'; import * as React from 'react';
// @if TARGET='app' // @if TARGET='app'
@ -107,7 +108,7 @@ class MediaPlayer extends React.PureComponent<Props, State> {
} }
} }
playMedia() { async playMedia() {
const container = this.mediaContainer.current; const container = this.mediaContainer.current;
const { const {
downloadCompleted, downloadCompleted,
@ -121,7 +122,6 @@ class MediaPlayer extends React.PureComponent<Props, State> {
} = this.props; } = this.props;
// @if TARGET='app' // @if TARGET='app'
const renderMediaCallback = error => { const renderMediaCallback = error => {
if (error) this.setState({ unplayable: true }); if (error) this.setState({ unplayable: true });
}; };
@ -147,6 +147,10 @@ class MediaPlayer extends React.PureComponent<Props, State> {
currentMediaContainer.removeChild(currentMediaContainer.firstChild); currentMediaContainer.removeChild(currentMediaContainer.firstChild);
} }
// A slight delay is a hacky way to improve support for videos that aren't web-optimized
// Works... slightly better than not having it ¯\_()_/¯
await this.sleep(400);
player.append( player.append(
{ {
name: fileName, name: fileName,
@ -195,6 +199,10 @@ class MediaPlayer extends React.PureComponent<Props, State> {
} }
// @if TARGET='app' // @if TARGET='app'
sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
refreshMetadata() { refreshMetadata() {
const { onStartCb } = this.props; const { onStartCb } = this.props;
this.setState({ hasMetadata: true }); this.setState({ hasMetadata: true });
@ -354,7 +362,7 @@ class MediaPlayer extends React.PureComponent<Props, State> {
{loadingStatus && <LoadingScreen status={loadingStatus} spinner={isLoading} />} {loadingStatus && <LoadingScreen status={loadingStatus} spinner={isLoading} />}
{isFileReady && <FileRender claim={claim} source={fileSource} mediaType={mediaType} />} {isFileReady && <FileRender claim={claim} source={fileSource} mediaType={mediaType} />}
<div <div
className='content__view--container' className="content__view--container"
style={{ opacity: isLoading ? 0 : 1 }} style={{ opacity: isLoading ? 0 : 1 }}
ref={this.mediaContainer} ref={this.mediaContainer}
/> />

View file

@ -32,21 +32,24 @@ class DocumentViewer extends React.PureComponent<Props, State> {
componentDidMount() { componentDidMount() {
const { source } = this.props; const { source } = this.props;
const stream = source.stream('utf8');
let data = ''; if (source && source.stream) {
const stream = source.stream('utf8');
stream.on('data', chunk => { let data = '';
data += chunk;
});
stream.on('end', () => { stream.on('data', chunk => {
this.setState({ content: data, loading: false }); data += chunk;
}); });
stream.on('error', () => { stream.on('end', () => {
this.setState({ error: true, loading: false }); this.setState({ content: data, loading: false });
}); });
stream.on('error', () => {
this.setState({ error: true, loading: false });
});
}
} }
renderDocument() { renderDocument() {