fix: open pdf's externally
This commit is contained in:
parent
2f2f37199c
commit
6be75ea612
4 changed files with 52 additions and 23 deletions
|
@ -107,14 +107,14 @@ class FileRender extends React.PureComponent<Props> {
|
|||
application: !source.url ? null : (
|
||||
<webview
|
||||
ref={element => this.processSandboxRef(element)}
|
||||
title=''
|
||||
sandbox='allow-scripts allow-forms allow-pointer-lock'
|
||||
title=""
|
||||
sandbox="allow-scripts allow-forms allow-pointer-lock"
|
||||
src={source.url}
|
||||
autosize='on'
|
||||
autosize="on"
|
||||
style={{ border: 0, width: '100%', height: '100%' }}
|
||||
useragent='Mozilla/5.0 AppleWebKit/537 Chrome/60 Safari/537'
|
||||
enableremotemodule='false'
|
||||
webpreferences='sandbox=true,contextIsolation=true,webviewTag=false,enableRemoteModule=false,devTools=false'
|
||||
useragent="Mozilla/5.0 AppleWebKit/537 Chrome/60 Safari/537"
|
||||
enableremotemodule="false"
|
||||
webpreferences="sandbox=true,contextIsolation=true,webviewTag=false,enableRemoteModule=false,devTools=false"
|
||||
/>
|
||||
),
|
||||
video: (
|
||||
|
@ -150,7 +150,14 @@ class FileRender extends React.PureComponent<Props> {
|
|||
if (!viewer && readableFiles.includes(mediaType)) {
|
||||
viewer = <DocumentViewer source={{ stream, fileType, contentType }} theme={currentTheme} />;
|
||||
}
|
||||
|
||||
// temp workaround
|
||||
if (claim && claim.value.stream.metadata.fee && claim.value.stream.metadata.fee.amount > 0) {
|
||||
const paidMessage = __(
|
||||
'Currently, only free content is available on lbry.tv. Try viewing it in the desktop app.'
|
||||
);
|
||||
const paid = <LoadingScreen status={paidMessage} spinner={false} />;
|
||||
return paid;
|
||||
}
|
||||
// Message Error
|
||||
const unsupportedMessage = __("Sorry, looks like we can't preview this file.");
|
||||
const unsupported = <LoadingScreen status={unsupportedMessage} spinner={false} />;
|
||||
|
@ -160,7 +167,7 @@ class FileRender extends React.PureComponent<Props> {
|
|||
}
|
||||
|
||||
render() {
|
||||
return <div className='file-render'>{this.renderViewer()}</div>;
|
||||
return <div className="file-render">{this.renderViewer()}</div>;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -287,19 +287,10 @@ class MediaPlayer extends React.PureComponent<Props, State> {
|
|||
}
|
||||
|
||||
showLoadingScreen(isFileType: boolean, isPlayableType: boolean) {
|
||||
const { claim, mediaType, contentType } = this.props;
|
||||
const { mediaType, contentType } = this.props;
|
||||
const { unplayable, fileSource, hasMetadata } = this.state;
|
||||
|
||||
if (claim && claim.value.stream.metadata.fee && claim.value.stream.metadata.fee.amount > 0) {
|
||||
return {
|
||||
isLoading: false,
|
||||
loadingStatus: __(
|
||||
'Currently, only free content is available on lbry.tv. Try viewing it in the desktop app.'
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
if (['audio', 'video'].indexOf(mediaType) === -1) {
|
||||
if (IS_WEB && ['audio', 'video'].indexOf(mediaType) === -1) {
|
||||
return {
|
||||
isLoading: false,
|
||||
loadingStatus: __(
|
||||
|
@ -361,7 +352,7 @@ class MediaPlayer extends React.PureComponent<Props, State> {
|
|||
{loadingStatus && <LoadingScreen status={loadingStatus} spinner={isLoading} />}
|
||||
{isFileReady && <FileRender claim={claim} source={fileSource} mediaType={mediaType} />}
|
||||
<div
|
||||
className="content__view--container"
|
||||
className='content__view--container'
|
||||
style={{ opacity: isLoading ? 0 : 1 }}
|
||||
ref={this.mediaContainer}
|
||||
/>
|
||||
|
|
|
@ -1,17 +1,41 @@
|
|||
// @flow
|
||||
import * as React from 'react';
|
||||
import { stopContextMenu } from 'util/context-menu';
|
||||
import Button from 'component/button';
|
||||
import { shell } from 'electron';
|
||||
|
||||
type Props = {
|
||||
source: string,
|
||||
};
|
||||
|
||||
class PdfViewer extends React.PureComponent<Props> {
|
||||
render() {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
(this: any).openFile = this.openFile.bind(this);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.openFile();
|
||||
}
|
||||
|
||||
openFile() {
|
||||
const { source } = this.props;
|
||||
const path = `file://${source}`;
|
||||
shell.openExternal(path);
|
||||
}
|
||||
|
||||
render() {
|
||||
// We used to be able to just render a webview and display the pdf inside the app
|
||||
// This was disabled on electron@3
|
||||
// https://github.com/electron/electron/issues/12337
|
||||
return (
|
||||
<div className="file-render__viewer" onContextMenu={stopContextMenu}>
|
||||
<webview src={`chrome://pdf-viewer/index.html?src=file://${source}`} />
|
||||
<div className="file-render__viewer file-render--pdf" onContextMenu={stopContextMenu}>
|
||||
<p>
|
||||
{__('PDF opened externally.')}{' '}
|
||||
<Button button="link" label={__('Click here')} onClick={this.openFile} />{' '}
|
||||
{__('to open it again.')}
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -40,6 +40,13 @@
|
|||
}
|
||||
}
|
||||
|
||||
.file-render--pdf {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.document-viewer {
|
||||
overflow: auto;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue